Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript优化…全局变量_Javascript_Performance - Fatal编程技术网

Javascript优化…全局变量

Javascript优化…全局变量,javascript,performance,Javascript,Performance,我正在制作一个网络应用程序。我有一个关于javascript性能的基本问题。有时,我需要一个全局变量来存储在整个网站打开时使用的信息 例如,一个名为needs_saved的变量。判断页面是否需要保存是真是假。我可能还有另一个变量叫做is_ie,ie_version或space_remaining 这些都是我在整个应用程序的各种功能中需要的变量 现在,我知道全局变量是不好的,因为它们需要浏览器搜索每个级别的函数范围。但是,我不知道是否有更好的方法来存储整个程序所需的值 我知道我可以创建一个名为“p

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

例如,一个名为needs_saved的变量。判断页面是否需要保存是真是假。我可能还有另一个变量叫做is_ie,ie_version或space_remaining

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

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

我知道我可以创建一个名为“program\u status”的全局对象,并给它属性is\u ie,ie\u version,等等。。。但这是否更好,因为它首先必须找到我的程序状态对象(存储为全局变量),然后是内部属性

也许我想得太多了


谢谢

你没什么好担心的

全局变量对性能的影响很小。
不鼓励使用全局变量,因为它们会使代码更难维护。

在你的情况下,他们不会。你没什么好担心的

全局变量对性能的影响很小。
不鼓励使用全局变量,因为它们会使代码更难维护。

在您的情况下,它们不会。如果您担心性能,请编写干净的代码,然后在其上运行探查器进行优化。我知道Safari和Google Chrome都有一个,而且Firebug肯定也包括一个用于Firefox的浏览器。见鬼,连InternetExplorer8都有一个。

如果您担心性能,请编写干净的代码,然后在其上运行探查器进行优化。我知道Safari和Google Chrome都有一个,而且Firebug肯定也包括一个用于Firefox的浏览器。见鬼,即使是Internet Explorer 8也有一个。

全局变量使用应保持在最低限度的原因是,当全局名称空间太多时会受到污染,如果您的程序需要使用一些第三方库,这些库也会创建自己的全局变量,那么很可能会发生冲突

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

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

所以不是

if (globalState.isIe) { alert(globalState.ieMessage); }
你能行

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

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

全局变量使用应保持在最低限度的原因是,当存在大量全局变量时,全局名称空间会受到污染,如果您的程序需要使用一些第三方库,这些库也可以创建自己的全局文件,那么很有可能会发生冲突

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

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

所以不是

if (globalState.isIe) { alert(globalState.ieMessage); }
你能行

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

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

过早优化是万恶之源。尤其是这一个。我认为使用太多全局变量的更大问题是代码的可读性和更紧密的耦合性的损失。绝对不是性能。过早优化是万恶之源。尤其是这一个。我认为使用太多全局变量的更大问题是代码的可读性和更紧密的耦合性的损失。绝对不是性能。这是一个老问题——只是补充一下——我想全局变量适用于env。瓦尔斯。然而,大量使用全局变量可能会对性能产生影响:我最近制作了一个计算量非常大的网页,将全局变量切换到局部变量可以将屏幕刷新时间从0.9秒减少到0.4秒,这是一个对响应能力有巨大影响的变化。这是一个古老的变化——只是补充一句——我想全球变量适用于env。瓦尔斯。然而,大量使用全局变量可能会对性能产生影响:我最近制作了一个计算量非常大的网页,将全局变量切换到本地变量将屏幕刷新时间从0.9秒减少到0.4秒,这一变化对响应能力产生了巨大影响。