将对象推入javascript数组的性能异常
Pushing objects into javascript array performance weirdness
我正在使用html5画布创建一个羊群模拟,我试图从javascript中挤出每一点性能。我注意到一个"奇怪的"性能提升/下降取决于我何时/何地向系统添加boids。
如果我先用400个对象填充boids数组,然后开始动画(使用requestAnimationFrame),我在Chrome和Safari中得到一个非常不错的40-50fps,在Firefox中大约是30fps。
然而,如果boids数组在动画期间被对象填充(又有400个对象)(例如通过在屏幕上拖动),那么无论浏览器的性能总是下降到大约15-20fps。
在这两种情况下,我都使用boids.push( new Boid() );
来填充boids数组。在第一种情况下,我从for循环中执行,在第二种情况下,我从mouseDown事件处理程序中执行。
知道为什么第一部的表现会好得多吗?
你可以在这里找到两个例子:版本A和版本B
如果您的reuestAnimationFrame
回调执行时间超过~10ms, fps下降,您将janks。所以第一种方法可能会满足预算,或者有时会花费更多,因为你没有达到60fps;但是第二种方法在那一帧上肯定超过了~10ms浏览器必须跳过2-3帧来完成回调的执行所以你得到了~20fps;
查看这篇关于google web fundamentals Rendering Performance的文章
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 在javascript中搜索项目列表的性能
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- JavaScript数组优化以提高性能
- 在javaservlet doPost方法中启动线程时,无法返回异常消息
- React+Redux性能优化与组件ShouldUpdate
- document.applet.method在Mounatin Lion上抛出safari 6+JDK7异常
- 在循环中附加事件处理程序时出现浏览器性能问题
- JavaScript-===vs===运算符性能
- 为什么浏览器没有为语法错误抛出异常
- 超时功能的性能
- java,javascript签名的小程序(文件选择,ftp上传)安全性/套接字异常
- node.js和express中的异常处理
- 派生进程的stdout在管道传输时工作异常
- 捕获异常,而不是比较性能的数组值
- 将对象推入javascript数组的性能异常