- android - 如何使用 adjustPan 保持工具栏可见?
- android - 在 android 的 Google Chrome 中,如何设置 unsafely-treat-insecure-origin-as-secure
- android - Android 4.1/4.3/4.4 电子邮件应用程序中的 FileProvider 失败,列 '_data' 不存在
- Android Studio + Liquid Fun
在我的项目中实现 Shadow DOM 是否会使它们像 React 使用的虚拟 DOM 一样更快?
最佳答案
它们是不同用途的不同事物,因此比较性能没有意义。
虚拟 DOM
虚拟 DOM 旨在避免对 DOM 进行不必要的更改,这在性能方面代价高昂,因为对 DOM 的更改通常会导致页面重新呈现。 Virtual DOM 还允许收集要同时应用的多个更改,因此并非每个更改都会导致重新渲染,而是在将一组更改应用到 DOM 后重新渲染只会发生一次。
影子 DOM
Shadow dom 主要是关于实现的封装。单个自定义元素可以实现或多或少的复杂逻辑以及或多或少的复杂 DOM。可以通过导入和 <body><my-app></my-app>
将任意复杂度的整个 Web 应用程序添加到页面中但也可以将更简单的可重用和可组合组件实现为自定义元素,其中内部表示隐藏在影子 DOM 中,如 <date-picker></date-picker>
.
样式封装Shadow DOM 还可以防止样式被意外应用到设计者不打算应用的元素,例如,因为您正在使用的 CSS 或组件库更改了一个选择器,该选择器现在应用到使用相同 CSS 类名的其他元素。添加到组件的样式限定在该组件范围内,防止样式渗出或渗入。
Shadow DOM 和性能
尽管 shadow DOM 首先与性能无关,但它也具有性能影响。因为样式是有范围的,所以浏览器可以假设某些更改只影响页面的有限区域(自定义元素的影子 DOM),这可以将重新渲染限制在此类组件的区域,而不是重新渲染整个页面。
这就是 >>>
的原因, /deep/
, 和 ::shadow
允许跨影子 DOM 边界应用样式的 CSS 组合器已被弃用,并且很快就会从 Chrome 中删除(其他浏览器从未有过它们 AFAIK)。这些组合器的存在阻止了上一段中提到的那种优化。
Angular2 利用了两个世界的优势。
它使用单向数据流并仅在模型上运行变化检测。如果它检测到更改,它会导致通过更新绑定(bind)来更新 DOM,并制作结构指令,如 *ngFor
, *ngIf
, ... 更新 DOM。因此,DOM 仅在模型实际更改时更新。
Angular2 使用影子 DOM(仅适用于 ViewEncapsulation.Native
目前不是默认设置)来利用浏览器提供的样式封装功能,或者(当前默认设置)通过重写添加到组件的样式来模拟样式封装,作为一种解决方法,直到原生影子 DOM 和 CSS 变量(用于动态全局样式更改)变得广泛可用。
关于dom - Shadow DOM 是否像 React.js 中的 Virtual DOM 一样快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36012239/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
Polymer的light DOM和local DOM有什么区别?来自文档(1): The DOM that an element creates and manages is called its
当内容添加到网页时,我需要触发一个 Action 。更新可能具有不同的性质(例如 AJAX、延迟脚本、用户操作)并且不受我的控制。 我想使用 DOM 突变事件,但它们并非在所有浏览器中都可用。是否有为
我刚遇到一个有趣的情况,我有一个提交 放置在 内的 native 自定义元素的 Shadow DOM 内. Select #shadow-root ...
假设有一个滚动列表,当我插入一些新的 DOM 附加到当前 dom 时,它工作正常。上拉 但是如果我之前插入一些新的 DOM,新的 DOM 将在视口(viewport)中,而旧的 DOM 将被下推。下拉
在我的项目中实现 Shadow DOM 是否会使它们像 React 使用的虚拟 DOM 一样更快? 最佳答案 它们是不同用途的不同事物,因此比较性能没有意义。 虚拟 DOM 虚拟 DOM 旨在避免对
在我的页面内容上,我将多张卡片组织成网格 __________________ | ____ ____ | | | | | | | | | | | |
是否可以在浏览器中看到(调试)从 DOM 元素触发的自定义事件? 假设我想查看 Bootstrap Collapse 的哪个特定元素触发了 show.bs.collapse event ,我能以某种方
我正在生成用于客户端的 XPaths 服务器端,我很困惑为什么在 DOM 中找不到表路径(即 td 中的内容)。 事实证明,现代浏览器(至少是 Chrome 和 Firefox)插入了 tbody在文
是否可以检索文本节点的几何位置(即从父元素、页面等的顶部/左侧偏移量)? 最佳答案 不是直接的。 TextNode 没有用于测量视口(viewport)定位的原始 IE 偏移*(和类似的)扩展。 仅在
以下语句中的 DOM 元素的含义是什么? Statement #1 You can add multiple classes to a single DOM element. Statement #2
有没有办法让 firebug(或任何其他浏览器,或使用任何其他工具)阻止任何 dom 操作的发生?有时布局调试充满悬停事件的屏幕是不可能的,因为元素可能会消失,并且您看不到它们的复合布局。 最佳答案
我需要在html文档中搜索 text here 然后输出完整的节点路径(CSS或XPATH) 例如 html > body > div class ="something" > table > tr
这是我的一个页面的典型加载时间如何拆分为:- Domain Lookup 0 0 % Connect 134 .3% Request
我的 .on() 工作时遇到一些问题。我的网站是here . 如果你看看 www.eliteweb-creation.co.uk/dev/js/nav.js,我正在 mouseenter 和 mous
我是 Javascript 的新手,负责将我们产品的 UI 从 YUI2 迁移到 YUI3。看起来哪里都没有迁移指南,所以我现在正在浏览互联网帖子和 yui 文档。 在我的全局范围内,我临时添加了类似
我想和实习生一起测试一些 DOM 相关的东西,不需要特定的固定装置,只是一般的 DOM 东西,比如我改变了 Element.prototype。这是否需要通过本地 Selenium 服务器(或 sau
我是 HTML 和 HTML5 的初学者。 当我阅读以下内容时 link ,我找到了术语 DOM 和 DOM API。我通读了维基百科,但无法理解其背后的全部思想。 谁能给我解释一下: 文档对象模型
我有两个主要问题。 Object 之类的扩展是否算数? 什么是 DOM 包装? http://perfectionkills.com/whats-wrong-with-extending-the-do
对不起查询,原型(prototype),雅虎 YUI,道场在考虑小的时候不吸引我。我想要一个模块化的库,代码尽可能小,最多 20Kb [un compressed] 是我所期望的。应该提供 Dom 操
我是一名优秀的程序员,十分优秀!