JavaScript 优化...全局变量

3

我在制作一个Web应用程序。关于JavaScript性能,我有一个非常基本的问题。有时候我需要一个全局变量来存储整个网站打开期间使用的信息。

例如,一个名为needs_saved的变量,它是true或false,表示页面是否需要保存。我可能还有另一个名为is_ie、ie_version或space_remaining的变量。

这些都是我在应用程序中的各个函数中需要的变量。

现在,我知道全局变量不好,因为它们需要浏览器搜索每个函数范围的层级。但是,我不知道是否有更好的方法来存储整个程序需要的值。

我知道我可以创建一个名为“program_status”的全局对象,并给它属性is_ie,ie_version等... 但这样做有没有更好呢?因为它首先必须找到我的program_status对象(存储为全局变量),然后再找到内部属性?

也许我想得太多了。

谢谢


2
过早的优化是万恶之源。尤其是这个。 - SLaks
2
我认为过多使用全局变量的更大问题是代码可读性的丧失和代码紧密耦合,而不是性能。 - Chetan S
3个回答

6

您不用担心。

全局变量的性能影响微乎其微。
不建议使用全局变量,因为它们可能会使代码更难以维护。
但在您的情况下,它们并不会造成影响。


这是一个旧的内容 - 只是补充一下 - 我猜全局变量适用于环境变量。然而,大量使用全局变量可能会对性能产生影响:http://speakingjs.com/es5/ch16.html - Quicker
我最近制作了一个非常计算密集型的网页,在将全局变量切换为本地变量后,屏幕刷新时间从0.9秒降至0.4秒,这个改变对响应速度产生了巨大影响。 - Martin Argerami

5
全局变量使用应尽量减少的原因是,当有很多全局变量时,全局命名空间会被污染,并且如果您的程序需要使用一些第三方库,这些库也会创建自己的全局变量,那么就有可能发生冲突。
创建一个单独的对象来保存所有全局状态是一个好主意,因为它限制了您需要在全局级别保留的标识符数量。
为了解决性能问题,您可以在任何需要多次访问该对象的作用域中创建对该对象的本地引用:
所以,不要使用:
if (globalState.isIe) { alert(globalState.ieMessage); }

您可以做到

var state = globalState;
if (state.isIe) { alert(state.ieMessage); }

如果您只访问状态对象一次,那么您无需这样做。无论如何,即使您从未这样做过,性能损失也将是可以忽略的。


0
如果你担心性能问题,就编写一些干净的代码,然后使用分析工具进行优化。我知道Safari和Google Chrome都有一个,而且几乎可以确定火狐浏览器的Firebugs也有一个。甚至Internet Explorer 8也有一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接