Javascript-命名空间嵌套是否存在任何硬性限制(或性能影响)
Javascript - is there any hard limit (or performance impact) for namespace nesting?
除了典型的var x = function(){...}
构造之外,我还想了解更多关于Javascript的信息,所以我选择了名称空间。
在PHP中,我总是使用名称空间来避免冲突,并组织我的常量、类和函数。到目前为止,我已经完成了基本的命名如下:
var helpers = {
strings: {
add: function(a, b) {
alert(a + ' plus ' + b + ' equals to ' + (a + b));
},
msgbox: function(text) {
alert(text);
}
}
}
所以我可以写这样的HTML块:
<button class="ui-button" type="button" onclick="helpers.strings.msgbox('Hello, world!');"><img src="assets/images/alert.png" alt="Alert"> Click me!</button>
我的问题是:
- 我可以在其中嵌套名称空间的级别数量有什么实际/严格的限制吗
- 任何给定函数的嵌套级别是否会对性能产生影响
- 我可以稍后扩展给定的命名空间吗?喜欢拥有一个
core.js
文件并扩展strings
命名空间,以便在extended.js
中添加更多函数
我不打算构建一个可怕的嵌套结构或类似的东西,但我只想知道浏览器引擎或语言本身是否有任何实际限制,所以我的问题更多的是理论性质的(在这种情况下,我不会构建一个结构来测试这一点)。
我可以嵌套的级别数量有实际的/硬性的限制吗我的命名空间在里面?
显然,这是因为如果没有其他限制,那么更多的级别将需要更多的内存,而内存是有限的,而且在实践中,还会有其他限制(源自每个特定JavaScript引擎的实现细节)。
但实用的答案是:如果你有理由相信你可能会接近这些极限,那你就做错了。
嵌套级别是否会对性能产生影响对于任何给定的函数?
是的,因为每个间接级别都涉及到查找下一个嵌套的"命名空间"对象在内存中的位置,并查找其属性。在实践中,与您的代码将要做的其他事情相比,这种成本是无穷小的,因此您将无法测量任何差异,除非级别的数量很大,并且您正在循环中挖掘嵌套值。
例如,这不是最好的想法:
for(var i = 0; i < 1000000000; ++i) {
ns1.ns2.ns3.ns4.ns5.ns6.ns7.ns8.ns9.ns10.ns11.ns12.ns13.count += 1;
}
幸运的是,如果你需要这样做,有一个简单的解决方法:
var ns13 = ns1.ns2.ns3.ns4.ns5.ns6.ns7.ns8.ns9.ns10.ns11.ns12.ns13;
for(var i = 0; i < 1000000000; ++i) {
ns13.count += 1;
}
我可以稍后扩展给定的命名空间吗?喜欢拥有核心.js文件并扩展字符串命名空间以在中添加更多函数,比方说,extended.js?
您可以,但必须小心,以便这两个文件都使用一种将变量注入命名空间的机制,该机制实际上不会替换命名空间的内容。
由于这是另一次查找,因此每一级嵌套的性能都会受到轻微影响。如果这是用于客户端脚本,那么下载更多代码会带来额外的开销。第一个可能很小。第二,你必须自己决定。
稍后,您可以轻松地将新函数添加到名称空间中:
helpers.strings.multiply = function(a, b) { /* ... 8/}
尽管多年来我一直在大量使用名称空间,但现在我很少这样做了,我更喜欢模块加载系统来管理我的依赖关系,甚至不公开像helper
这样的东西。但是如果你选择这样做,这些类型的名称空间很容易创建和使用
- NodeJ中的注释会影响性能吗
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- javascript getAttribute是否会影响性能或触发布局
- Coffeescript 隐式返回对性能和副作用的影响
- 行之间有空格会影响 JavaScript 代码的性能吗?
- 角度 1 路绑定不影响性能
- 数字精度如何影响 JavaScript 的性能,或者会影响性能
- ng-csp指令的性能影响
- 解除所有元素上的所有 jQuery 事件的性能影响
- Meteor 中的客户端渲染和光纤的性能影响
- 在计时器中持续访问 Cookie 的性能影响
- Node.js中未使用需求的性能影响
- Javascript-命名空间嵌套是否存在任何硬性限制(或性能影响)
- 对加载相关下拉列表的性能影响,最多约30000条记录
- 在一个应用程序中使用多个角度应用程序时的性能影响
- 1)对函数内部函数的性能影响2)多个条件下的顺序或流程
- KineticJS - KineticJS . node .listening()的性能影响
- 在Redux中切换到Immutable.js.性能影响是什么?对组件的影响是什么? '语法
- JavaScript base62编码的性能影响
- JavaScript对象文字表示法与普通函数及其性能影响