We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
##性能检测
这个时间可以看作是所有DOM都解析完毕的时间,默认可以统计domready时间,因为通常会在这时绑定操作。对于使用了模块异步加载的js可以在代码中去主动标记要重要js的加载时间。这也是产品指标的统计方式。
使用jquery中的$(document).ready()即是此意义,就是performance.timing.domInteractive.
计算公式:
performance.timing.domInteractive - performance.timing.navigation
默认刻统计onload时间,这样可以统计同步加载的资源全部加载完的耗时。如果页面中存在很多异步渲染,可以将异步渲染完成的时间作为总下载时间。
performance.timing.loadEventStart - performance.timing.navigation
开始渲染时间: domLoading - navigationStart
为了更好的用户体验,浏览器渲染的时候,不必等所有DOM解析完再与CSSOM一起创建Render Tree,而是边解析边渲染,即解析完一部分渲染(显示)一部分。
所以白屏时间是在 dom ready 之前
###css会不会阻塞DOM解析,但是会阻塞DOM的渲染,而且会阻塞js的执行。
js
defer
async
<script>
css不阻止dom的解析 js阻止dom的解析 css js都会阻止dom的渲染 原因: js有可能影响dom的解析,比如在js里面新增dom等这些操作 css不能影响dom的解析 而 dom的渲染 是需要等js,css都解析完成后才进行的(浏览器就是这么机智),所以css js都阻止dom的渲染
几个重要的点
defer属性相信大家也很熟悉了,MDN对此的描述是用来通知浏览器该脚本将在文档完成解析后,触发 DOMContentLoaded 事件前执行。设置这个属性,能保证DOM解析后马上打印出div。
DOMContentLoaded: 当页面文档加载并解析完毕之后会立马触发DOMContentLoaded事件,而不是等样式文件,图片文件和子框架页面的全部加载。实践证明触发这个事件时,有些css和js是已经加载的。写在html里面的script节点的加载和解析会影响 domContentLoaded 事件的触发时间
document.readyState === 'complete'
因为只要浏览器遇到 script 标记,就会进行阻止,并等到 CSSOM 构建完毕
script
加载是并行的,执行是串行的。html开始加载的时候,浏览器会将页面外联的css文件和js文件并行加载,如果一个文件还没回来,它后面的代码是不会执行的。刚刚我们的demo,我们阻塞了css文件几秒,此时js文件因为并行已经加载回来,但由于css文件阻塞住,所以后面 JsStartTime 的赋值语句是不执行的!当我们放开阻塞,此时才会运行到 JsStartTime 的赋值、js文件的解析、JsEndTime的赋值,由于大头时间加载早已完成,所以 JsEndTime 和 JsStartTime 的差值非常小。
前端性能——监控起步
原来 CSS 与 JS 是这样阻塞 DOM 解析和渲染的
非常好:评估关键渲染路径
研究首屏时间?你先要知道这几点细节: 并行串行
The text was updated successfully, but these errors were encountered:
No branches or pull requests
##性能检测
用户可操作时间
这个时间可以看作是所有DOM都解析完毕的时间,默认可以统计domready时间,因为通常会在这时绑定操作。对于使用了模块异步加载的js可以在代码中去主动标记要重要js的加载时间。这也是产品指标的统计方式。
使用jquery中的$(document).ready()即是此意义,就是performance.timing.domInteractive.
计算公式:
总下载时间
默认刻统计onload时间,这样可以统计同步加载的资源全部加载完的耗时。如果页面中存在很多异步渲染,可以将异步渲染完成的时间作为总下载时间。
计算公式:
开始渲染时间: domLoading - navigationStart
为了更好的用户体验,浏览器渲染的时候,不必等所有DOM解析完再与CSSOM一起创建Render Tree,而是边解析边渲染,即解析完一部分渲染(显示)一部分。
所以白屏时间是在 dom ready 之前
###css会不会阻塞DOM解析,但是会阻塞DOM的渲染,而且会阻塞js的执行。
js
defer
和async
,脚本下载的过程中是不会阻塞DOM解析的<script>
标签时,浏览器都会渲染一次页面。浏览器不知道脚本的内容,因而碰到脚本时,只好先渲染页面,确保脚本先获取到最新的DOM元素。<script>
且没有defer或async属性的 标签时,会触发页面渲染,因而如果前面CSS资源尚未加载完毕时,浏览器会等待它加载完毕在执行脚本。?css不阻止dom的解析
js阻止dom的解析
css js都会阻止dom的渲染
原因:
js有可能影响dom的解析,比如在js里面新增dom等这些操作
css不能影响dom的解析
而 dom的渲染 是需要等js,css都解析完成后才进行的(浏览器就是这么机智),所以css js都阻止dom的渲染
几个重要的点
如果没有阻塞解析器的 JavaScript,则 DOMContentLoaded 将在 domInteractive 后立即触发。
defer属性相信大家也很熟悉了,MDN对此的描述是用来通知浏览器该脚本将在文档完成解析后,触发 DOMContentLoaded 事件前执行。设置这个属性,能保证DOM解析后马上打印出div。
DOMContentLoaded: 当页面文档加载并解析完毕之后会立马触发DOMContentLoaded事件,而不是等样式文件,图片文件和子框架页面的全部加载。实践证明触发这个事件时,有些css和js是已经加载的。写在html里面的script节点的加载和解析会影响 domContentLoaded 事件的触发时间
document.readyState === 'complete'
因为只要浏览器遇到
script
标记,就会进行阻止,并等到 CSSOM 构建完毕加载是并行的,执行是串行的。html开始加载的时候,浏览器会将页面外联的css文件和js文件并行加载,如果一个文件还没回来,它后面的代码是不会执行的。刚刚我们的demo,我们阻塞了css文件几秒,此时js文件因为并行已经加载回来,但由于css文件阻塞住,所以后面 JsStartTime 的赋值语句是不执行的!当我们放开阻塞,此时才会运行到 JsStartTime 的赋值、js文件的解析、JsEndTime的赋值,由于大头时间加载早已完成,所以 JsEndTime 和 JsStartTime 的差值非常小。
前端性能——监控起步
原来 CSS 与 JS 是这样阻塞 DOM 解析和渲染的
非常好:评估关键渲染路径
研究首屏时间?你先要知道这几点细节: 并行串行
The text was updated successfully, but these errors were encountered: