JavaScript性能预热
JavaScript performance warmup
我正在创建一个WebGL游戏,使用一段时间后速度真的快多了。每次我第一次运行它时,速度都很慢,而且断断续续。运行一些CPU密集型代码几秒钟会首先让浏览器做好充分使用的准备吗?
我已经在一个工人身上运行了ammo.js,这给了我很大的鼓舞,但最初几分钟的游戏仍然慢得多。这可能是我的笔记本电脑管理电源的策略吗?
我能想到4件事:
-
浏览器使用一种名为JIT(实时编译)的技术来加快代码中最常用部分的执行速度。然而,为了检测哪个部分最常用,浏览器会给它一些时间。
-
笔记本电脑通常以较低的速度运行CPU以节省电池。然而,当CPU使用率过高时(比如你在玩游戏时),他们会提高频率,从处理器中获得更多的能量。例如Intel Speedstephttp://en.wikipedia.org/wiki/SpeedStep
-
一些笔记本电脑有两个图形卡(例如许多Macbook Pro)。一个是默认的Intel,用于渲染普通GUI窗口,另一个用于图形密集型应用程序。功能更强大的显卡通常默认关闭,只在需要时使用(因为它消耗更多的电池,而且系统热量会增加,系统会发出噪音)。尽管系统不太可能在运行3D应用程序的过程中更改图形卡。
-
这些都是你无法控制的。游戏引擎通常使用查找表来查找频繁计算的值,以加快其运行时间。您的游戏引擎可能会根据需要填充查找表。
尽管如此,这些项目都不应该需要"几分钟"才能跟上进度。通常只需要几秒钟。所以它仍然是可疑的。
我怀疑你能做什么,但。。。您可以至少使用每个WebGL着色器程序一次,并绘制每个缓冲区一次,可能会有所帮助。看看亚历克斯的答案,了解为什么可能不会。
WebGL有很多验证工作要做。大部分验证都是懒散地进行的。一个例子是,无论何时使用gl.drawElements
绘制,都必须检查您的索引是否超出范围。它会这样做,并缓存您刚才使用的索引缓冲区的特定范围的答案。如果你不更新索引,它就不必再检查了。但这意味着,当你第一次用gl.drawElements
画每一件东西时,都会有一个额外的检查,这样你就可以在开始游戏之前尝试画一次所有的东西。
GLSL程序也会发生类似的情况,因此使用每个程序一次可能也有助于初始化/缓存这些程序。
注意:我怀疑这会解决问题,但可能值得一试。
是由于网络负载问题导致速度慢吗。。。还是最大化CPU?
通过在的初始缓慢时期运行top或某些资源使用实用程序来区分这些原因
如果您的CPU运行得很热,则合成顶点的效率可能会很低。
- 在javascript中搜索项目列表的性能
- JavaScript数组优化以提高性能
- JavaScript-===vs===运算符性能
- Javascript对象中的跨浏览器密钥查找性能
- 它是否创建了许多不利于JavaScript性能的变量
- html5画布和纯Javascript/GWT的游戏性能
- javascript getAttribute是否会影响性能或触发布局
- Javascript性能-在dom上迭代并添加侦听器
- 在JavaScript中,在对象上装箱每个数字和字符串的性能成本是多少
- 从自执行函数返回函数的Javascript性能命中率
- javascript散列/数组混合性能
- javascript:将文本附加到文本区域的性能
- 性能惩罚JavaScript回调函数
- 行之间有空格会影响 JavaScript 代码的性能吗?
- JavaScript 库的性能开销
- 按“Levenshtein Distance”对数组进行排序,在Javascript中具有最佳性能
- 将javascript和css内联放在一个缩小的html文件中以提高性能
- 数字精度如何影响 JavaScript 的性能,或者会影响性能
- 数组对象与数组文字-性能JavaScript
- 图表运行在后台导致低性能(JavaScript + jQuery)