使用DTCoreText解析HTML.怎么把加载css进去

html-css012

使用DTCoreText解析HTML.怎么把加载css进去,第1张

html解析过程是从开头一行一行执行。

如果遇到CSS的加载以及JS的加载的话就会阻塞等待这些东西加载完毕甚至是JS执行完毕之后才进行继续加载。所以页面中如果JS全放在头部并且开始就执行的话,如果网速跟不上,可能出现短暂的空白!所以JS一般放在页面末尾。

css放在头部!

加载完毕后,会进行结构渲染。比方浏览器会先让样式作用于元素,出项位置等几何属性,同时进行页面外观渲染!

如果后面的操作有改变这些东西的话,可能会触发重排,和重绘!

DOM文档通常加载的步骤:

1.解析HTML结构。

2.加载外部脚本和样式表文件

3.解析并执行脚本代码。

4.DOM树构建完成。

//DOMContentLoaded

5.加载图片等外部资源。

6.页面加载完毕。

//load顺序是这样,但很多时候几个步骤是同时发生的。

  在这里梳理一下完整流程下的各种细节:

  由于浏览器采用至上而下的方式解析,所以会先解析html,直到遇到外部样式和外部脚本。这时会阻塞浏览器的

解析,外部样式和外部脚本(在没有async、defer属性下)会并行加载,但是外部样式会阻塞外部脚本的执行。

  即:html解析->外部样式、脚本加载->外部样式执行->外部脚本执行->html继续解析

  情况一:如果是动态脚本(即内联脚本)则不受样式影响,在解析到它时会执行。

  情况二:外部样式后续外部脚本含有async属性(IE下为defer),外部样式不会阻塞该脚本的加载与执行

(defer 会按照顺序在 DOMContentLoaded 前按照页面出现顺序依次执行,async 则是下载完立即执行)

  在外部样式执行完毕后,css附着于DOM,创建了一个渲染树(渲染树是一些被渲染对象的集)。每个渲染对象都

包含了与之对应的计算过样式的DOM对象,对于每个渲染元素来说,位置都经过计算,所以这里被叫做“布局”。然

后将“布局”显示在浏览器窗口,称之为“绘制”。

  接着脚本的执行完毕后,DOM树构建完成。这时,可以触发DOMContentLoaded事件。

  DOMContentLoaded事件的触发条件是:在所有的DOM全部加载完毕并且JS加载执行后触发。

 情况一:如果脚本是动态加载,则不会影响DOMContentLoaded时间的触发

 浏览器会等css加载完成后再加载图片,因为不确定图片的样式会如何。 

  要点一:CSS样式表会阻塞图片的加载,如果想让图片尽快加载,就不要给图片使用样式,比如宽高采用标签属性即可。

  要点二:脚本不会阻塞图片的加载

  最后页面加载完成,页面load

直接给出结论: 1、css并不会阻塞DOM树的解析 2、css加载会阻塞DOM树渲染 3、css加载会阻塞后面js语句的执行 为了避免过长的白屏时间,我们应该尽可能的提高css加载速度,以下有几种优化方法: 1、使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间) 2、对css进行压缩(可以用很多打包工具,比如webpack,gulp等,也可以通过开启gzip压缩) 3、合理的使用缓存(设置cache-control,expires,以及E-tag都是不错的,不过要注意一个问题,就是文件更新后,你要避免缓存而带来的影响。其中一个解决防范是在文件名字后面加一个版本号) 4、减少http请求数,将多个css文件合并,或者是干脆直接写成内联样式(内联样式的一个缺点就是不能缓存) 关于DOMContentLoaded: 对于浏览器来说,页面加载主要有两个事件,一个是DOMContentLoaded,另一个是onLoad。而onLoad没什么好说的,就是等待页面的所有资源都加载完成才会触发,这些资源包括css、js、图片视频等。 1、如果页面中同时存在css和js,并且存在js在css后面,则DOMContentLoaded事件会在css加载完后才执行。 2、其他情况下,DOMContentLoaded都不会等待css加载,并且DOMContentLoaded事件也不会等待图片、视频等其他资源加载。 参考自:https://juejin.cn/post/6844903667733118983