Javascript优化...全局变量

时间:2010-02-26 01:03:46

标签: javascript performance

我正在制作一个webapp。我有一个关于javascript性能的相当基本的问题。有时我需要一个全局变量来存储在网站打开的整个过程中使用的信息。

一个例子是名为needs_saved的变量。说明页面是否需要保存是真是假。我可能有另一个名为is_ie,ie_version或space_remaining的变量。

这些都是我在整个应用程序中的各种功能所需的变量。

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

我知道我可以创建一个名为'program_status'的全局对象,并为其提供属性is_ie,ie_version等等......但这是否更好,因为它首先必须找到我的program_status对象(存储为全局变量) ,然后内部属性?

也许我在想这个。

由于

3 个答案:

答案 0 :(得分:5)

你无需担心。

全局变量对性能的影响很小 不鼓励使用全局变量,因为它们会使代码难以维护 在你的情况下,他们不会。

答案 1 :(得分:4)

全局变量使用的原因应该保持在最低限度是因为全局命名空间在很多时候被污染了,如果你的程序需要使用一些第三方库来创建他们的程序,很可能会发生冲突拥有全局。

创建单个对象以保存所有全局状态是一个好主意,因为它限制了您需要在全局级别保留的标识符数量。

要解决性能问题,您可以在需要多次访问它的任何范围内创建对该对象的本地引用:

所以而不是

if (globalState.isIe) { alert(globalState.ieMessage); }

你可以做到

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

如果您只访问一次状态对象,则无需执行此操作。在任何情况下,即使您从未这样做,性能损失也可以忽略不计。

答案 2 :(得分:0)

如果您担心性能问题,请编写干净的代码,然后在其上运行分析器以进行优化。我知道Safari和谷歌Chrome都有一个,而且非常确定Firebugs也包含一个用于Firefox的版本。哎呀,即使是Internet Explorer 8也有一个。