我正在构建一个小型库应用程序,以获得我的编程电子书的可视化目录。 到目前为止,我已将我的一些电子书信息添加到我的BooksViewModel.js文件中的ko.observableArray中。 稍后,我将实现一个NodeJS应用程序,其中包含MongooseDB中保存的所有数据并从那里访问它们,但到目前为止,我只是直接从Knockout.js进行实验。
默认情况下,我的图书馆会显示我添加的所有图书,这些图书都是无组织的,所以我期待按语言实现“类别”。每个书籍对象都包含一个语言属性。 我想过滤用语言显示的书籍,但我对如何做到这一点的最佳方式感到有点困惑。
阵列上的书籍没有组织,它们都被放在那里..一些关于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,将它们全部保存到客户端的数组中,然后过滤它们。这样只需要一个请求。 我可以有一个包含所有书籍的全局数组,然后使用ko.utils.ArrayFilter实现过滤器。
你们认为最好的方法是什么?也许有更好的方法。
提前致谢!
答案 0 :(得分:0)
如果“我的编程电子书”意味着此应用程序仅供您使用,那么查询所有书籍和仅选定的几本书之间存在微不足道的差异,因为在这两种情况下,数据库负载通常都接近于零。书的数量可能是几百本。
但是等一下,一次加载它们的实际好处是什么?
存储整个列表客户端的好处
<强>缺点强>
language
上添加一个索引,无论如何都应该立即进行查询。当您使用数组作为数据源时,与“仅发送整个数组”相比,这可能不会显示。如果您计划在本地计算机或本地网络中运行此程序,速度应该是一个微不足道的问题,那么为什么不让数据库完成工作呢?如果你不是,而速度是一个问题,我个人会认为“我可以快速加载X类”,“初始页面加载速度很慢,但一旦所有内容加载就会很快”。