Javascript 为什么可以';t浏览器可以像游戏引擎一样每秒多次完全渲染DOM,而不会影响性能?

Javascript 为什么可以';t浏览器可以像游戏引擎一样每秒多次完全渲染DOM,而不会影响性能?,javascript,performance,dom,game-engine,game-physics,Javascript,Performance,Dom,Game Engine,Game Physics,我试图理解为什么浏览器很难像游戏引擎在画布上那样每秒多次完全渲染DOM。游戏引擎可以在每一帧执行许多计算,计算光线、阴影、物理等,并且仍然保持无缝的帧速率。 为什么浏览器不能这样做,允许每秒多次无缝地完全重新呈现DOM 我知道渲染DOM和渲染游戏场景是两个完全不同的任务,但我不明白为什么后者在性能方面要困难得多 请试着关注呈现DOM的特定方面,并解释为什么游戏引擎不会面临同样的问题。例如,“浏览器需要解析HTML,而游戏的所有代码都是预编译的,可以运行” 编辑:我编辑了我的问题,因为它被标记为固

我试图理解为什么浏览器很难像游戏引擎在画布上那样每秒多次完全渲染DOM。游戏引擎可以在每一帧执行许多计算,计算光线、阴影、物理等,并且仍然保持无缝的帧速率。 为什么浏览器不能这样做,允许每秒多次无缝地完全重新呈现DOM

我知道渲染DOM和渲染游戏场景是两个完全不同的任务,但我不明白为什么后者在性能方面要困难得多

请试着关注呈现DOM的特定方面,并解释为什么游戏引擎不会面临同样的问题。例如,“浏览器需要解析HTML,而游戏的所有代码都是预编译的,可以运行”


编辑:我编辑了我的问题,因为它被标记为固执己见。我在这里不是征求意见,只是征求事实。我在问为什么浏览器不能像游戏引擎渲染画布那样每秒60帧完全重新渲染DOM。我知道浏览器面临着一个更困难的任务,但我不明白确切的原因。请仅使用信息性答案,避免发表意见。

一般来说,这取决于游戏。最强大的游戏是在C++或C引擎中开发的,所以它们直接与内存联系,并使用处理器的全部电源。
而不是基于DOM的网页,它们是通过JavaScript等解释语言编写的。此外,如果网页部署不正确或服务器速度较慢,则问题可能来自服务器。

通常,这取决于游戏。最强大的游戏是在C++或C引擎中开发的,所以它们直接与内存联系,并使用处理器的全部电源。
而不是基于DOM的网页,它们是通过JavaScript等解释语言编写的。此外,如果部署的网页不正确或服务器速度较慢,则问题可能来自服务器。

首先,网络游戏没有太多使用。他们用得更快。DOM是用来更改a上的内容的(这就是DOM中的D的意思),所以它非常不适合游戏

我那部蹩脚的手机怎么可能无缝地运行《使命召唤》,但却很难写出一个能在上面顺利运行的大网页呢

我从未遇到过DOM的性能问题。当然,如果您用一个
.innerHTML
作业每秒更新整个
60次,如果性能不好,我不会感到惊讶,因为浏览器需要:

  • 解析HTML并构造DOM树
  • 应用样式并计算每个元素的位置
  • 渲染元素
  • 这些步骤中的每一步对于CPU来说都是大量的工作,并且在大多数浏览器中,这个过程大多是单线程的

    您可以通过以下方式提高性能:

    • 从不使用
      .innerHTML
      .innerHTML
      使浏览器将HTML转换为DOM树,反之亦然。使用
      document.createElement()
      .appendNode()
    • 避免更改DOM。如果可能,只更改CSS样式

    首先,网络游戏没有太多的功能。他们用得更快。DOM是用来更改a上的内容的(这就是DOM中的D的意思),所以它非常不适合游戏

    我那部蹩脚的手机怎么可能无缝地运行《使命召唤》,但却很难写出一个能在上面顺利运行的大网页呢

    我从未遇到过DOM的性能问题。当然,如果您用一个
    .innerHTML
    作业每秒更新整个
    60次,如果性能不好,我不会感到惊讶,因为浏览器需要:

  • 解析HTML并构造DOM树
  • 应用样式并计算每个元素的位置
  • 渲染元素
  • 这些步骤中的每一步对于CPU来说都是大量的工作,并且在大多数浏览器中,这个过程大多是单线程的

    您可以通过以下方式提高性能:

    • 从不使用
      .innerHTML
      .innerHTML
      使浏览器将HTML转换为DOM树,反之亦然。使用
      document.createElement()
      .appendNode()
    • 避免更改DOM。如果可能,只更改CSS样式

    游戏是为执行特定于自身的操作而编写的程序-它们是用低级语言asm/c/c++编写的,或者至少是可以访问机器级操作的语言编写的。当涉及到图形时,游戏能够将程序推入图形卡进行渲染:绘制矢量和着色/光栅化

    )

    它们还优化了内存、cpu使用率和IO

    另一方面,浏览器是具有许多需求的应用程序

    主要用于通过创建表示HTML元素的对象来呈现HTML文档。浏览器的工作更加复杂,因为它们支持多个版本的dom和文档类型(DTD),以及每个DTD所需的相关安全性

    )

    并且必须支持呈现一组非常通用的文档-一个页面与另一个页面不同。必须有用于IO、CSS解析、图像解析(JPEG、PNG、BMP等)和电影播放器及相关编解码器、音频播放器及其编解码器的库,以及支持网络摄像头的库。此外,它们支持JavaScript代码环境(不仅支持语言,还支持IO和事件处理),还支持COM、Java小程序

    这使得他们的工具非常通用,但重量很重——他们携带了很多行李

    图形方面永远不会像dedica那样表现出色