web-component - 您可以定义的 Web 组件/自定义元素的数量是否有限制?
问题描述
我正在构建一个包含大约 50 个组件(类定义和 window.customElements.define 调用)的〜大型应用程序。我需要关心我定义的数量吗?浏览器的 Dom 解析速度会过慢吗?我可以定义的数量有限制吗?
解决方案
一般 DOM 建议不会达到限制:
- https://developers.google.com/web/tools/lighthouse/audits/dom-size
- 总共最多 1,500 个节点。
- 深度不超过 32 个节点。
- 没有超过 60 个子节点的父节点。
走极端
这是 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/
比较速度有点毫无意义......我的带有 30 多个扩展的 Chrome 比我的没有任何扩展的 Edge 慢。
考虑一下(CSS)选择器和自定义元素
我做了 52张带有自治元素的SVG 扑克牌(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 ..
但是你不能做部分nodeName (CSS) 选择器
所以最后一个自治元素:
<playing-card is="ace-of-hearts"></playing-card>
更有意义的是,能够使用 CSS:
[is*="hearts"]{
border : 2px solid green;
}
和 JavaScript:
let aces = document.querySelectorAll('[is*="ace"]');
推荐阅读
- java - Gluon JavaFX 中是否有任何文件导航?
- javascript - PWA - 如何向所有订阅用户发送推送通知
- api - 访问私有项目的 SonarQube 质量门 API
- java - 使用来自 java 的 cognito 进行身份验证
- gnuplot - Gnuplot 5.2 splot:一个绘图调用中的多个 pm3d 调色板
- java - 影响我的框架应用程序的 Google App Engine SDK 弃用
- laravel - Laravel Passport:根据另一个微服务颁发的访问令牌验证 api 请求
- r - 在 R 中修改数据
- python - 中断自定义多处理池时出现无限 BrokenPipeError
- r - 带有 openGDB 层的 st_read 查询