Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 数据过滤的最佳方法_Node.js_Knockout.js - Fatal编程技术网

Node.js 数据过滤的最佳方法

Node.js 数据过滤的最佳方法,node.js,knockout.js,Node.js,Knockout.js,我正在构建一个小的库应用程序,以获得我的编程电子书的可视化目录。 现在,我已经在BooksViewModel.js文件的ko.observearray中添加了一些电子书信息。 稍后,我将使用保存在MongooseDB中的所有数据实现一个NodeJS应用程序,并从那里访问它们,但现在,我只是直接从Knockout.js进行实验 默认情况下,我的库显示我添加、解构的所有书籍,因此我期待着通过语言实现“类别”。每个book对象都包含一个language属性。 我想过滤用语言显示的书籍,但我有点困惑,怎

我正在构建一个小的库应用程序,以获得我的编程电子书的可视化目录。 现在,我已经在BooksViewModel.js文件的ko.observearray中添加了一些电子书信息。 稍后,我将使用保存在MongooseDB中的所有数据实现一个NodeJS应用程序,并从那里访问它们,但现在,我只是直接从Knockout.js进行实验

默认情况下,我的库显示我添加、解构的所有书籍,因此我期待着通过语言实现“类别”。每个book对象都包含一个language属性。 我想过滤用语言显示的书籍,但我有点困惑,怎么做才是最好的方法

阵列上的书没有组织,它们都掉在那里了。。一些人谈论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
};
但每次都会查询数据库。我想最好先加载整本书,将它们保存到客户端的一个数组中,然后过滤它们。这样,只会提出一个请求。 我可以拥有一个包含所有书籍的全局数组,然后使用ko.utils.ArrayFilter实现过滤器

你们认为什么是最好的方法?也许有更好的办法

提前谢谢

如果“我的编程电子书”表示此应用程序仅适用于您,那么查询所有书籍和仅查询选定的几本书籍之间的差别很小,因为在这两种情况下,数据库负载通常接近于零。书的数量可能只有几百本

但是等等,一次加载它们的实际好处是什么

将整个列表存储在客户端的上方

  • 如果您总是查看大多数类别,则只需更改类别即可节省几毫秒的数据库负载和所有带宽
缺点

  • Bandwith使用非常糟糕,初始页面加载速度较慢,会给你带来大量你不想要或不需要的书籍
  • 您正在使用的数据库系统将速度作为重要的优化因素。在
    语言
    上添加索引,无论如何,查询应该立即完成。当您使用阵列作为数据源时,与“仅发送整个阵列”相比,这可能不会显示
  • 在多个窗口/浏览器/多台电脑上打开页面需要将所有更改同步到所有客户端。如果不这样做,在重新加载页面之前,您将拥有旧对象,这正是在客户端使用列表时应该避免的

如果您计划在本地计算机或本地网络上运行此功能,那么速度应该是一个微不足道的问题,那么为什么不让数据库来完成这项工作呢?如果你不是,而且速度是一个问题,我个人认为“我可以很快加载X类”,而不是“初始页面加载很慢,但一旦加载了所有内容,它就会很快”。

你不应该将所有书籍发送给他们没有要求的客户。这将是很多可能永远不会被使用的数据。在服务器端执行过滤。