感谢大家!
最近我想在meteor上建立一个小型cms,但有一些问题
1、缓存、页面缓存、数据缓存等。
例如,当人们搜索某篇文章时
在服务器端:
Meteor.publist('articles',function(keyword){
return Articles.find({keyword:keyword});
});
在客户端:
Meteor.subscribe('articles',keyword);
没关系,但是……
问题是,每次人们这样做时,它都会调用 mongo 查询,并降低性能,
在其他框架中使用常见的http或https,人们可以依赖squid或varnish之类的东西来缓存页面或数据,所以每次你路由到一个url时,你都会从缓存服务器读取数据,但是Meteor构建在socket.js或websocket上,而且我不知道如何通过套接字进行缓存......我尝试了清漆,但没有看到效果。
那么,它可能会忽略websocket吗?有没有一些方法可以缓存数据,在mongodb中,在服务器中,我可以添加一些缓存服务器吗?
2, chat
我看到聊天室的例子https://github.com/zquestz/simplechat https://github.com/zquestz/simplechat但与使用socket.js的暗示不同,这个例子将聊天消息保存在mongodb中,所以数据流是message->mongo->query->people,这也调用了mongo查询!
在socket.js中,只需将套接字保存在上下文(或服务器端缓存)中,这样数据就不会通过数据库。
我的问题是,Meteor 中是否有一个套接字接口,以便我可以消息->套接字->人员?如果不能,如聊天室示例那样,在生产环境中的性能如何(我发现它运行缓慢......)
使用 Meteor,您不必担心缓存 Mongodb 查询。 Meteor 会为你做到这一点。每有关数据和安全的文档 http://docs.meteor.com/#dataandsecurity:
每个 Meteor 客户端都包含一个内存数据库缓存。为了管理客户端缓存,服务器发布 JSON 文档集,然后客户端订阅这些文档集。当集合中的文档发生变化时,服务器会修补每个客户端的缓存。
[...]
订阅后,客户端将其缓存用作快速本地数据库,从而极大地简化了客户端代码。读取不需要到服务器进行昂贵的往返。它们仅限于缓存的内容:对客户端上集合中的每个文档的查询只会返回服务器正在发布到该客户端的文档。
因为 Meteor 确实会经常轮询服务器以查看客户端的缓存是否需要修补,所以您可能会时不时地看到这些轮询。但它们可能不是很大的请求。此外,由于 Meteor 的延迟补偿功能,当您更新数据源时,客户端会立即反映更改,而无需先等待服务器。这减少了用户对性能下降的印象。
如果您在 mongo 中有很多文档,并且仍然启用了 autopublish 包,您可能还会看到它们全部被获取。您可以通过删除它来解决这个问题meteor remove autopublish
并编写代码仅发布相关数据而不是整个数据库。
如果您确实需要手动管理缓存,文档还介绍了这一点:
复杂的客户端可以打开和关闭订阅,以控制缓存中保存的数据量并管理网络流量。关闭订阅后,其所有文档都会从缓存中删除,除非另一个活动订阅也提供了相同的文档。
目前正在对 Meteor 进行其他性能改进,包括支持“大量客户端”的 DDP 级代理。您可以在以下位置查看更多详细信息:流星路线图 https://trello.com/board/meteor-roadmap/508721606e02bb9d570016ae.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)