【发布时间】:2013-11-08 14:36:00
【问题描述】:
为了将所有模块组合成一个资源,我们将每个模块写入一个单独的脚本标签,并将代码隐藏在一个注释块 (/* */) 中。当资源第一次加载时,没有任何代码被解析,因为它被注释掉了。要加载一个模块,找到对应脚本标签的 DOM 元素,去掉注释块,然后 eval() 代码....
在 iPhone 2.2 设备上,块注释中保存的 200k JavaScript 在页面加载期间增加了 240ms,而在页面加载期间解析的 200k JavaScript 增加了 2600ms。通过在页面加载期间消除 200k 不需要的 JavaScript,启动延迟减少了 10 倍以上!
http://googlecode.blogspot.co.uk/2009/09/gmail-for-mobile-html5-series-reducing.html https://developers.google.com/speed/docs/best-practices/mobile
gmail 文章已有三年多的历史了,从那时起,在移动性能方面就有了很大的优势,即 iOS 的 Nitro 和 JIT 之类的东西进入了移动设备。使用 eval 是否还有性能提升?
【问题讨论】:
-
如果您正在编写 gmail 规模的应用程序,那么是的,这样的技巧可能非常有效。但是,如果您的应用程序没有那种代码大小,或者不使用延迟加载的模块,那么我会提醒您要小心:这样的技巧并不总是普遍有效,在某些情况下它们实际上有相反的效果如果使用不当会影响性能。如果你打算做这种事情,唯一明智的建议是为自己彻底地进行基准测试。
-
另外,根据您的应用程序,您应该考虑是否所有用户都将拥有最新版本的操作系统、浏览器、硬件。
标签: javascript performance mobile