最新のサイト(および古いサイト)には、ネストされた構造、オブジェクト階層、ツリーがあります。最も一般的な例はディレクトリです。
今日、多くのプロジェクトがJavascriptを使用して開発されています。この場合、ツリー構造を保存する方法は?これが私が話したいことです。
今の私の仕事は、製品パラメータに基づいてカタログの階層構造を作成することです。
ツリーを格納するためのさまざまなアルゴリズムがあり、そのようなアルゴリズムの例としては、隣接リスト、マテリアライズドパス、ネストされたセット、およびクロージャーテーブルがあります。
これ以上アドバイスをいただければ幸いです。
Joomlaの拡張機能を書いたとき、私はNestedSetをよく使用しました。私がこのモデルに最初に出会ったのはこのCMSでした。しかし、スタックが変更され、Javascriptになりました。習慣は残っており、Joomlaサイトも残っています。新しいサービスやプロジェクトにデータを転送する必要があります。
ネストされたセットに関する情報はインターネット上に非常に多くあり、必要に応じていつでも見つけることができますが、それでも、このデータモデルについて少し説明する必要があります。
ネストされたセットのポイントは、階層内の各ノードに左キーと右キーのペアがあることです。それらの値に応じて、ツリーがトラバースされます。私の意見では、アルゴリズムの良い点はデータサンプリングの速度です。このアルゴリズムには再帰はありません。同時に、ツリー構造の変更、ノードの追加、削除、転送を行うには、すべてのキーを再計算する必要があります。
Javascriptプロジェクトでネストされたセットのデータを使用するには、このモデルで機能するモジュールが必要です。npmを
検索すると、ネストされたセット構造からデータをフェッチする機能を持つモジュールが見つかりました。すべてのキーはすでに添付されているはずです。構造を編集する必要がありましたが、そのような機会は見つかりませんでした。
もう1つの問題は、ほとんどの場合、データとツリー構造の両方が1つのエンティティに格納されていることですが、私の意見では、これらを分離する方がはるかに効率的です。
したがって、1つの同じカテゴリ(これらのカテゴリ)が異なる親に存在する可能性があります。これにより、ユーザーはよく考えられた階層を使用して、探しているものをすばやく見つけることができます。
SEOの観点からは、URLが異なり、コンテンツが同じ2つのページがありますが、これは正規のリンクによって解決できます。
これが正しくない場合は、SEOスペシャリストに訂正を依頼します。
結局、モジュールを作成してnpmjs.comに公開することにしました。
それが誰かに役立つなら、私はとてもうれしいです。
現在、私はそれに取り組んでおり、ツリーを介したノードの転送を実装することを計画しています。
パッケージをダウンロードできるnpmへのリンクは次のとおりです。
ソースをダウンロードできるgithubへのリンクは次のとおりです。
ドキュメントはあちこちにあります。
コメントは大歓迎です。
良いプロジェクトと興味深いタスクをお祈りします。