考虑以下 Javascript 函数 (1):
function setData(domElement) {
domElement.myDataProperty = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
};
现在我不喜欢这个函数的是每次调用函数时都会创建完全相同的对象。由于对象不会改变,我宁愿只创建一次。所以我们可以进行以下调整(2):
var dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
function setData(domElement) {
domElement.myDataProperty = dataObject;
};
现在,当脚本加载并存储在dataObject
. 但是让我们假设它setData
只是偶尔被调用——在脚本加载的大多数时候,该函数没有被使用。在这种情况下,我不喜欢这个函数的是对象总是被创建并保存在内存中,包括许多永远不会使用它的场合。我想你可以做这样的事情来达到理想的平衡(3):
var dataObject;
function setData(domElement) {
if (!dataObject) {
dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
}
domElement.myDataProperty = dataObject;
};
这有意义吗?我认为这取决于解释器何时决定创建一个对象。是真的等到!dataObject
条件通过了,还是进入函数,尝试聪明,决定提前构造?也许不同的 Javascript 引擎对此有不同的政策?
然后当然还有这些优化在实践中是否重要的问题。显然,这取决于对象的大小、引擎的速度、可用资源的数量等因素。但总的来说,你会说哪一个是更重要的优化:从 (1) 到 (2)还是从(2)到(3)?