我有一个用于MongoDB的节点服务器。目前,我有EJS模板,可显示各种页面,其中一个是用户页面,可显示其订购的产品。
在编辑用户的订阅时,我目前正在将这些产品硬编码到EJS模板中,但是我想将所有产品传递到模板中,以便可以在仪表板上添加,删除和编辑产品。这样,在编辑用户计划时,它将具有产品列表的最新版本(更新的价格等)
此数据不会经常更改,但是我担心,如果每次打开用户页面时都必须查询该数据,那么将其存储在数据库中会对数据库造成不必要的压力(这是非常频繁的任务)。我在考虑一种解决方案,该解决方案可能涉及在服务器启动时以及在数据库中编辑产品时,将产品信息存储在JSON文件中,然后编辑此JSON文件,以便下一页加载将具有更新的值。>
是否有一种标准的方式来做我想做的事?
答案 0 :(得分:0)
您可以检出memoizee软件包,它可以使您基本上在任何JS函数之前附加一个缓存。因此,对于您的情况,您可以执行类似var getCachedProducts = memoizee(myGetProductsFunction, {async: true, maxAge: 15000})
的操作。然后,您可以像以前一样使用新功能getCachedProducts
,但最终只能在15秒内真正执行一次查询。
当然是假设您可以接受一定程度的延迟。如果您没有延迟,则必须考虑通过仪表板进行任何更改时生成平面表,并每次都查询该表,但是那样的话,您必须自己确保一致性(即大多数情况下一起更新)。
要添加您的想法,JSON file 并不是一个很好的选择,因为您绝对不想重复读取列表的磁盘。不过,您可以将列表存储在内存中,memoizee
就是这样做的。