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 一样快? 的相关文章

  • 用空字符串替换状态:Javascript

    我有这个网址 website com con blog true 我在 javascript 中所做的是 if getURLparams blog RandomFunction change the url window history r
  • 访问事件处理程序内的对象实例

    我有以下代码 var myObj inputs document getElementsByTagName input attachKeyEvent function for var i 0 i lt this inputs length
  • 如何获取 $node 内的 html 而不仅仅是 $nodeValue [重复]

    这个问题在这里已经有答案了 目前情况描述 我有一个装满页面的文件夹 页面文件夹 该文件夹内的每个页面 除其他外 都有一个 div id short info 我有一个代码可以提取所有 div div 从该文件夹中并使用显示其中的文本text
  • AngularJS:在部分视图出现之前触发 $viewContentLoaded

    对于部分视图 我想做一些我通常会做的 JavaScript 事情 document ready function 例如将 venet 侦听器绑定到元素 我知道这对于 AngularJS 和加载到 根 视图中的部分视图不起作用 因此 我向控制
  • 如何修复 IE6 上的不透明度

    如何修复 IE6 上的不透明度 此代码不适用于 IE6 filter alpha opacity 50 moz opacity 0 5 khtml opacity 0 5 opacity 0 5 还有这段代码 description ani
  • PHP DOM - 剥离 span 标签,保留其内容

    我希望采用如下标记 span class test Some text that is strong bolded strong and contains a a href link a span 并在 PHP 中找到剥离跨度的最佳方法 剩
  • 调用“DOMNodeInserted”事件时添加元素

    我想在每个 喜欢 按钮 chrome 扩展 之后添加一个元素 由于帖子被添加到新闻提要而不刷新页面 我必须添加一个事件侦听器 DOMNodeInserted 但是当我尝试把after 里面的功能 它不起作用 Code contentArea
  • 在 jQuery 中,每次 DOM 更改时如何调用函数?

    我需要确保即使 DOM 更改后页面仍保持脚本描述的方式 我的脚本必须处理 DOM 的这些更改 以便我的脚本不仅仅处理初始状态 是否有一个事件可以用来处理这些 DOM 更改 从最严格的意义上来说 你的问题是这样的 Narrow the con
  • 与浏览器无关的 C++ DOM 接口

    当针对浏览器使用 C 进行编程时每个引擎都有一组不同的接口 IE 具有基于 COM 的 MSHTML http msdn microsoft com en us library aa752279 VS 85 aspx http msdn m
  • iOS Javascript DOM“冻结?”

    这里有几个问题 有没有办法阻止 iOS 在滚动时冻结页面上的 javascript 当您在另一个选项卡中或切换应用程序时 iOS 是否会冻结 JavaScript iOS 上还有其他主要的 javascript 限制吗 iOS 6 x 会暂
  • 什么是 DOM 级别?

    我听说过 DOM level 2 和 DOM level 3以前的帖子 https stackoverflow com questions 6617030 where is a node defined 这些抽象结构是否类似于具有 1 7
  • JavaScript 附加和前置与 jQuery 附加和前置

    QA Style 我最近读了一篇文章 里面说JavaScript已经实现了append and prepend受 jQuery 启发的方法 这对我来说是一个新知识 因为据我所知 要附加一个元素 我必须使用element appendChil
  • 如何使用 jquery live 停止事件冒泡?

    我试图停止一些事件 但 stopPropagation 不适用于 实时 所以我不知道该怎么做 我在他们的网站上找到了这个 现场活动不会在 传统方式 不能 使用 stopPropagation 停止或 停止立即传播 例如 以两次点击事件为例
  • 如何使 Javascript focus() 方法在输入文本框的 onBlur 事件中工作?

    对于我来说focus 如果我将它与按钮和 onClick 事件一起使用 则该方法工作正常 但使用onBlur从文本框中 它不起作用 有人可以指导我吗
  • document.referrer 跨浏览器兼容吗?

    我想使用 document referrer 进行非正式的推荐人检查 该元素跨浏览器兼容吗 当尝试引用文档对象时 浏览器会抛出错误吗 The document referrerDOM 规范中描述了属性 http www w3 org TR
  • 我可以向 DOM 对象添加任意属性吗?

    我可以向 JavaScript DOM 对象添加任意属性 例如
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • jQuery 清除 DOM 先前加载的脚本

    大家好 我正在开发一个项目 我使用 jQuery 将页面加载到 div 中 每个页面都有自己的 jQuery 脚本 我的问题是以前加载的脚本没有从 DOM 中清除 这给我的项目带来了更大的问题 例如 我在一个页面中有一组计时器 它会自动保存
  • 我无法注入带有“!important”规则的样式[重复]

    这个问题在这里已经有答案了 我尝试使用以下代码注入样式 document body style color green important Per CSS 级联引用 http www w3 org TR CSS2 cascade html
  • 当名称是数组时如何使用 Javascript 修改 HTML Select

    我有两个同名的 html select 对象 它们是具有不同索引的数组 我想做的是 如果从类别 0 选择元素中选择 关闭 我想禁用类别 1 元素 我一直在尝试使用 document getElementsByName 但无法弄清楚如何专门针

随机推荐

  • 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 进行不必要的更改 这种更改在性能方面代价高昂