3

根据 Javascript 的主要实现,对变量和函数的查找从原点开始并向上遍历直到全局对象。

现在假设您正在构建更大的基于 OOP 的框架,并且您需要在所有地方调用安全检查,那么以这种方式调用这些东西似乎并不正确:“xapp.utils.isValidString(var)。这同样适用于常量,枚举和标志,通常在任何地方发生。

我不太确定这是否会对答案产生影响,但我们在 Dojo 中做了所有事情,并且我们非常了解它的 lang.mixin 方法。

然而,这个想法是通过使用构造函数或原型将一组明显且最小的函数和对象混合到目标对象的本地范围中。你认为这是一种合法的方式吗?

那么缓存和重用那些准备好的对象呢?您会选择哪种缓冲器?对我来说,它看起来很像一个环形缓冲区。

我还在学习 JS 优化,我会很高兴你的想法!

供您参考,这里有一些大师解释的范围管理的常见提示:http: //googlecode.blogspot.com.es/2009/06/nicholas-c-zakas-speed-up-your.html

更新:我们只需要关注现代桌面和移动浏览器,完全不考虑 IE!此外,我们熟悉 Dojo 的构建链,支持每个平台的条件编译(如果这很重要)。

4

1 回答 1

0

至于标识符解析,即直接引用,我建议您切换到严格语言(如果您还没有的话),也就是“严格模式”。严格的语言是静态作用域的,这使得 JS 引擎可以静态绑定标识符,从而在程序执行过程中获得更好的性能(标识符在编译过程中已经绑定)。


至于属性查找,如果你有长链,例如

foo.bar.baz.method1();
foo.bar.baz.method2();

通常的解决方案(不仅是为了性能,也是为了避免代码重复)是将最右边的对象存储到局部变量中:

var baz = foo.bar.baz;

baz.method1();
baz.method2();
于 2012-10-18T18:53:47.570 回答