关于web性能一些特性汇总

DOMContentLoaded & load

load事件是window对象上的事件。指的是网页资源已经加载完毕(包括但不限于DOM、图片、音频、脚本、插件资源以及CSS)。

DOMContentLoaded事件是document对象上的事件。指的是DOM已经加载完毕。IE中有个私有的事件onreadystatechange事件跟这个标准事件类似。

因此DOMContentLoaded事件都会比load事件提前触发(jQuery重点ready event 就是兼容各种情况的DOMContentLoaded实现,感觉DOMContentLoaded时JS脚步也跑完了,毕竟放在body前)。

event.target & event.currentTarget & event.delegateTarget

在事件冒泡过程中的当前DOM元素。

触发事件的DOM元素。

绑定了当前正在调用jQuery 事件处理器的元素。

async & defer (script TAG)

async 异步下载,下载后立即执行

defer 异步下载,按顺序执行,执行区间大致在DOMContentLoaded 和window.load 之间

FPS(Frames Per Second):每秒传输帧数

正如Andrey Kosyakov Chromium 的博客中提到的,即使你的程序没有很多动画,帧的概念也是有用的,因为浏览器在处理输入事件时会生成重复动作的序列。如果你在一帧中留有足够的时间处理这些事件,就会使你的程序看上去有更好的响应性,这意味着更好的用户体验。

如果我们的目标是60fps, 那么最多有 16.66ms 去做所有的事情。这个时间并不多,所以尽可能从动画中挤出时间来提高性能还是很重要的。

CSS阻塞与JS阻塞

  • JS阻塞

所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。
直到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。
为了提高用户体验,新一代浏览器都支持并行下载JS,但是JS下载仍然会阻塞其它资源的下载(例如.图片,css文件等)。

由于浏览器为了防止出现JS修改DOM树,需要重新构建DOM树的情况,所以就会阻塞其他的下载和呈现。

嵌入JS会阻塞所有内容的呈现,而外部JS只会阻塞其后内容的显示,

2种方式都会阻塞其后资源的下载。也就是说外部样式不会阻塞外部脚本的加载,但会阻塞外部脚本的执行。

  • CSS阻塞

CSS本来是可以并行下载的,在什么情况下会出现阻塞加载了(在测试观察中,IE6下CSS都是阻塞加载)

当CSS后面跟着嵌入的JS的时候,该CSS就会出现阻塞后面资源下载的情况。而当把嵌入JS放到CSS前面,就不会出现阻塞的情况了。

根本原因:因为浏览器会维持html中css和js的顺序,样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载,所以就会出现上面CSS阻塞下载的情况。

CSS匹配规则

  • HTML 经过解析生成 DOM Tree(这个我们比较熟悉);而在 CSS 解析完毕后,需要将解析的结果与 DOM Tree 的内容一起进行分析建立一棵 Render Tree,最终用来进行绘图。Render Tree 中的元素(WebKit 中称为「renderers」,Firefox 下为「frames」)与 DOM 元素相对应,但非一一对应:一个 DOM 元素可能会对应多个 renderer,如文本折行后,不同的「行」会成为 render tree 种不同的 renderer。也有的 DOM 元素被 Render Tree 完全无视,比如 display:none 的元素。
  • 在建立 Render Tree 时(WebKit 中的「Attachment」过程),浏览器就要为每个 DOM Tree 中的元素根据 CSS 的解析结果(Style Rules)来确定生成怎样的 renderer。对于每个 DOM 元素,必须在所有 Style Rules 中找到符合的 selector 并将对应的规则进行合并。选择器的「解析」实际是在这里执行的,在遍历 DOM Tree 时,从 Style Rules 中去寻找对应的 selector。
  • 因为所有样式规则可能数量很大,而且绝大多数不会匹配到当前的 DOM 元素(因为数量很大所以一般会建立规则索引树),所以有一个快速的方法来判断「这个 selector 不匹配当前元素」就是极其重要的。
  • 如果正向解析,例如「div div p em」,我们首先就要检查当前元素到 html 的整条路径,找到最上层的 div,再往下找,如果遇到不匹配就必须回到最上层那个 div,往下再去匹配选择器中的第一个 div,回溯若干次才能确定匹配与否,效率很低。
  • 逆向匹配则不同,如果当前的 DOM 元素是 div,而不是 selector 最后的 em,那只要一步就能排除。只有在匹配时,才会不断向上找父节点进行验证。
  • 但因为匹配的情况远远低于不匹配的情况,所以逆向匹配带来的优势是巨大的。同时我们也能够看出,在选择器结尾加上「*」就大大降低了这种优势,这也就是很多优化原则提到的尽量避免在选择器末尾添加通配符的原因。

文档说明

此文档的所有资源都是来源网络仅在此做了分类整理备忘持续更新,所有精华之处并非原创,所有原创之处并不优秀。

参考链接

  • js中的window.onload和jquery中的load区别的讲解
  • CSS阻塞与JS阻塞
  • script之defer&async
  • 使用Chrome DevTools的Timeline和Profiles提高Web应用程序的性能
  • Sizzle引擎
  • markdown

转载于:https://www.cnblogs.com/advence-liz/p/6101551.html

关于web性能一些特性汇总相关推荐

  1. 关于移动Web性能的5个神话

    译者前言 这篇文章(http://www.sencha.com/blog/5-myths-about-mobile-web-performance/)由Sencha的CEO  Michael Mull ...

  2. 关于移动Web性能的五大神话

     这篇文章由Sencha的CEO Michael Mullany所写,主要是回应早前的一篇引起较多关于移动Web性能讨论的文章"Why mobile web apps are slow& ...

  3. 关于移动Web性能的5个神话(转)

    译者前言 这篇文章(http://www.sencha.com/blog/5-myths-about-mobile-web-performance/)由Sencha的CEO Michael Mulla ...

  4. W3C宣布成立Web性能工作组

    来源于InfoQ: W3C在其官网上宣布成立Web性能工作组(Web Performance Working Group),由来自Google和Microsoft的工程师担任主席,任务目标是制定衡量W ...

  5. Web性能API——帮你分析Web前端性能

    开发一个现代化的互联网网站是一项复杂的任务,需要各种职能的密切合作以应对用户日新月异的需求.其中,网页的性能直接决定了用户的体验,而随着新型客户端浏览设备的出现与网站功能的日益复杂化,对于性能的专注也 ...

  6. [译]Web 性能优化: 图片优化让网站大小减少 62%

    这是 Web 性能优化的第二篇,上一篇在下面看点击查看: Web 性能优化: 使用 Webpack 分离数据的正确方法 图像是web上提供的最基本的内容类型之一.他们说一张图片胜过千言万语.但是如果你 ...

  7. Web性能优化与Http2

    如今,互联网上的内容越来越丰富,过去几年时间,一个页面产生请求和整个大小都一直增长,这个趋势还会一直保持,对页面性能优化也要马不停蹄. 一个页面,会经历过加载资源,执行脚本,渲染界面的过程.我们知道, ...

  8. 服务器产品的特质和优势,亿速云裸金属服务器兼具“弹性”和“裸金属”两种属性,既有虚拟机的弹性,同时又保留了裸金属的一切性能、特性和优势!...

    (原标题:亿速云裸金属服务器兼具"弹性"和"裸金属"两种属性,既有虚拟机的弹性,同时又保留了裸金属的一切性能.特性和优势!) 今天,我们来讲一讲亿速云弹性计算服 ...

  9. ES7-ES11新特性汇总

    前言 ES全称ECMAScript,ECMAScript 和 JavaScript 的关系是,前者是后者的规范,后者是前者的一种实现,从15年es6发版后,到目前的es11,es的新特性被广泛使用,成 ...

最新文章

  1. 2021-07-30 自己垃圾场景数据集训练Bisenet网络
  2. 工作之中总有几日不在状态_你是怎样度过的?
  3. 【错误记录】Android 应用运行报错 ( You need to use a Theme.AppCompat theme (or descendant) with this activity. )
  4. dev layoutview 怎么显示大小_Liunx驱动学习:基于imx6ul 驱动oledssd1306 实现终端显示...
  5. 人工智能学习体系大纲(src:http://blog.sina.com.cn/s/blog_7dbb766f0102xdwu.html)
  6. javascript包装对象
  7. 聚集索引和非聚集索引的区别有哪些
  8. 5gh掌上云计算认证不通过_【众志成城战疫情】法官助理告诉你“移动微法院”、“掌上法庭”有多便捷、有多硬核~!...
  9. P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】
  10. JAVA-入门(内含jdk配置)
  11. lambda表达式相关
  12. Android系统性能优化(71)---关于Bitmap图片资源优化的小事
  13. VMware vSphere Hypervisor (ESXi) 6.7 U3(转载)
  14. 这是目前为止5G最完整的PPT
  15. Pr 音频效果参考:调制
  16. 3D游戏引擎的Web化
  17. c语言对称矩形的判定,江苏省扬州市仪征市2017年中考数学一模试卷(含解析).doc...
  18. 梅特勒托利多xk3124电子秤说明书_托利多电子秤说明书
  19. 携程2020算法校园招聘笔试
  20. 按什么键能够迅速锁定计算机,电脑快速锁屏按什么键

热门文章

  1. c 写c语言代码编辑器,最好用的c/cpp代码编辑器是vim,没有之一
  2. 【算法竞赛学习】气象海洋预测-Task1 气象数据分析常用工具
  3. leetcode刷题 82.删除排序链表中的重复元素Ⅱ
  4. DeepR —训练TensorFlow模型进行生产
  5. 立即学习AI:03-使用卷积神经网络进行马铃薯分类
  6. 聊聊 Java8 以后各个版本的新特性
  7. 老赖名下无财产,可以执行老赖子女名下的财产吗?
  8. 在银行存款被吞了,怎么能快速解决?
  9. 世界各地奇葩讨债方法,竟百发百中
  10. C语言那点事——如何从零学好C语言?