是否仍然值得在移动 JavaScript 上使用 eval 来提高性能?
Posted
技术标签:
【中文标题】是否仍然值得在移动 JavaScript 上使用 eval 来提高性能?【英文标题】:Is it still worth using eval for performance on mobile JavaScript? 【发布时间】: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 规模的应用程序,那么是的,这样的技巧可能非常有效。但是,如果您的应用程序没有那种代码大小,或者不使用延迟加载的模块,那么我会提醒您要小心:这样的技巧并不总是普遍有效,在某些情况下它们实际上有相反的效果如果使用不当会影响性能。如果你打算做这种事情,唯一明智的建议是为自己彻底地进行基准测试。 另外,根据您的应用程序,您应该考虑是否所有用户都将拥有最新版本的操作系统、浏览器、硬件。 【参考方案1】:自从 JavaScript 引擎变得如此高性能以来,它与以前的技术问题不同。相反,在更像应用程序方面还有其他考虑因素。
现在有一些不同的技巧,例如使用 Web Worker 处理 ajax 请求以释放线程,利用 GPU 进行 CSS 转换和 requestAnimationFrame 甚至 asm.js。使用 localStorage/sessionStorage 和 Application Cache 是另一种方法,您可以在其中真正获得大量客户端缓存,以避免调用内容 JSON/图像数据 url/视频以外的任何内容,并将内容加载/执行到内存中需要从这些缓存中获取。
换句话说,这是一个不同的时代,您的问题很有趣,但没有集中在正确的领域,无法真正改变网络应用的性能。
【讨论】:
这没有回答问题。此外,第一张图是关于售出设备的数量,与它们的性能无关。 我认为这更符合常识,除了 eval 之外还有其他因素需要担心。重点是展示技术在市场上的爆炸式增长,以及新技术如何更快地解析脚本。 @xpereta 我删除了它。谢谢。以上是关于是否仍然值得在移动 JavaScript 上使用 eval 来提高性能?的主要内容,如果未能解决你的问题,请参考以下文章