Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Javascript 如何创建在重新加载和代码推送过程中保持不变的变量?_Javascript_Meteor_Persistence - Fatal编程技术网

Javascript 如何创建在重新加载和代码推送过程中保持不变的变量?

Javascript 如何创建在重新加载和代码推送过程中保持不变的变量?,javascript,meteor,persistence,Javascript,Meteor,Persistence,如果我写一个插件,它需要一个非常大的初始化(14MB的JavaScript,需要1分钟来设置自己),我如何使这个对象在Meteor项目中使用的JavaScript文件中持久化(因为没有更好的词) 在插件初始化之后,我有一个对象LargeObject,当我添加一个文件simple_todo.js时,我想使用LargeObject,而不需要在每次更改后花费一分钟来加载它 我找不到任何解决办法 我尝试创建一个单独的包来存储这个包对象,但每次更改后都会清除并重新初始化 这样做的正确方式是什么?我想Met

如果我写一个插件,它需要一个非常大的初始化(14MB的JavaScript,需要1分钟来设置自己),我如何使这个对象在Meteor项目中使用的JavaScript文件中持久化(因为没有更好的词)

在插件初始化之后,我有一个对象
LargeObject
,当我添加一个文件simple_todo.js时,我想使用
LargeObject
,而不需要在每次更改后花费一分钟来加载它

我找不到任何解决办法

我尝试创建一个单独的包来存储这个包对象,但每次更改后都会清除并重新初始化


这样做的正确方式是什么?我想Meteor内部应该有某种东西能够在热代码推送中幸存下来。

以下是两种可能的解决方案:

  • 将其某些属性缓存在
    会话中
  • 将其某些属性缓存在简单集合中
  • 在本地环境中使用存根
会话
只能在客户端使用。你可以在任何地方使用收藏

客户

在这里,不需要在客户端和服务器之间传输数据。对于每个连接的新客户机,都会重新运行代码

解放党

服务器

服务器

即使您可以在任何地方访问该收藏,您也不希望任何人能够对其进行更改。因为所有客户端共享同一个集合。集合缓存在客户端。阅读更多信息

树桩 存根可能是最容易实现的。但这是最糟糕的解决方案。您可能必须使用,但最终还是会在生产环境中拥有存根的代码

选择什么
这取决于您的确切用例。如果对象的内容依赖于客户端或用户,那么最好使用session-var。如果它不适用于集合。您可能需要构建一些缓存失效机制,但我想说,这是值得的。

糟糕的措辞!您不需要静态的东西(这是一个OOP术语),而是跨多个代码更改的持久性东西。另外,请添加以下信息:由于数据生成(字符串、数字等字段)或必须生成方法,对象生成是否需要很长时间?如果生成数据只需要很长时间,您可以使用JSON;一个静态变量实际上就是我想要的。因此要选择这个词。这需要很长时间,因为它需要初始化很多东西(通过重写所有包含的库来支持这一点,可以对其进行优化,但这似乎有点疯狂)。它所做的事情之一是设置连接和交换数据(每次连接都会更改),而我无法控制这些数据。所以我真的无法优化这些部分。。。。什么?静态变量只是一个类变量,它与计算或生成无关。除非我大错特错,否则您想要的是避免在每次服务器重新加载时重复一些繁重的计算。这就是为什么我建议接受这个对象,对它进行JSON处理,并使用JSONed版本(即使它已经过时了)。x将包含我的初始化对象。作为独生子女;如果需要的话,我可以把它们放在一起。
example = function () {
  if(!(this.aLotOfData = Session.get('aLotOfData'))) {
    this.aLotOfData = computeALotOfData()
    Session.set('aLotOfData', this.aLotOfData)
  }
}
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
    })
  }
}