0

プログラミング電子ブックのビジュアルカタログを作成するために、小さなライブラリアプリケーションを構築しています。これまでに、BooksViewModel.jsファイルのko.observableArrayに電子書籍情報の一部を追加しました。後で、MongooseDBに保存されているすべてのデータを使用してNodeJSアプリケーションを実装し、そこからアクセスしますが、今では、Knockout.jsから直接実験しています。

デフォルトでは、私のライブラリには、追加した、整理されていないすべての本が表示されるので、言語ごとに「カテゴリ」を実装するのを楽しみにしています。すべてのbookオブジェクトには言語属性が含まれています。言語で表示された本をフィルタリングしたいのですが、これを行うための最良の方法がどのようになるかについて少し混乱しています。

配列に関する本は整理されておらず、すべてそこにドロップされています。javascript、その他のCなどについての話もあります。最初は、言語ごとに個別の配列を作成し、次にViewModelにメソッドを実装して、要求した言語の対応する配列を選択することを考えました。

後で、NodeJS APIを実装して、言語別に取得します。

GET /languages/C // will get a json corresponding all the books that talks about C

ViewModelには、次のメソッドを含めることができます。

self.findByLanguage = function(lang) {
   self.books = // GET /languages/:lang
};

しかし、それは毎回データベースにクエリを実行します。最初に本全体をjsonでロードし、それらすべてをクライアント側の配列に保存してから、フィルター処理する方がよいと思います。そうすれば、1つのリクエストだけが行われます。すべての本を含むグローバル配列を作成してから、ko.utils.ArrayFilterを使用してフィルターを実装できます。

皆さんは何が最善のアプローチになると思いますか?たぶんもっと良い方法があります。

前もって感謝します!

4

1 に答える 1

1

「私のプログラミング電子書籍」がこのアプリケーションがあなただけのものであることを意味する場合、データベースの負荷はこれらのいずれの場合でも一般にゼロに近いため、すべての書籍と選択した少数の書籍のみをクエリすることにはわずかな違いがあります。本の数はおそらく数百冊でしょう。

しかし、待ってください、それらをすべて一度にロードすることの実際の利点は何ですか?

リスト全体をクライアント側に保存することの利点

  • ほとんどのカテゴリを常に表示している場合は、カテゴリを変更するだけで、データベースの負荷とすべての帯域幅を数ミリ秒節約できます。

欠点

  • Bandwithの使用法はひどく、最初のページの読み込みは遅く、不要な本や必要のない本がたくさんあります。
  • 使用しているデータベースシステムは、重要な最適化要素として速度を持っています。にインデックスを追加するlanguageと、とにかくクエリをすぐに実行する必要があります。データソースとして配列を使用している場合、これは「配列全体を送信するだけ」と比較して表示されない場合があります。
  • 複数のウィンドウ/ブラウザ/複数のPCでページを開くには、すべてのクライアントへのすべての変更を同期する必要があります。これを行わないと、ページをリロードするまで古いオブジェクトが存在することになります。これは、リストをクライアント側に持つ場合に避けるべきものです。

これをローカルコンピューターまたはローカルネットワーク内で実行することを計画している場合、速度はささいな問題になるはずです。データベースに作業を任せてみませんか?そうではなく、速度が問題になる場合は、「最初のページの読み込みは遅いが、すべてが読み込まれると高速になる」よりも、「カテゴリXをかなり速く読み込むことができる」と個人的に評価します。

于 2012-11-05T01:10:27.110 に答える