繁体   English   中英

如何创建在重新加载和代码推送之间持续存在的变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM