![](/img/trans.png)
[英]How do I create a variable in Smarty and fill this variable with html code?
[英]How do I create a variable that persists across reloads and code pushes?
如果我编写的插件需要非常大的初始化(14 mb JavaScript,需要花费一分钟的时间自行设置),如何在Meteor项目中使用的JavaScript文件中使该对象持久化(因为缺少更好的词)?
插件初始化之后,我有了一个对象LargeObject
并且当我添加文件simple_todo.js时 ,我想使用LargeObject
而不用LargeObject
更改后都花一分钟时间来加载它。
我找不到任何解决方案。
我尝试制作一个单独的包以将其存储在Package对象中,但是在每次更改后都会清除该包并重新初始化。
这样做的正确方法是什么? 我想流星中应该有一些内部组件可以幸免于热代码推送。
这是两种可能的解决方案I:
Session
缓存其某些属性 Session
只能在客户端使用。 您可以在任何地方使用收藏集。
客户
example = function () {
if(!(this.aLotOfData = Session.get('aLotOfData'))) {
this.aLotOfData = computeALotOfData()
Session.set('aLotOfData', this.aLotOfData)
}
}
在此,客户端和服务器之间无需传输任何数据。 对于每个连接的新客户端,将重新运行代码。
LIB
MuchDataCollection = new Mongo.Collection('MuchDataCollection')
服务器
Meteor.publish('MuchData', function (query) {
return MuchDataCollection.find(query)
})
服务器
example = function () {
if(
!this.aLotOfData = MuchDataCollection.findOne({
name: 'aLotOfData'
}).data
) {
this.aLotOfData = computeALotOfData()
MuchDataCollection.insert({
name: 'aLotOfData',
data: this.aLotOfData
})
}
}
即使是面团,您也可以在任何地方访问该收藏集,您也不希望任何人都可以对其进行更改。 因为所有客户共享同一个集合。 集合在客户端缓存。 阅读此以获得更多信息。
存根可能是最容易实现的。 但这是最糟糕的解决方案。 您可能必须使用设置变量,并且仍然最终在生产环境中拥有存根的代码。
这取决于您的确切用例。 如果对象的内容取决于客户端或用户,则最好使用会话变量。 如果没有收集。 您可能需要构建一些缓存无效化机制,但是我想这是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.