gpt4 book ai didi

javascript - 什么时候构造 Javascript 中的对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:38:38 25 4
gpt4 key购买 nike

考虑以下 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)?

最佳答案

答案是,您不应该知道。您展示的示例之间几乎没有区别。您合理担心这一点的唯一方法是,如果您有实际证据表明某种方式明显损害了特定解释器的性能或内存使用。在那之前,口译员的工作就是为您担心这些事情。

就是说,如果您真的想知道……试试看就知道了。调用不同版本 1,000,000 次,看看有什么不同。

制作一个巨型版本的对象,看看是否有凹痕。看任务管理器。尝试不同的浏览器。报告你的结果。这是一种比仅仅在互联网上询问一群 SCSS 他们猜测的情况要好得多的发现方法。

只要记住对象无论如何都必须在内存中,不管......作为源文本

关于javascript - 什么时候构造 Javascript 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com