七爪源码:简而言之 DOM 操作性能的历史

2023-05-27 0 1,061

间接预览 DOM 生产成本极高。 他们怎么晓得他们那时所晓得的?

七爪源码:简而言之 DOM 操作性能的历史

DOM 的第二个版! 它由 WWW Consortium 建立,是两个虚拟化且分立于词汇的USB,提供更多对表示文件格式、HTML 或 XML 的对象的表述和出访。

那有多好? 保有两个代表者页面每一小部分的方法论树! 它关上了许多我什至难以提到的几率。 这对他们 Web 开发者而言是这场民主革命。

一刹那的发现。 积极探索的关键时刻。

在或者说的 DOM 被发明者以后,他们有两个叫作“DOM Level 0”或“Legacy DOM”的小东西。 可以建立可视化,但仅指这类原素。

在第二个规范化中,DOM 让他们能出访完备的 HTML/XML 数学模型。 2000 年,第 2 级出版发行。 它如是说了该事件数学模型。

开发者正式发布库以精简 DOM USB的使用不会耗费极短时间。

更让人激动的分馆

七爪源码:简而言之 DOM 操作性能的历史

出访 DOM 并对其进行操作方式并并非两件更让人融洽的各项任务。无须建立小型机能方可赢得巨大的标识符库。 jQuery 的出现使这种操作方式不所以乏味。

除此之外,jQuery 增添了更多用途,比如阿提斯鲁夫尔谷、CSS 动画电影和 Ajax。

但是操作方式 DOM 的生产成本是啥?我坚信这并非您第二次听闻间接操作方式 DOM 是不太好的。这要花许多钱。但为何?为何单纯的特性更动会暗指操控性问题?

事实是预览特性非常便宜和快速,但问题是更动本身会触发重绘和重新定位文件格式上的原素的流程(重绘和重排)。这是通过复杂的内部算法完成的。

单个更动可以对树中的所有其他第一类产生巨大的级联效应。即使是两个小操作方式,比如改变显示:无;显示:内联;在两个原素上,会导致周围更多原素的回流,并导致大部分重新绘制。

大约在 2010 年左右,jQuery 非常流行(并且仍然被广泛使用)。尽管有两个 jQuery 没有解决的问题:应用程序的复杂性使得前端数据成为两件严肃的事情。数据越多,DOM 树的变化就越多。

两个新的时代必须出现……

框架时代

七爪源码:简而言之 DOM 操作性能的历史

这个想法是抛弃页面术语,采用一种新的方法和思维方式:网络应用程序。不再有静态页面,不再有单纯的可视化和阿提斯鲁夫尔谷。全世界都声称保有数据管理和 SPA。 Web 应用程序需要状态,并且需要管理状态。框架爆发了!

Ember、Meteor、Backbone、Knockout,以及第一代中最重要的:AngularJS。

他们的职业,前端工程师,以前所未有的方式出现。这些框架的想法很单纯:为构建应用程序提供更多全套(或部分)工具和指南。向前端应用程序世界引入了惊人的机能:依赖注入、双向数据绑定、动态模板、服务、工厂等。

有许多发现的美好时光。但随后出现了两个问题,并成为论坛和讨论组中的共同话题:如何处理海量数据并管理复杂状态。双向数据绑定很容易变得一团糟并降低应用程序操控性。

随着应用程序变得越来越大,他们心爱的 DOM 并没有得到很好的对待。以 AngularJS 为例,框架为每个控制器建立作用域。这些作用域模仿 DOM 结构并提供观察者来观察变化。一旦注意到变化,AngularJS 就会触发摘要循环。循环将旧值与新值进行比较,并在 DOM 中应用预览。

从开发者的角度来看,这是更让人兴奋和现代的。但正如我以后已经提到的,DOM 中的不断变化会导致操控性下降。

这就是 AngularJS 发生的事情。范围可以有嵌套范围。观察者可以触发其他观察者。摘要循环可以运行多次而不需要它。如果他们在这个场景中添加双向数据绑定,很容易想象很难

在此期间,我开始了我的开发者职业生涯。在学习了我的第二个框架 (AngularJS) 后非常兴奋,但不久之后,对操控性问题感到非常沮丧。

在这一点上,全世界的开发者都明白,操控性是两个应该更加认真对待的话题。

表演时代

七爪源码:简而言之 DOM 操作性能的历史

这就是他们现在生活的关键时刻。一时激动。操控性是两个热门话题。现在的应用程序有许多数据。他们需要复杂的用户界面、离线几率、多平台等。

在求职面试中,应聘者会被问到许多方面:

虚拟 DOM 是如何工作的Angular 的变更检测是如何工作的什么是细粒度反应性WebAssembly 如何帮助提高操控性什么是 shadow-DOM什么是 Web 组件

理解这些主题变得更加苛刻。

他们明白,如果他们需要更动 DOM,他们需要在不触发大量回流的情况下准确地进行。出现了复杂的算法和策略来解决这种情况。

虚拟 DOM

这一切都始于 2013 年,随着 ReactJS 正式发布的新模式的引入:虚拟 DOM。数以百万计的开发者被这个更让人惊叹的新分馆所吸引。 Virtual DOM 背后的想法是什么?

精准预览,批量预览。

这个想法是保有两个由 JavaScript 第一类表示的 DOM 副本。该第一类的每个特性都代表者原始 DOM 中的两个节点。因此,每当状态更动或在组件中输入新特性时,React 都会预览 Virtual DOM。

一种称为协调的算法负责比较两个 DOM。如果发现差异,将预览受影响的节点,避免预览整个或更大的 DOM。

这种方法使 React 成为一种趋势。

Angular 的变更检测

Angular 的做法有点不同。它覆盖本机阿提斯鲁夫尔谷程序并为每个组件生成更动检测脚本。这些是具有一些依赖关系的工厂,这些依赖关系代表者组件的绑定。

这个工厂中有两个名为 updateRenderer 的函数,每次 Angular 执行更动检测时都会调用它。此

细粒度反应性

该策略基于同步反应式编程的概念。这个想法是将模板编译为或者说的 DOM 节点,并使用这种反应性来预览这些节点。

对于我在本文中提到的每一刻,都可以建立两个单独的帖子或写一本关于它的书。 我打算向您展示使他们了解他们那时所晓得的关于 DOM 和应用程序操控性的主要变化。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务