JavaScript performance warmup

2019-10-21 23:32发布

我创建一个WebGL的游戏,它是使用它一段时间后确实要快得多。 我每次运行它,第一次它的速度慢和口吃。 将运行几秒钟一些CPU密集型代码先准备浏览器使用它的全部力量吗?

我已经在一个工人这给了巨大的助推运行ammo.js,但打前几分钟仍慢得多。 难道这是我的笔记本电脑策略来管理权力?

Answer 1:

我能想到的4两件事:

  1. 该浏览器使用一种称为JIT(即时编译)技术,以加速执行的速度为您的代码的最常用的部件。 然而,检测哪一部分是最常用的,浏览器给它一些时间。

  2. 笔记本电脑通常以较低的速度运行的CPU,以节省电池。 然而,当CPU占用率过高(比如,当你玩游戏),他们加紧频率从处理器获得更多的果汁。 例如英特尔SpeedStep http://en.wikipedia.org/wiki/SpeedStep

  3. 有些笔记本电脑有两个图形卡(许多的MacBook Pro为例)。 一个是默认的英特尔一个,他们用于渲染正常GUI窗口和用于图形密集型应用程序的其他。 更强大的图形卡通常是默认关闭,仅在需要时使用(因为它消耗更多的电池,也系统的热量会上升,系统会吵)。 虽然这是不可能的,系统将在运行3D应用程序中更换显卡。

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

然而没有这些项目应采取“一两分钟”起床速度。 它通常只需几秒钟。 所以它仍然是腥。



Answer 2:

我怀疑有什么事情你可以做,但是......你可以使用每个WebGL的着色器程序至少一次,一次绘制的缓冲溶液和可能的帮助。 见Alex的答案的原因也可能不。

WebGL的有很多的验证做的。 多,验证的情况懒洋洋地。 一个例子是,任何时候你画使用gl.drawElements它检查关你的指标超出范围。 它确实是和缓存为您刚才使用的索引缓存的特定范围的答案。 如果不更新索引,那么它不会有再次检查。 但是,这意味着你画的每一件事情有了第一次gl.drawElements有一个额外的检查,所以你可以尝试一次绘制一切你开始你的游戏了。

类似的事情发生与GLSL程序,以便使用每个程序一次可能有助于初始化/缓存那些为好。

注:我怀疑这会解决的事情,但它可能是值得一试。



Answer 3:

是否很慢,由于一些网络负荷问题? ...或杏CPU?

通过在这个初始时期缓慢运行的顶部或一些资源的使用效用这些原因区分

如果你的CPU是热的运行,你可能会低效合成顶点。



文章来源: JavaScript performance warmup