Sur n'importe quel site moderne (et sur des sites plus anciens) il y a des structures imbriquées, une hiérarchie d'objets, des arbres. L'exemple le plus courant est un répertoire.
Aujourd'hui, de nombreux projets sont développés avec Javascript. Comment stocker les arborescences dans ce cas? C'est ce dont je voudrais parler.
Ma tâche consiste maintenant à établir une structure hiérarchique du catalogue en fonction des paramètres du produit.
Il existe divers algorithmes pour stocker les arbres, et des exemples de tels algorithmes sont la liste d'adjacence, le chemin matherialisé, l'ensemble imbriqué et la table de fermeture.
Si vous pouvez en dire plus, je serai ravi d'entendre et d'apprendre.
Quand j'ai écrit des extensions pour Joomla, j'ai beaucoup utilisé l'ensemble imbriqué. C'est dans ce CMS que j'ai rencontré ce modèle pour la première fois. Mais maintenant, la pile a changé et maintenant c'est Javascript. Les habitudes demeurent, ainsi que les sites Joomla. Il est nécessaire de transférer des données vers de nouveaux services et projets.
Il y a beaucoup d'informations sur les ensembles imbriqués sur Internet et vous pouvez toujours les trouver si vous le souhaitez, mais néanmoins, je dois dire quelques mots sur ce modèle de données.
Le point de l'ensemble imbriqué est que chaque nœud de la hiérarchie a une clé gauche et une paire de clés droite. En fonction de leurs valeurs, l'arbre est parcouru. Les qualités positives de l'algorithme, à mon avis, sont la vitesse d'échantillonnage des données. Il n'y a pas de récursion dans cet algorithme. Dans le même temps, pour modifier l'arborescence, ajouter, supprimer et transférer des nœuds, il est nécessaire de recalculer toutes les clés.
Pour utiliser les données de l'ensemble imbriqué dans les projets Javascript, vous avez besoin d'un module qui peut fonctionner avec ce modèle.
En recherchant dans npm, j'ai trouvé des modules dont la fonctionnalité était de récupérer les données de la structure des ensembles imbriqués, c'est-à-dire toutes les clés doivent déjà avoir été apposées. Il était nécessaire de modifier la structure, mais je n'ai pas trouvé une telle opportunité.
Un autre problème est que dans la plupart des cas, les données et la structure arborescente sont stockées dans la même entité, mais à mon avis, il est beaucoup plus efficace de séparer ces éléments.
Ainsi, une seule et même catégorie (ces catégories) peut appartenir à des parents différents. Cela permettra aux utilisateurs de trouver plus rapidement ce qu'ils recherchent avec une hiérarchie bien pensée.
Bien que d'un point de vue SEO, il y aura deux pages avec des URL différentes et le même contenu, mais cela peut être résolu par des liens canoniques.
Si ce n'est pas correct, je demande aux spécialistes du référencement de me corriger.
Au final, j'ai décidé d'écrire un module et de le publier sur npmjs.com.
Si cela est utile à quelqu'un, je serai très heureux.
Maintenant, je continue à travailler dessus et dans des plans pour implémenter le transfert du nœud à travers l'arbre.
Voici un lien vers npm où vous pouvez télécharger le package .
Voici un lien vers github où vous pouvez télécharger les sources .
La documentation est là et là.
Tout commentaire serait le bienvenu.
Nous vous souhaitons de bons projets et des tâches intéressantes.