首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前端优化--使用JavaScript添加交互

是一种运行在浏览器的动态语言,它允许我们对网页行为的几乎每一个方面进行修改:我们可以通过 DOM 树添加和移除元素来修改内容;我们可以修改每个元素的 CSSOM 属性;我们可以处理用户输入,等等。...然后,我们获得引用后,就可以更改其文本(通过 .textContent),甚至可以将其计算的 display 样式属性从“none”替换为“inline”。...JavaScript 还允许我们 DOM 创建、样式化、追加和移除新元素。从技术上讲,我们的整个页面可以是一个大的 JavaScript 文件,此文件能够逐一创建元素并对其进行样式化。...在网页引入脚本的另一个微妙事实是,它们不仅可以读取和修改 DOM 属性,还可以读取和修改 CSSOM 属性。...实际上,我们示例中就是这么做的:将 span 元素的 display 属性从 none 更改为 inline。最终结果如何?我们现在遇到了竞态问题。

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

前端优化--使用JavaScript添加交互

是一种运行在浏览器的动态语言,它允许我们对网页行为的几乎每一个方面进行修改:我们可以通过 DOM 树添加和移除元素来修改内容;我们可以修改每个元素的 CSSOM 属性;我们可以处理用户输入,等等。...然后,我们获得引用后,就可以更改其文本(通过 .textContent),甚至可以将其计算的 display 样式属性从“none”替换为“inline”。...JavaScript 还允许我们 DOM 创建、样式化、追加和移除新元素。从技术上讲,我们的整个页面可以是一个大的 JavaScript 文件,此文件能够逐一创建元素并对其进行样式化。...在网页引入脚本的另一个微妙事实是,它们不仅可以读取和修改 DOM 属性,还可以读取和修改 CSSOM 属性。...实际上,我们示例中就是这么做的:将 span 元素的 display 属性从 none 更改为 inline。最终结果如何?我们现在遇到了竞态问题。

1.8K21

JavaScript是如何工作的:渲染引擎和优化其性能的技巧

基本上,每个元素都表示为所有元素的父节点,这些元素直接包含在元素。 构建 CSSOM CSSOM 指的是 CSS 对象模型。...渲染时,需要考虑 JavaScript 代码与页面 上DOM 素交互的方式。 JavaScript 可以 UI创建大量更改,尤其是 SPA 。...优化你的 CSS 通过添加和删除元素,更改属性等来修改 DOM 将使浏览器重新计算元素样式,并且许多情况下,重新计算整个页面的布局或至少部分布局。...当你更改样式时,浏览器会检查是否有任何更改需要重新计算布局。对宽度、高度、左、顶等属性更改,以及通常与几何相关的属性更改,都需要布局。所以,尽量避免改变它们。...但是,如果你访问 box 之前更改了它的样式(例如,通过动态地向元素添加一些 CSS 类),浏览器必须先应用样式更改并执行布局过程,这是非常耗时和耗费资源的,所以尽可能避免。

1.6K30

最详尽的浏览器页面渲染机制分析

在这一过程,浏览器得递归 CSSOM 树,然后确定具体的元素到底是什么样式。 注意:CSS匹配HTML元素是一个相当复杂和有性能问题的事情。...这是因为JavaScript不只是可以改DOM,它还可以更改样式,也就是它可以更改CSSOM。...因为不完整的CSSOM是无法使用的,如果JavaScript想访问CSSOM更改它,那么执行JavaScript时,必须要能拿到完整的CSSOM。...——《高性能 JavaScript》 JS 是很快的, JS 修改 DOM 对象也是很快的。JS的世界里,一切是简单的、迅速的。...CSS优化: 标签的 rel属性 属性值设置为 preload 能够让你在你的HTML页面可以指明哪些资源是页面加载完成后即刻需要的,最优的配置加载顺序,提高渲染性能 总结 综上所述

1.5K10

Dom树 CSS树 渲染树(render树) 规则、原理

下面是渲染引擎取得内容之后的基本流程:   1.解析html为dom树,解析csscssom。渲染引擎开始解析html,并将标签转化为内容树的dom节点。   2....把dom和cssom结合起来生成渲染树(render)。接着,它解析外部CSS文件及style标签样式信息。这些样式信息以及html的可见性指令将被用来构建另一棵树——render树。...在这一过程,浏览器得递归 CSSOM 树,然后确定具体的元素到底是什么样式。   注意:CSS匹配HTML元素是一个相当复杂和有性能问题的事情。...这是因为JavaScript不只是可以改DOM,它还可以更改样式,也就是它可以更改CSSOM。...前面我们介绍,不完整的CSSOM是无法使用的,但JavaScript想访问CSSOM更改它,那么执行JavaScript时,必须要能拿到完整的CSSOM

4K40

浏览器渲染原理

在这个过程,浏览器会确定下一个节点的样式,并且这个过程是非常消耗资源的。因为节点的样式可以直接设置,也可以通过继承获得,浏览器必须递归CSSOM树才能确定具体的元素的样式。...渲染树只会包括需要显示的节点和这些节点的样式信息,如果某个节点是display: none的样式,那就不会构建到渲染树。 那么,浏览器渲染过程遇到JS文件会怎么处理?...渲染过程,如果遇到就停止渲染,执行JS代码。因为浏览器有GUI渲染线程和JS引擎线程,这两个线程是互斥的,JavaScript的加载、解析和执行会阻塞渲染。...JS文件不止会阻塞DOM的构建,也会导致CSSOM的构建。不完整的CSSOM是无法使用的,JavaScript想要访问CSSOM更改它,就必须得到完整的CSSOM。...所以导致浏览器未完成CSSOM的构建的时候想要运行JavaScript。这种情况下,浏览器会先下载和构建CSSOM,然后再执行JavaScript。 标签必须放在底部吗?

99820

揭秘浏览器资源关键词助你轻松获取宝贵浏览资源 |技术创作特训营第一期

CSS 样式会被映射为 CSSOMCSS 对象模型),它和 DOM 很相似,但是针对的是 CSS 而不是 HTML。... JavaScript 完全可以访问到 DOM 节点的某些样式,或者使用 JavaScript 直接访问 CSSOM。 图片 因此,CSS 可能会根据文档中外部样式表和脚本的顺序阻止解析。...如果在文档的脚本之前放置了外部样式表,则 DOM 和 CSSOM 对象的构建可能会相互干扰。...当解析器到达一个脚本标签时, JavaScript 执行完成之前无法继续构建 DOM,然而如果这一段 JavaScript 涉及到访问和使用 CSSOM,那么必须等待 CSS 文件被下载、解析并且...图片 (上图中 JavaScript 的执行被 CSS 构建 CSSOM 的过程阻塞了) 另外,虽然 CSS 不会阻塞 DOM 的构建,但是也会阻塞渲染。

26042

vue浏览器对DOM渲染探究

在这一过程,浏览器得递归 CSSOM 树,然后确定具体的元素到底是什么样式。 注意:CSS匹配HTML元素是一个相当复杂和有性能问题的事情。...阻塞渲染 这是因为JavaScript不只是可以改DOM,它还可以更改样式,也就是它可以更改CSSOM。...因为不完整的CSSOM是无法使用的,如果JavaScript想访问CSSOM更改它,那么执行JavaScript时,必须要能拿到完整的CSSOM。...也就是说,在这种情况下,浏览器会先下载和构建CSSOM,然后再执行JavaScript,最后继续构建DOM。 [阻塞渲染.png] 首先渲染的前提是生成渲染树,所以HTML和CSS肯定会阻塞渲染。...重绘和回流会在我们设置节点样式时频繁出现,同时也会很大程度上影响性能。 重绘是当节点需要更改外观而不会影响布局的,比如改变color就叫称为重绘 回流是布局或者几何属性需要改变就称为回流。

1.2K10

研讨浏览器绘制和Web性能的注意事项

浏览器创建呈现树,其中考虑到来自CSSOM的DOM和样式(其中样式 display: none 是避开的)。 浏览器根据呈现树计算布局的几何形状及其元素。...所有这些步骤加在一起,对于浏览器来说,加载时要做的工作很多.实际上,不仅仅是加载上,而是DOM(或CSSOM)被更改的任何时候。...浏览器绘制有其自身的特殊性,因为它甚至可以不对DOM或CSSOM进行任何更改的情况下进行。...在这个特殊的例子,增加的绘画是由页面上的动画GIF和canvas drawing(60 fps)的组合造成的,两者都不会导致DOM或其样式的任何更改,同时仍然触发绘画。...最明显的就是将元素的操作限制css的transform和opacity属性默认情况下不会触发画图,除非存在一些特殊情况,例如动画SVG路径。

1.1K30

CSS和网络性能

从广义上讲,这就是CSS对性能至关重要的原因: 浏览器构建渲染树之前无法渲染页面; 渲染树是DOM和CSSOM的组合结果; DOM是HTML加上需要对其进行操作的任何阻塞JavaScript; CSSOM...是针对DOM应用的所有CSS规则; 使用async和defer属性很容易使JavaScript无阻塞; CSS不容易异步; 所以要记住的一个好的经验法则是,您的页面会在你最慢的样式表加载完成之后才展示。...CSS之前放置任何非CSSOM查询JavaScript; CSS之后放置任何CSSOM查询JavaScript 更进一步,除了异步加载片段之外,我们应该如何更普适地加载CSSJavaScript?...HTTP / 1.1,我们将所有样式连接到一个主要包是很典型的。 我们称之为app.css: <!...警惕同步CSSJavaScript命令: CSSOM完成之前,CSS之后定义的JavaScript将无法运行 所以如果你的JavaScript不依赖于你的CSSCSS之前加载它;

1.3K30

浏览器内核之 CSS 解释器和样式布局

它思想是 DOM 的一些节点接口中,加入获取和操作 CSS 属性或者接口的 JavaScript 接口,因而 JavaScript 可以动态操作 CSS 样式。...对于内部和外部样式表,CSSOM 定义了样式表的接口,称为 “CSSStyleSheet”, 这是一个可以 JavaScript 代码访问的接口。...借助这个接口,开发者可以 JavaScript 获取样式表的各种信息,例如 CSS 的 “href”、样式表类型 “type”、规则信息 “cssRules” 等,甚至可以获取样式CSS 规则列表...解释网页自定义的 CSS 样式之前,实际上 WebKit 渲染引擎会为每个网页设置一个默认的样式,这决定了网页所没有设置的元素属性及其属性默认值和将要显示的效果。...使用 CSSDOM 接口来更改属性值的过程, WebKit ,这需要 JavaScript 引擎和渲染引擎协同完成。

1K40

Webkit底层原理(5)--CSS解释器和样式布局

它的思想是DOM的一些节点接口中,加入获取和操作CSS属性或者接口的JavaScript接口。因而JavaScript可以动态操作CSS样式。...对于内部和外部样式表,CSSOM定义了样式表的接口,称为CSSStyleSheet,这是一个可以JavaScript代码访问的接口。...借助于该接口,开发者可以JavaScript获取样式表的各种信息,例如CSS的href、样式表类型type、规则信息cssRules等,甚至可以获取样式CSS规则列表。...解释网页自定义的CSS样式之前,实际上Webkit渲染引擎会为每个网页设置一个默认的样式,这决定了网页所没有设置的元素属性及其属性默认值和将要显示的效果。...JavaScript设置样式 CSSOM定义了JavaScript访问样式的能力和方式。Webkit,这需要JavaScript引擎和渲染引擎共同来完成。

1.1K10

画了20张图,详解浏览器渲染引擎工作原理

CSS转化为树形对象之前,还需要将样式属性值进行标准化处理,比如,当遇到以下CSS样式: body { font-size: 2em } p {color:blue;} div {font-weight...现在样式属性已被标准化了,接下来就需要计算 DOM 树每个节点的样式属性了,这就涉及到 CSS 的继承规则和层叠规则。...「(1)样式继承」 CSS 存在样式的继承机制,CSS 继承就是每个 DOM 节点都包含有父节点的样式。...这里查找的过程,出于效率的考虑,会从 CSSOM 树的叶子节点开始查找,对应在 CSS 选择器上也就是从选择器的最右侧向左查找。所以,不建议使用标签选择器和通配符选择器来定义元素样式。...所以如果代码里引用了外部的 CSS 文件,那么执行 JavaScript 之前,还需要 等待外部的 CSS 文件下载完成,并解析生成 CSSOM 对象之后,才能执行 JavaScript 脚本。

1.7K20

嚯!原来这样就可以提升页面首屏的渲染性能

减少要传输的数据量 首先,移除所有未使用的部分,例如 JavaScript 无法访问的函数、带有从不匹配任何元素的选择器的样式以及被 CSS 永远隐藏的 HTML 标签。其次,删除所有重复项。...因此,我们可以直接跳过所有流程没有涉及的样式以及脚本文件。 样式 为了告诉浏览器不需要特定的 CSS 文件,我们应该为所有引用样式表的链接设置媒体属性。...为了避免这一点,所有脚本标签都必须用属性标记——异步或延迟。 标有 async 的脚本不会阻塞 DOM 构建或 CSSOM,因为它们可以 CSSOM 构建之前执行。...但请记住,内联脚本无论如何都会阻止 CSSOM,除非你将它们放在 CSS 之上。 相比之下,标有 defer 的脚本将在页面加载结束时进行执行。...此外,尝试批量更新 HTML 以避免多个布局事件,这些事件不仅由 DOM 或 CSSOM 更改触发,而且设备方向更改和窗口大小调整时也会触发。

73440

DevTools(Chrome 85)的新功能

(issue #1073899[5]) 这些都是有用的更改,但是本文中,我将回顾与样式编辑和新的 JavaScript 功能相关的更改,以及 Source 和 Performance 面板的改进。...CSS-in-JS 框架的样式编辑 通过即时编辑代码或样式来实时查看是 DevTools 最有用的功能之一。...使用 CSS 样式时,可以选择用 CSS 对象模型[8](CSSOM)API 以编程的方式操作 CSS 规则: const style = document.createElement('style')...chrome 85 的可选链 其他两个更改与 sources 面板的语法突出显示有关。 Chrome 84 之前,私有字段和方法[16]显示为白色文本。... Chrome 85 ,CodeMirror 已更新至版本 5.54.0[18] 此版本改进了对私有属性和类字段的解析[19]: ?

68530

前端不止:Web性能优化 - 关键渲染路径以及优化策略

这个过程浏览器,叫做“Parse HTML”。 ? CSS 对象模型 (CSSOM) 当DOM捕获了页面的内容,我们还需要知道页面如何展示这些内容,所以需要构建CSS 对象模型(CSSOM)。...需要注意的是,在网页引入JavaScript脚本有一个微妙事实,就是JavaScript不仅可以读取和修改DOM属性,还可以读取和修改CSSOM属性。...可能会访问样式属性,所以它会阻止JavaScript的执行直到styles.css返回并完成CSSOM构建,然后执行这一段JavaScript代码,再继续后面DOM的构建和相关渲染操作。...JavaScriptCSS资源请求是并行的,但仍然需要等到CSSOM构建完成之后,JavaScript才可以执行,然后进行后面的渲染工作。...JavaScript可以查询和操作DOM和CSSOM,正如前面介绍的,HTML解析过程构建DOM,当遇到JavaScript就停止DOM构建执行JavaScript,如果被执行的JavaScript是放置

1K30

只听说过CSS in JS,怎么还有JS in CSS

CSS in JS的字面意思可以看出,它是将css样式写在JavaScript文件,而不需要独立出.css、.less之类的文件。...JS in CSS又是什么 在上面我们提到CSS in JS就是把CSS写在JavaScript,那么JS in CSS我们可以推断出就是可以CSS中使用JavaScript脚本,如下所示。...比如,浏览器CSSOM 是不会告诉我们它是如何处理跨域的样式表,而且对于浏览器无法解析的 CSS 语句它的处理方式就是不解析了,也就是说——如果我们要用 CSS polyfill 让浏览器去支持它尚且不支持的属性...它们使开发者可以直接访问CSS对象模型(CSSOM),使开发人员可以编写浏览器可以解析为CSS的代码,从而创建新的CSS功能,而无需等待它们浏览器本地实现。 ?...还能更改一个 DOM 元素的属性,不过是不会引起渲染引擎重新计算布局或者样式属性,比如 transform、opacity 或者滚动条位置(scroll offset)。

6.6K40

浏览器渲染网页过程

它提供了对文档的结构化的表述,并定义了一种方式可以使从程序对该结构进行访问,从而改变文档的结构、样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。... 元素的 rel 属性属性值preload能够让你在你的HTML页面 <head...解析CSS并构建CSSOM 与HTML文件和DOM相似,加载CSS文件时,必须将它们解析并转换为树,即CSSOM。 它描述了页面上的所有CSS选择器,它们的层次结构和属性。...CSS 对象模型 (CSSOM) 是树形形式的所有CSS选择器和每个选择器的相关属性的映射,具有树的根节点,同级,后代,子级和其他关系。...这就是CSS 阻塞渲染的原因,因为解析所有CSS并构建CSSOM之前,浏览器无法知道每个元素屏幕上的位置。 ? 4. 执行JavaScript 不同的浏览器有不同的 JS 引擎来执行此任务。

1K30
领券