• 出现原因: DOM 操作非常耗时,数据驱动视图下,如何有效控制 DOM 操作。

  • 解决方案: DOM 操作很慢,但是 JS 执行很快,通过 JS 模拟 DOM 结构,Diff 算法计算出最小的变更,来操作对应的 DOM

  • JS 模拟 DOM 结构示例:

    <div id="div1" class="container">
      <p>vdom</p>
      <ul style="font-size: 20px">
        <li>a</li>
      </ul>
    </div>
    {
      tag: 'div',
      props: {
        className: 'container',
        id: 'div1',
      },
      children: [
        {
          tag: 'p',
          children: 'vdom',
        },
        {
          tag: 'ui',
          props: {
            style: 'font-size:20px',
          },
          children: [
            {
              tag: 'li',
              children: 'a',
            },
          ],
        },
      ],
    }
  • 典型的 vdom 库:snabbdom

  • vdom 真的很快吗?

    • vdom 并不快,JS 直接操作 DOM 才是最快的
    • 但“数据驱动视图”要有合适的技术方案,不能全部 DOM 重建
    • vdom 就是目前最合适的技术方案(并不是因为它快,而是合适)
    • svelte 就不用 vdom
    • angular 用不用?