我在做一个网络应用。关于javascript的性能,我有一个相当基本的问题。有时我需要一个全局变量来存储整个网站打开时使用的信息。
一个名为needs_saved的变量就是一个例子。判断页面是否需要保存是对还是错。我可能有另一个名为is_ie、ie_version或space_remaining的变量。
这些都是我需要在整个应用程序的各种函数中使用的变量。
现在,我知道全局变量是不好的,因为它们需要浏览器搜索每个级别的函数作用域。但是,我不知道是否有更好的方法来存储整个程序中需要的值。
我知道我可以创建一个名为'program_status‘的全局对象,并为其赋予is_ie、ie_version等属性……但是,这是否更好,因为它必须首先找到我的program_status对象(存储为全局变量),然后再找到内部属性?
也许我想太多了。
谢谢
发布于 2010-02-26 09:08:22
你没什么好担心的。
全局变量对性能的影响很小。
不鼓励使用全局变量,因为它们会使代码更难维护。
在你的情况下,他们不会。
发布于 2010-02-26 09:13:21
全局变量的使用应该保持在最低限度,因为当全局变量太多时,全局名称空间就会受到污染,如果你的程序需要使用一些第三方库,这些库也会创建自己的全局变量,那么就很有可能会发生冲突。
创建一个对象来保存所有的全局状态是一个好主意,因为它限制了您需要在全局级别保留的标识符的数量。
要解决性能问题,您可以在需要多次访问该对象的任何范围内创建对该对象的本地引用:
因此,不是
if (globalState.isIe) { alert(globalState.ieMessage); }你可以做到
var state = globalState;
if (state.isIe) { alert(state.ieMessage); }如果只访问状态对象一次,则不需要执行此操作。在任何情况下,即使您从未这样做,性能损失也是可以忽略不计的。
发布于 2010-02-26 09:12:55
如果你担心性能问题,可以编写一些干净的代码,然后在上面运行分析器进行优化。我知道Safari和Google Chrome都有一个,很肯定Firebugs也有一个Firefox。见鬼,就连Internet Explorer8也有一个。
https://stackoverflow.com/questions/2338851
复制相似问题