Col*_*tru 5 javascript garbage-collection
我正在尝试使用WebGl在JavaScript中创建一个简单的游戏引擎,但我总体上遇到了一些不希望的JavaScript问题,我希望可以避免.除了使用JavaScript整体缺乏性能之外,我在使用WebGl进行渲染时会出现一些奇怪的暂停,这种情况会定期发生,每隔一秒左右就会发生一次.我认为这必须发生在JavaScript中的GC.无论如何最小化这些"口吃"?是否有任何我应该知道的常见做法,一种强制,至少部分垃圾收集,在我能控制的时间发生的方法?
我知道这些都是简单的问题,但我对JavaScript很新,在互联网上搜索并没有给我很多有用的信息.
尽可能频繁地重复使用对象。如果您为每个渲染帧创建数十个对象(例如向量和矩阵),那么您肯定会遇到与 GC 相关的卡顿。因此,当您使用基于场景图的方法来渲染游戏时,您可能希望在场景图节点中缓存对象。或者您可以使用对象池模式。在 Java 等其他语言中,这种技术已被弃用,因为现在对象创建和 GC 的速度太快,以至于对象池不再有帮助。但在 JavaScript 中它可能仍然有帮助。
我在去年编写的 JavaScript 游戏中遇到了 GC 口吃问题,我通过重写 2D 矢量引擎解决了这个问题,因此在帧渲染期间绝对不会创建新对象。仅当构建场景或向其中添加新场景节点时才会创建对象一次。但是显示和动画场景绝对不会创建新对象。
您可能想看看我的 2D 引擎:
http://www.ailis.de/~k/hg/javascript/twodee/file/tip/src/main/javascript/twodee
您会注意到,我在静态字段中缓存临时需要的向量和矩阵,并且我使用可变向量和矩阵类而不是不可变类,因此在使用现有向量/矩阵进行数学运算时,会修改现有向量/矩阵,而不是创建新的结果向量/矩阵。
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |