2010-02-26 137 views
0

我正在制作一个web应用程序。我有一个关于JavaScript性能的相当基本的问题。有时我需要一个全局变量来存储整个网站打开时使用的信息。Javascript优化...全局变量

一个示例是一个名为needs_saved的变量。说是否需要保存页面是真的还是错误的。我可能会有另一个名为is_ie,ie_version或space_remaining的变量。

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

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

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

也许我正在推翻这一点。

谢谢

+1

不成熟的优化是万恶之源。 _尤其是这一个。 – SLaks 2010-02-26 01:07:10

+2

我认为使用太多全局变量的更大问题是代码的可读性和紧密耦合性的丧失。绝对不是表演。 – 2010-02-26 01:12:35

回答

3

你没有什么可担心的。

全局变量对性能的影响很小。
全局变量不鼓励,因为它们可以使代码难以维护。
就你而言,他们不会。

+0

谢谢大家! – 2010-02-26 01:17:04

+0

这是一个旧的 - 只是补充 - 我猜环球变量为env。瓦尔。然而,大规模使用全球变量可能会对性能产生影响:http://speakingjs.com/es5/ch16.html – Quicker 2016-03-09 22:13:26

-1

如果您担心性能,请编写一些干净的代码然后运行一个分析器来优化。我知道Safari和谷歌浏览器都有,并且很确定Firebugs也包含Firefox。哎呀,即使Internet Explorer 8也有一个。

3

全局变量使用应该保持在最小的原因是因为全局名称空间在它们中有很多时会受到污染,并且如果您的程序需要使用一些第三方库也会产生冲突,他们自己的全局。

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

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

所以不是

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

你可以做

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

如果您只访问一次状态对象,则不需要执行此操作。无论如何,即使你从不这样做,性能处罚也可以忽略不计。