您可以定义多少 Web 组件/自定义元素?

Is there a limit to how many web components / custom elements you can define?

我正在构建一个大约有 ~50 个组件(class 定义和 window.customElements.define 调用)的大型应用程序。我需要关心我定义的数量吗?太多会减慢浏览器 Dom 解析速度吗?我可以定义的数量有限制吗?

一般 DOM 建议不会达到限制:

走向极端

这里有 5000 个自定义元素,全部嵌套:

let startTime = new Date() / 1;
let fragment = new DocumentFragment();
let nested = fragment;
let name, nr = 5000;
let done = `${nr} elements done in `;
do {
  name = "e-" + nr;
  customElements.define(name, class extends HTMLElement {
    connectedCallback() {
      this.append(this.nodeName);
    }
  });
  nested = nested.appendChild(document.createElement(name));
} while (--nr);
document.body.append(done, new Date() / 1 - startTime, " milliseconds  ", fragment)

JSFiddle:https://jsfiddle.net/CustomElementsExamples/0pda48cb/


比较速度有点无意义...我的 Chrome 有 30 多个扩展比我的 Edge 没有任何扩展慢。

考虑 (CSS) 个选择器和自定义元素

我用自治元素做了 52 SVG playing cards(16 Kb):

<two-of-hearts></two-of-hearts>
<ten-of-hearts></ten-of-hearts>
<ace-of-hearts></ace-of-hearts>
...
<ace-of-spades></ace-of-spades>

是啊!很棒的语义 HTML..

但是你不能partial nodeName (CSS) 选择器

所以最后一个单个自治元素:

<playing-card is="ace-of-hearts"></playing-card>

更有意义,能够使用 CSS:

 [is*="hearts"]{
  border : 2px solid green;
 }

和JavaScript:

  let aces = document.querySelectorAll('[is*="ace"]');