Shadow DOM 是否像 React.js 中的 Virtual DOM 一样快?

2024-03-06

在我的项目中实现 Shadow DOM 是否会让它们像 React 使用的虚拟 DOM 一样更快?


它们是用于不同目的的不同事物,因此比较性能没有意义。

虚拟DOM

虚拟 DOM 旨在避免对 DOM 进行不必要的更改,这种更改在性能方面代价高昂,因为对 DOM 的更改通常会导致页面重新渲染。虚拟 DOM 还允许收集一次应用的多个更改,因此并非每个更改都会导致重新渲染,而是在将一组更改应用于 DOM 后,重新渲染仅发生一次。

影子 DOM

Shadow dom 主要是关于实现的封装。单个自定义元素可以结合或多或少复杂的 DOM 来实现或多或少复杂的逻辑。任意复杂度的整个 Web 应用程序可以通过导入和添加到页面中<body><my-app></my-app>而且更简单的可重用和可组合组件可以实现为自定义元素,其中内部表示隐藏在影子 DOM 中,例如<date-picker></date-picker>.

风格封装Shadow DOM 还可以防止样式意外应用于设计者不希望的元素,例如,因为您使用的 CSS 或组件库更改了选择器,该选择器现在应用于使用相同 CSS 类名的其他元素。添加到组件的样式的范围仅限于该组件,并且可以防止样式的渗出或渗入。

Shadow DOM 和性能

尽管 Shadow DOM 最初与性能无关,但它也具有性能影响。由于样式是有范围的,浏览器可以假设某些更改仅影响页面的有限区域(自定义元素的影子 DOM),这可以将重新渲染限制在此类组件的区域,而不是重新渲染整个页面。

这就是原因>>>, /deep/, and ::shadowCSS 组合器允许跨影子 DOM 边界应用样式,但已被弃用,并且很快就会从 Chrome 中删除(据我所知,其他浏览器从未拥有过它们)。这些组合器的存在本身就阻止了上一段提到的优化。

Angular2利用两个世界的优势。

它使用单向数据流并仅对模型运行更改检测。如果它检测到更改,它会导致 DOM 通过更新绑定来更新,并制定结构指令,例如*ngFor, *ngIf, ...更新 DOM。因此,DOM 仅在模型实际更改时更新。

Angular2 使用 Shadow DOM(仅适用于ViewEncapsulation.Native(当前不是默认设置)利用浏览器提供的样式封装功能,或者(当前默认设置)仅通过重写添加到组件的样式来模拟样式封装,作为本地影子 DOM 和 CSS 变量(用于动态全局样式更改)之前的解决方法变得广泛可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shadow DOM 是否像 React.js 中的 Virtual DOM 一样快? 的相关文章

随机推荐

  • NSTableView 重绘不更新显示,选择粘贴

    尽管我知道这个问题的解决方案 但我很感兴趣是否有人可以向我解释这个解决方案 我也想把这个问题弄清楚 因为我在网上找不到任何关于这个问题的提及 而且我花了几天的时间才找到这个问题 我有一个 NSTableView 在重绘及其选择方面表现得很奇
  • 这是尾递归吗?

    我试图找到尾递归的例子 但我真的没有看到常规和尾递归之间的区别 如果这不是尾递归 有人能告诉我为什么不是吗 public static long fib long index assume index gt 0 if index 0 Bas
  • System.Diagnostics.Activity 在 aspnet core 2.1 中为空

    我们刚刚将 aspnet core 2 0 应用程序更新到 2 1 并且在使用 依赖方面遇到了问题System Diagnostics Activity 背景 我们希望跨服务边界传递一致的 关联 ID 以便我们可以关联每个请求的日志条目 我
  • 如何在 WPF 菜单项中禁用助记符?

    我有动态字符串显示为 MenuItem 的标题 其中有时包含 WPF 将下划线视为助记符 但我不希望这样 我如何禁用它 尝试了线程中的所有解决方案后WPF 列表框 跳过字符串中的下划线符号 https stackoverflow com q
  • 一旦禁用了 ios 中的空闲计时器(以允许显示器再次休眠),如何重新启用它?

    我已经找到了如何阻止 iOS 设备进入睡眠状态 见下文 但我在撤消该设置时遇到了麻烦 根据苹果文档 https developer apple com documentation uikit uiapplication 1623070 id
  • 在 emacs python-mode 中不正确地退出缩进

    我正在使用 Emacs python 模式 我在我的中使用它来调用它 emacs add to list load path emacs python mode el 6 0 3 autoload python mode python mo
  • 为什么在测试 ui.sender 时,jquery sortable 中的更新事件似乎运行了两次

    我正在使用 jQuery UI sortable 对连接列表进行排序 更新事件似乎运行了两次 这是完整的可排序调用 pageContent sortable handle quesText connectWith pageContent c
  • JavaScript 性能评估 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery如何通过数组中的属性查找对象

    鉴于我有一系列 目的 对象 array of purpose objects var purposeObjects purpose daily purpose weekly purpose monthly 为了简单起见 我省略了其他属性 现
  • 如何使用 classList 获取 React 组件引用来更改其类?

    我已经创建了一个反应组件使用以下代码 在此我创建选项卡并添加类并将其引用存储在全局命名空间接口中以供进一步处理 var TabBody React createClass getInitialState function return cl
  • Metro 应用程序中的异步调用链接

    我对 Metro 开发很陌生 我只希望能够以一种可以理解的方式表达我的问题 实际上我正在将旧应用程序的一部分移植到 Metro 逻辑部分是一个单独的项目 便携式库 它应该服务于 1 旧的 WPF 应用程序和 2 新的 Metro 应用程序
  • Socket.IO确认发货

    在我深入研究代码之前 有人可以告诉我 Socket IO 中是否有任何可用于确认交付的文档吗 以下是我迄今为止收集到的信息 可以提供回调 以便在消息被确认时调用 有一种特殊模式 不稳定 不保证交付 有一个默认模式不是 易失性 的 这给我留下
  • JAVAFX 2.0 如何将滑块中的滑块图标更改为图像?

    我想将图标更改为我的图像 我浏览了 CSS 参考指南 但似乎找不到任何相关内容 有可能吗 无论是使用 CSS 还是通过主 JavaFX 脚本进行声明 都没有关系 看一下示例代码和图像 了解如何在此处呈现自定义滑块音频播放器 http fxe
  • jQuery:使用 carouFredSel 插件进行延迟加载

    我正在尝试对使用以下命令创建的轮播内的图像实现延迟加载卡鲁 弗莱德 塞尔 http caroufredsel dev7studios comjQuery 插件 您有什么建议或者您已经取得了类似的成就吗 默认情况下好像做不到 Stefano
  • Identity 2.0 无效登录尝试

    由于某种原因 我尚未发现 但在成功注册和激活后 我无法使用电子邮件地址登录 而是收到错误 无效登录尝试 由于 ASP NET Identity 2 0 通过使用电子邮件登录进行了改进 因此我修改了注册表单以实际存储真实的用户名 因为现有的注
  • 让 DLL 使用函数指针调用 exe 函数

    谁能告诉我我做错了什么 我正在尝试在不同的线程上运行自定义主程序 这是代码 exe主程序 include dll class h include
  • 为多个类生成单个 WSDL 文件

    我们使用 自下而上 的方法来构建网络服务 我们有 10 个 Java 类 希望将其公开为 Web 服务 我们怎样才能为这些类只创建一个 WSDL 文件呢 java2wsdl实用程序及其 Ant 任务仅使用一个类作为生成 WSDL 文件的参数
  • 为什么 RelayCommands 通常使用延迟初始化?

    当使用约什 史密斯的中继命令 http msdn microsoft com en us magazine dd419663 aspx id0090051 我见过的大多数示例都使用延迟初始化 例如 public class ViewMode
  • defaultdict 的嵌套 defaultdict

    有没有办法使 defaultdict 也成为 defaultdict 的默认值 即无限级递归defaultdict 我希望能够做到 x defaultdict stuff x 0 1 0 所以 我可以做x defaultdict defau
  • Shadow DOM 是否像 React.js 中的 Virtual DOM 一样快?

    在我的项目中实现 Shadow DOM 是否会让它们像 React 使用的虚拟 DOM 一样更快 它们是用于不同目的的不同事物 因此比较性能没有意义 虚拟DOM 虚拟 DOM 旨在避免对 DOM 进行不必要的更改 这种更改在性能方面代价高昂