浏览器是否优化了 js 代码
Do browsers optimize js code?
我遇到了一个奇怪的问题,我写了一个力导向的图形布局脚本,我想看看节点放置是如何近乎实时地发生的,这就是为什么我使用 requestAnimationFrame 在每次屏幕刷新时只计算力和重绘元素一次(尽管我知道使用"while"语句一步计算布局并立即绘制它会更有效(。
它以我希望的方式工作:例如,60 节点图计算需要 8879 毫秒,我能够看到所有节点如何移动到它们的最终目的地,但是当我尝试在不重新加载页面的情况下重建相同的图形时,每个后续计算发生得更快:
8879ms
5797ms
4649ms
4330ms
3923ms
....
3046ms
....
etc
因此,节点几乎立即变得稳定。小图表的差异可能高达10-20倍!16 节点图:
3041
1583
1101
818
660
551
524
436
373
360
352
305
167
重新加载页面后,该过程将重复。所以我想知道为什么它首先会发生(浏览器是否以某种方式缓存和优化代码?(以及如果可能的话如何避免它。在IE,FF和Chrome中尝试过,结果相同。
谢谢
永远不要指望计算足够慢,以至于可以看到结果。迟早,你总是被证明是错误的。 requestAnimationFrame
适用于需要尽可能流畅地绘制的动画,并且可能会为您提供任意 FPS。如果需要限制某些事情发生的速率,请使用 setInterval
,或使用requestAnimationFrame
但根据自上一帧以来经过的时间按比例降低每个节点的移动量。
是的。Chrome有他们的V8引擎,Firefox有spidermonkey,我相信Safari在他们的WebKit框架中有JavaScriptCore。此外,Firefox还支持asm.js,这是javascript的一个子集,可以从C/C++代码编译下来,最近在虚幻引擎的JavaScript移植中使用。
http://www.unrealengine.com/html5/
所以,是的 - 大量资源用于优化JavaScript执行,并且性能因浏览器而异。新的通常工作得很光荣。(优化js实际上是一个棘手的过程,因为它是一种高度动态的语言 - 对象可以随时更改字符,属性可以随时更改。这种困难部分是谷歌"Dart"语言背后的理由:
https://www.dartlang.org/support/faq.html(
话虽如此,如果你写了一个非常低效的while循环,浏览器能做的只有这么多。
是的,他们做到了,这是提高js引擎性能的关键。
我听说谷歌Chrome的V8 js引擎将JavaScript编译为本机机器代码,这就是为什么chrome如此之快的原因。
http://en.wikipedia.org/wiki/V8_(JavaScript_engine(
看来你的问题在于你对javascript的了解,而不是浏览器,javascript有时很乏味,很难完全掌握。有时,您的代码只是执行,而没有按照预期遵循顺序。
- 为什么indexOf在这个js代码中不起作用
- js代码从jQuery转换为原生代码
- JS代码中的减号
- 谷歌地图Api和JS代码不工作
- HTML 5 和 3.js 代码不会在网页上显示任何内容
- 为什么这个JS代码打印未定义
- JS代码在jsbin中有效,在jsfiddle或Chrome/Safari中无效
- 页面加载后加载简单的JS代码
- 扩展JS代码
- 如何使用js代码转发reactjs路由器
- 用js代码重新定位文本
- 即使被信号处理程序中断,node.js代码也会一直运行到完成吗
- JS代码使IE9和Safari冻结,在Opera中不起作用
- 分析JS代码以在客户端获取cookie
- 改进js代码以删除全局变量和函数
- 对php文件的Ajax调用返回该文件中的JS代码,而不是执行它
- 在单独的上下文中运行 js 代码并访问其全局变量
- 这个 ajax.js 代码有什么问题
- 如何使用 GetValues 使用 Jint 运行 Js 代码
- JS代码有什么问题,让我知道代码是否可以改进