前端性能优化笔记

死锁专家
• 阅读 3740

前端性能优化可以从下载资源上着手优化

1、 资源越小下载的越快,压缩文件(html,css,js等)
服务器端的资源文件被压缩的越小,客户端在下载的时候,就越快
图片优化,不用的时候不加载(懒加载),选择合适的图片类型

2、 路径上,通过CDN(content delivery network), 内容分发网络,让资源下载的更快
使用CDN的好处

采用CDN的时候,不带cookie,可以减少请求头的大小
减少主域的压力
实现静态资源和动态资源分离
同一个域名下请求的数量是有限的,通过浏览器工具的network可看到request数量
安全问题,但主域不工作的时候,CDN可以响应请求

3、 浏览器缓存
每次请求时,不是重新去请求数据,而是从缓存中读取数据。具体参考http缓存

前端性能测试工具

pageSpeed 重点测试页面的加载速度

  • 首次内容绘制FCP(frist conntentful paint) 浏览器将第一个dom渲染到屏幕的时间,也就是通常所说的白屏时间
  • 文档加载时间DCL(domContentLoaded)

lighthouse 侧重于用户体验

  • 首次有意义的绘制FMP(frist meaningful paint) ,就是说主要内容出现在页面上的时间,用户希望看到的主要内容出现在屏幕上的时间

首屏出现后,即FCP出现后,尽快出现有意义的绘制,即尽快出现FMP
通过计算关键元素的渲染时间来测量FCP,比如测量主要css的加载完成时间,或者测量关键图片的加载完成时间等等。
如何测量呢,通过新的APT,如PerformanceObserver, PerformanceEntry可计算加载完成时间。

浏览器控制台

浏览器控制台中newtork中的disable cache 顾名思义就是不允许缓存
意思就是浏览器端,肯定去发送http请求,并且请求头中带上:
'cache-control: no-cache'; 这样一定去请求响应

通过浏览器控制台去进行性能分析的时候,经常查看的地方,主要有瀑布图(Timing),蓝线与红线(DOMContentLoaded,Load的时间)
通过查看瀑布图,可看到是在哪些地方花时间了,然后看能不能在这里进行优化
DOMContentLoaded的时间: html文档被加载和解析成DOM的时间
Load的时间: 所有资源被加载完成, 包括css,js,图片,视频,音频等

前端性能优化还可以从下载资源后,页面进行渲染性能优化

优化首屏时间

首屏时间指的是:在用户没有与浏览器交互的情况下,在浏览器上看到完整内容并且达到可以交互的状态的这一段时间。

优化css的发送过程:
如果css很大,超过15kb, 则需要通过外联加载,
如果很小,比如不到1kb, 可是直接放在head中,通过inline的方式加载进来,(可通过构建工具将css导入到head中)
这样可以加速首屏的时间。

js放在body底部的理由

都说js放在底部可以让页面尽快呈现,理由是什么呢。

渲染引擎取得内容之后,在进行渲染的时候,
1、先解析html构建dom树,同时解析css构建规则树
2、通过第一步生成的dom树和规则树构建render树
3、布局render树
4、根据布局绘制,最后显示页面

我的疑惑:
body底部的js如果没有被执行完成,DOM树能生成码?

理解: DOM树的构成是由解析器从上至下,一步一步输出的,DOM树构建的同时,浏览器还会构建呈现树。
也就是说,浏览器每解析一个节点的同时,也开始构建呈现树,只要这个节点被解析完成,就可以通过js获取这个节点。
当解析完html,dom content loaded完成。
也就是说,出现在js前面的dom节点,可以通过js获取前面的dom进行相关的操作,
也就是说js的执行不需要等DOM树全部被解析完。

也就是说DOM树完成之前需不需要等待body中的js执行完?

正常情况下,DOM树完成之前需要等待body中的js执行完,也就是说DOM content loaded完成之前,需要所有的js执行完。
除非script是defer或者是async加载的,就不会影响DOM的生成。

script标签放在body底部加载的话,为什么不会影响dom树的构建?

script标签的位置,不影响DOM content loaded的时间。
但是会影响首屏的时间。
首屏的时间就是输入url后,达到与浏览器进行交互的时间。
首屏的内容被渲染出来,便不一定是DOM content loaded已经完成。
因为渲染和DOM解析是同步进行的,首屏需要的内容的DOM被解析成功,并且首屏需要的内容的css被解析完,
到此为止的渲染树被构建,进而布局,开始绘制,首屏需要的内容被绘制完成则就是首屏的时间。

参考文献:
https://www.cnblogs.com/caizh...
https://www.html5rocks.com/zh...

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
Vue.js的图片加载性能优化你可以试试
前言图片加载优化对于一个网站性能好坏起着至关重要的作用。所以我们使用Vue来操作一波。备注以下的优化一、优化二栏目都是我自己封装在Vue的工具函数里,所以请认真看完,要不然直接复制的话,容易出错的。资源Vue.jsElementUI优化一:图片加载动画只有当图片加载完成后才可以显示图片,加载动画结束。我们使用ElementUI
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Dax Dax
3年前
前端性能优化
前端性能优化1、减少资源的请求次数和大小压缩合并js和css文件,减少http请求次数和请求资源的大小;在项目中使用webpackglup等打包编译工具2、尽量使用字体图标或者svg图标代替传统的png(jpg)图渲染更快,减少代码体积,且放大不会出现变形等3、使用图片懒加载目的是减少页面第一次加载的http请求次数,实现思路:
爱丽丝13 爱丽丝13
4年前
聊聊前端性能优化
为什么要做性能优化?性能优化有多重要?网站的性能对于用户的留存率、转化率有很大的影响,直白的说,提高网站的性能可以直接提高网站带来的收益。性能优化的分类前端的性能优化主要分为两类:1.加载时优化;2.运行时优化;例如压缩文件、使用CDN加载静态资源属于加载时优化;及时的解绑事件、减少DOM的操作属于运行时优化。吉
巴拉米 巴拉米
4年前
前端性能优化
为什么要做性能优化?性能优化有多重要?网站的性能对于用户的留存率、转化率有很大的影响,直白的说,提高网站的性能可以直接提高网站带来的收益。性能优化的分类前端的性能优化主要分为两类:1.加载时优化;2.运行时优化;例如压缩文件、使用CDN加载静态资源属于加载时优化;及时的解绑事件、减少DOM的操作属于运行时优化。吉
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
6 招教你提高网站速度
!图片1(https://image.evget.com//Content/files/2017/7/28/5174b527782a4fcca1e997eba85dfe89636368468467682067.gif)①图片优化统计数据显示,用户倾向于放弃一个在3秒内未加载完成的网页。由于加载图片占据了网页上可下载的大部分字节空间,所以
Stella981 Stella981
3年前
Cocos Creator 资源加载流程剖析【三】——Load部分
Load流程是整个资源加载管线的最后一棒,由Loader这个pipe负责(loader.js)。通过Download流程拿到内容之后,需要对内容做一些“加载”处理。使得这些内容可以在游戏中使用。这里并不是所有的资源都需要进行一个加载处理,目前只有图片、Json、Plist、Uuid(Prefab、场景)等资源才会执行加载的流程,其他的资源在Downloa
代码层面探索前端性能 | 京东云技术团队
前言最近在做性能优化,具体优化手段,网上铺天盖地,这里就不重复了。性能优化可分为以下几个维度:代码层面、构建层面、网络层面。本文主要是从代码层面探索前端性能,主要分为以下4个小节。使用CSS替代JS深度剖析JS前端算法计算机底层使用CSS替代JS这里主要从
融云IM即时通讯 融云IM即时通讯
7个月前
融云IM干货丨有没有插件能帮我优化uni-app的页面加载速度?
根据您的需求,以下是一些可以帮助优化uniapp页面加载速度的插件和方法:1.图片懒加载插件:使用图片懒加载可以显著减少首屏的加载时间。可以在页面滚动时才加载图片,减少初次加载的压力。2.代码拆分和懒加载:根据页面和功能的使用情况,将代码拆分为多个模块,并