Javascript:复合设计vs原型设计
Javascript: composite vs prototype design
我目前正在用Javascript开发一个小型游戏框架,并且已经完成了大部分库和较低级别的东西,所以我没有把注意力集中在游戏对象系统上。在我之前的Java游戏框架中,我使用了非常有效的组合,并且我将整个对象框架暴露给JS的事实激发了我在这个项目中的工作。在Java中,组合工作得非常好,因为您不再需要处理类型转换,或者至少很少需要处理类型转换,因此所有内容都可以通过相同的管道传递。
然而,在Javascript中,因为它提供了向对象动态添加数据和方法的能力,我想知道是否最好跳过整个组合结构,但这里的主要问题是性能。将对象列表存储在数组中并遍历它们(并直接调用它们的方法)非常快,并且具有易于事件传播/冒泡的额外好处,而通过原型构建的对象需要通过大量检查列表来查看它是否包含各种方法/数据。我认为对于非实时应用程序,这工作得很好,但当你需要每秒渲染30次以上的数百个对象时,就不是了。我将为这两种设计编写一些测试,但你们中有人对此有什么意见吗?
这个问题太宽泛了,很难回答。我试着把它缩小到两位:
但是这里的主要问题是性能。
首先,在出现问题后关注性能。
作为由原型设计需要通过一长串的检查来检验如果它包含各种方法/数据
对于两个,这是不正确的。你可以很容易地为每一个mixins添加一个flag方法——有效地将你的大列表压缩为一个且只有一个。
例如:Renderable = {
isRenderable: true
// render magic
}
myGameObject.extend(Renderable);
您可能还想考虑面向事件的方法。这将允许你触发Render
事件,并且每个订阅的游戏对象都将简单地呈现自己。没有if语句。类似于(pseudoy):
RenderManager.subscribe = function(subscriber) {
this.subscribers.push(subscriber)
}
RenderManager.render = function() {
// loop over all subscribers and render with them
}
// when initializing, add game objects to the render system
RenderManager.subscribe(myGameObject);
// then from your main game loop
RenderManager.render();
相关文章:
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- Js.erb VS按钮标记-不'不起作用.为什么?
- reactjs this.refs vs document.getElementById
- Node.js中的JavaScript原型对象效率
- 重载JS'firefox中的对象原型
- javascript原型方法分配VS下划线_.extend
- Javascript:复合设计vs原型设计
- 添加到对象原型Vs简单函数
- javascript继承:实例vs原型
- JS OOP:原型上的方法vs构造函数中的方法
- javascript继承自Vs原型
- 这个在原型函数中vs这个在对象字面函数中
- 对象方法vs原型方法
- 字符串vs数组原型Javascript
- javascript中的原型vs应用