JS中有多少Vars太多了? [关闭]

Posted

技术标签:

【中文标题】JS中有多少Vars太多了? [关闭]【英文标题】:How many Vars is too many in JS? [closed] 【发布时间】:2014-05-05 05:25:21 【问题描述】:

我正在构建一个页面,我们对问题的解决方案是将一些代码包装在一个函数中,然后在需要时调用它。

现在页面越来越大,每个项目都有自己的功能。根据 D. Crockford 的说法,每个函数都放在一个 VAR 中,所以:

function functionName()

相当于:

var var1 = functionName()

所以现在我们在页面中有很多变量(我也专门用 Crockford 先生推广的后一种格式编写它们),我担心这会产生太多变量(不确定这会导致任何问题,性能或其他)。我正在考虑制作一个对象文字并将每个函数作为值添加到键中。我认为这会将所有这些变量减少到一个可管理的单元中并减少我正在使用的变量数量(并避免任何潜在问题) - 或者会吗?

谢谢!

【问题讨论】:

使用大对象会阻止垃圾回收。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem 他们不一样,见:***.com/questions/336859/… 单一可管理单元方法是命名空间; How to set up javascript namespace and classes properly? 命名空间方法允许您将代码紧密打包在逻辑命名单元中,这在单页应用程序中的好处较少,但会增加代码组织/可读性并防止污染全局命名空间。 【参考方案1】:

var 关键字实际上是用来管理变量范围的。 不使用 var 关键字会使变量成为全局变量。当变量不再使用时,变量占用的内存将被清除。大多数现代浏览器都包含一个垃圾收集器,负责释放未使用的空间。所以建议在块中使用 var 关键字会让你的 js 解释器少搜索变量,否则它将搜索整个文档以获取值。

【讨论】:

很酷,谢谢,好提示... "Using var keyword makes the variable a global one" 绝对不是,而是省略 var 使变量成为全局变量。 Teemu,谢谢,输入错误,我的错。【参考方案2】:

在性能方面没关系,您可以使用任意数量的变量,性能只会受到函数中执行的任务的影响。

【讨论】:

【参考方案3】:

随着变量的不断增加,相关 JS 引擎设置的堆限制将发挥作用。

例如 - V8 引擎 seems to have 它设置为 1.4 GB

如果你真的用完了,是时候重新检查代码并停止指责 JS。

严肃地说,从实践的角度来看,这是一个巨大的限制,它告诉您您不必担心太多。

除了您友好的邻居,GC 将始终保持清洁并确保您与变量一起过着奢华的生活。

【讨论】:

太棒了!这就是我所考虑的“潜在问题”类型——一切都有其局限性...... 太棒了。如果您发现一个满意的答案,您可以标记答案旁边的绿色勾号。 老实说,AlexK 在原始帖子下的评论最能回答我的问题...这很好,因为它告诉我当前方法可能会出现什么问题... 当然。您甚至可以将所有有用的观点合并到一个答案中并自己发布 + 接受它。目标只是帮助任何有正确答案的人,将来会来这里寻找答案。 只是为了确定,这是否只会影响运行时间(如何时/如果调用一个包含所有这些变量的函数 - 全局变量呢?)否则它将只是文本一个页面,还是在运行时加载页面时评估所有内容?【参考方案4】:

将代码封装在命名空间中是个好主意,但这样不会节省内存或提高性能。从性能的角度来看,您展示的两种方式都是相同的。 有一个约定可以避免名称冲突,但是基于恢复的域 - 想象一个为 SO 制作的 JS 库:

 // The following two lines are to protect namespace from overwriting and allow to
 // extend them easily
 if (!com) var com = ;
 if (!com.***) com.*** = ;

 com.***.renderSomething = function()
     // Some very clever code here
 ;

您无法通过这种方式获得其他任何好处,但以这种方式组织代码是值得的。

只是为了澄清:

function functionName();

几乎

相同
var functionName = function();

Almost 因为在第一种形式中 functionNameparse-time 中定义,而后一种形式在 run-time 中定义 functionName

【讨论】:

有性能差异吗?为什么克罗克福德先生说后者胜于前者? 不,没有性能差异。

以上是关于JS中有多少Vars太多了? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

mysql - 多少列太多了?

多少顶点缓冲区太多了?

多少数据库索引太多了?

自动化测试中有多少断言?

编舞跳帧!多少算太多?

在 PHP 中,每页有多少个 DB 调用是可以的?