我应该在Javascript游戏引擎中使用DOM片段作为阴影DOM吗?

我应该在Javascript游戏引擎中使用DOM片段作为阴影DOM吗?,javascript,html,performance,dom-events,Javascript,Html,Performance,Dom Events,我正在为web创建一个名为Engine1的新游戏引擎。我目前已经制作了两个原型。到目前为止,我已经能够: 使用画布映射精灵的透明像素 将事件绑定到精灵的不透明像素 用一套fps开发游戏运行时 在可变帧定时设置精灵动画 为元素移动设置动画,包括 名声所限 和基于帧的运动吐温 我对自己的进步感到满意,但我似乎对没有咨询DOM性能方面的专家而继续前进感到不安 当前,当创建一个元素时,它被附加到一个DOM片段中,我称之为“影子DOM”。此“影子DOM”的HTML的每一帧都会被复制并插入到页面主体(或当

我正在为web创建一个名为Engine1的新游戏引擎。我目前已经制作了两个原型。到目前为止,我已经能够:

  • 使用画布映射精灵的透明像素
  • 将事件绑定到精灵的不透明像素
  • 用一套fps开发游戏运行时
  • 在可变帧定时设置精灵动画
  • 为元素移动设置动画,包括
  • 名声所限
  • 和基于帧的运动吐温
  • 我对自己的进步感到满意,但我似乎对没有咨询DOM性能方面的专家而继续前进感到不安

    当前,当创建一个元素时,它被附加到一个DOM片段中,我称之为“影子DOM”。此“影子DOM”的HTML的每一帧都会被复制并插入到页面主体(或当前视图端口)中

    我之所以这样设置,是因为我可以在浏览器的一次重新流动中向页面添加所有内容

    我担心的是,即使只更改了页面的一部分,重新流动浏览器内容的需要也会抵消所获得的性能。

    此外,事件绑定变得更加复杂

    有什么想法吗

    我应该使用“阴影DOM”吗

    有没有更好的方法来渲染大量元素


    有没有办法只将差异从“影子DOM”复制到浏览器主体?

    替换大的DOM块可能会很昂贵。通常,DOM是出现瓶颈的地方。最好跟踪您正在修改和更新DOM的哪些部分。您可以在更新时转换为DOM的单独数据结构中执行此操作,也可以像您所说的那样使用阴影DOM。如果更改单个很大,那么使用阴影DOM可能是一个好主意。如果它们很小(比如只更新文本值),那么使用单独类型的数据结构更有意义

    无论哪种情况,您都需要第三个对象来跟踪更改


    我很久以前写的。您可以使用它将DOM结构与域对象绑定在一起,让更新从任意一方传播到另一方。它会自动将事件附加到指定的位置(域中的键值路径和DOM中的html类名)。它可能正是您想要的,也可能不是您想要的,但也许您可以从中获得一些想法。

    这种阴影DOM技术让我想起了双缓冲。是吗?是的,我认为双缓冲是正确的术语。您可能应该知道,自从提出这个问题以来,术语shadowdom已经变成了一个真实的东西:。未来的读者可能希望得到建议,这个问题与本规范无关。有用的建议。谢谢我是我的场景,我必须期望游戏开发者在一帧一帧的基础上为他们创建的至少80%的元素制作动画。我想我应该坚持“替换一切”的方法。