页面加载渲染的优化(一)

在这里插入图片描述

1.HTML本身是通过网址请求回来的,由字节流转换成字符流,浏览器进行词法分析,分析成词法的token,从上到下,不同 >的标签类型会解析成不同的对象,然后加载到DOM树上。
2.HTML中会通过link引入其他资源,这时会并发的请求静态资源,请求回来之后会和CSS资源进行结合,生成渲染树。
3.只有DOM树和CSS树都生成之后才会进行渲染,布局,绘制。
特点
1.顺序执行,并发加载(设3-4个CDN域名去最大化并发加载)
2.是否阻塞
3.依赖关系
4.引入方式

场景:
1.页面出来了,样式没有出来,闪退等,是因为没有遵循好依赖关系,如果CSS放在header中去引入,那么页面就会等待CSS加载完毕生成CSS树之后再渲染,就不会出现闪动。
2.JS的执行顺序,通过JS 的async标签进行异步加载,梳理好依赖关系。
3.方式:JS通过script会有阻塞问题,可以通过defer,async标签更好。
3.是否动态引入?判断是不是在需要的时候再去加载。SPA单页应用应该在路由到某个页面的时候再去加载那个路由的内容,要异步动态的去引入内容。

顺序执行,并发加载

1.词法分析时,token的获取是从下到下顺序执行的
2.并发请求外部资源
3.并发上限:某个域名的限制

CSS阻塞

1.CSS在head中会阻塞页面的渲染,页面需要link标签里面的样式内容才能去渲染,但为了避免闪动,还是要这样引入。
2.CSS阻塞JS的执行,JS去操作DOM,这时可能会有样式的修改,JS要依赖CSS之前加载完的样式效果。
3.CSS不阻塞外部脚本的加载,原因是webkit有HTML-preloader-scanner这样一个类,会预先扫描词法,通过预先加载器来请求后期加载所需要的资源。

JS阻塞

1.没有通过defer和async的,直接通过script标签的JS 会阻塞页面的渲染。
2.JS不会阻塞资源的加载。因为webkit有预先扫描器,有引用其他资源时,会并发去请求所需的资源,进行预先加载。
3.JS顺序执行,阻塞后续JS逻辑的执行。JS有可能会调用document.write的方式,去修改DOM结构,那么由于动态修改了文档,JS会阻塞后面节点的创建。文档结构的分析和渲染会等到JS代码执行完成之后再去调用html.parse进行词法分析。
4.JS是顺序执行的,不管返回的情况如何,JS都会保存引入的依赖关系进行单线程加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值