0

この質問がクローズされる可能性があることは承知していますが、jQuery、AJAX リクエスト、または基本的なフレームワーク設計で検索機能のどの部分を実装する必要があるかを判断するのに本当に苦労しています。

一般的に、私が検討している 3 つのタスクは、新しい検索クエリの実行、フィルター/並べ替えの適用、ページネーションです。現在、これらの機能はすべて Django (私が使用しているフレームワーク) によって処理されていますが、このアプローチは遅く、柔軟性に欠けていることがわかりました。これには、サイトの JavaScript 側を実際に移動する必要がある部分があることは認識していますが、どこを区別するかを決めるのに苦労しており、ガイドとして役立つ一連の Web 標準があるかどうか疑問に思っています。

検索クエリの実行: 基本的にここで行うことは、いくつかのフォームで値を収集し、JSON オブジェクトを REST API に POST して、結果を JSON として取得することだけです。

フィルター/並べ替え: 少し異なるエンドポイントで同じ REST API に対して新しい AJAX 呼び出しを行うか、JSON オブジェクトのデータに基づいて結果の古いリストをフィルター処理することで、フィルター処理を行うことができました。並べ替えについては、現在、さまざまな方法でデータを並べ替える Python モジュールがありますが、これには、並べ替えごとに新しい get 要求が必要であり、ロジックは十分に単純であるため、Javascript に簡単に移行できます。

ページネーション: ここでは 1 つの変更を加えたかなり標準的なものです。つまり、別の AJAX 呼び出しを行うことでページネーションを実装できる可能性があります。使用している REST API を使用すると、返したい回答の正確な境界を定義できるためです。非標準のソートを使用すると、実際には機能しません。現在、私は動作するDjangoのページネーションを使用していますが、ページネーションにjQueryソリューションを使用すると、アプリではるかに軽くなるように感じます。

回答が部分的に意見に基づいていることは承知していますが、セキュリティの問題、パフォーマンス、または Web 標準からの重大な逸脱など、これらのオプションのいくつかを他のオプションよりも選択する必要がある具体的な理由を実際に探しています。

4

1 に答える 1

2

Django の遅さについて

現在、これらの機能はすべて Django (私が使用しているフレームワーク) によって処理されていますが、このアプローチは遅く、柔軟性に欠けていることがわかりました。

Django の ORM を介して検索を実行しているということですか? その場合、これが遅くなる理由が 2 つあります。

  1. インデックスが作成されていないフィールドに対してクエリを実行しています。
  2. どのデータベースでも遅いフルテキスト検索を実行しようとしています (または __icontains を使用しています)。

Django の ORM は、データベースに関するシムです。API が優れているだけで、使用しているデータベースと同じパフォーマンスと柔軟性の制限があります。検索のパフォーマンスと柔軟性が必要な場合は、検索用に最適化されたデータストアを使用してください。

検索クエリの実行

Haystackを調べましたか? データの検索を実行するためにカスタマイズされた API を提供し、検索速度と柔軟性のために最適化されたバックエンドと統合します (私のお気に入りはelasticsearchです)。

スタックに余分な技術を追加したくなく、postgres を使用している場合は、全文検索のために GIN および GIST インデックスを調べてみませんか。ただし、それを管理するにはいくつかの拡張機能を使用する必要があり、必要な場所に追加のインデックスを追加するには、クエリのプロファイルを学習する必要があります。

フィルター/並べ替え

これは常にサーバー上で行ってください。フィルタリング/ソートのためにデータベース全体に相当するクエリ結果をブラウザーにロードしたい場合を除き、不要なデータを早期に破棄することを賢くできるサーバーで実行する必要があります。

ページネーション

Django の組み込みのページネーション システムは少し欠けている可能性がありますが、Haystack は独自のページネーションを提供し、使いやすく成熟したdjango-paginatorが常に存在します。

ノート

JQuery は、検索ページをより洗練されたものにするための非常に優れた方法ですが、すべてをブラウザーに移行することで問題が解決するわけではありません。サーバー側で自由に使えるツールを使用して、API をより高速/柔軟にし、その追加の柔軟性を使用してクライアント側をさらに改善します。

于 2013-07-30T14:29:30.560 に答える