JavaScript性能预热

时间:2015-02-19 20:30:40

标签: javascript performance webgl ammo.js

我正在创建一个WebGL游戏,经过一段时间的使用它真的要快得多。每次我第一次跑它时都很慢而且口吃。运行一些CPU密集型代码几秒钟,首先准备浏览器使用它的全部功能吗?

我已经在一个工作中运行了ammo.js,这给了一个巨大的提升,但是前几分钟的播放仍然要慢得多。这可能是我管理电源的笔记本电脑策略吗?

3 个答案:

答案 0 :(得分:2)

我能想到4件事:

  1. 浏览器使用一种名为JIT(即时编译)的技术来加快代码中最常用部分的执行速度。但是,要检测哪个部分使用最多,浏览器会给它一些时间。

  2. 笔记本电脑通常以较低的速度运行CPU以节省电池电量。但是,当CPU使用率太高时(比如当你正在玩游戏时),他们会提高频率以从处理器获得更多的果汁。例如,英特尔Speedstep http://en.wikipedia.org/wiki/SpeedStep

  3. 有些笔记本电脑有两张显卡(例如很多Macbook Pro)。一个是默认的Intel,用于渲染普通GUI窗口,另一个用于图形密集型应用程序。更强大的图形卡通常默认关闭,仅在需要时使用(因为它消耗更多电池,系统热量也会上升,系统会产生噪音)。虽然系统在运行3D应用程序的过程中不太可能更换图形卡。

  4. 这些都是你无法控制的。游戏引擎通常使用查找表来查找频繁计算的值,以加快其运行时间。您的游戏引擎可能会根据需要填充查找表。

  5. 然而,这些项目都不应该花费几分钟时间。加快速度。通常只需几秒钟。所以它仍然可疑。

答案 1 :(得分:0)

我怀疑你有什么可以做的但是...你可以至少使用一次每个WebGL着色器程序并绘制一次缓冲区并且可能帮助。请参阅亚历克斯的答案,了解原因可能没有。

WebGL有很多验证要做。大部分验证都是懒洋洋地发生的。一个例子是你使用gl.drawElements绘制的任何时候都必须检查你的索引是否超出范围。它会这样做并缓存您刚才使用的索引缓冲区的特定范围的答案。如果您不更新索引,则无需再次检查。但这意味着你第一次用gl.drawElements绘制每件东西时都要额外检查,这样你就可以在开始游戏前尝试绘制一切。

GLSL程序也会发生类似情况,因此每次使用每个程序可能有助于初始化/缓存这些程序。

注意:我怀疑这会解决问题,但可能值得一试。

答案 2 :(得分:0)

由于某些网络负载问题,它是否很慢? ...或最大化CPU?

通过在此初始缓慢期间运行top或some resource usage实用程序来区分这些原因

如果您的CPU运行正常,则可能无法有效地合成顶点。