前端性能优化主要有七种方法,包括减少请求数量、减少资源大小、优化网络连接、优化资源加载、减少重绘回流、使用性能更好的API和webpack优化

1、减少请求数量

1.1 图片处理

1.1.1 雪碧图

雪碧图是根据css sprite音译过来的,就是将很多小图标放在一张图片上就称之为雪碧图,可以减少网站http请求数量,但是当整合图片比较大的时候,一次加载比较慢,随着字体图片、svg图片的流行该技术慢慢退出了舞台

1.1.2 Base64

将图片的内容以Base64格式内嵌到HTML中,可以减少http请求数量,但是编码之后的大小比图片大了

1.1.3 使用字体图标来代替图片

1.2 减少重定向

尽量避免使用重定向,当页面发生了重定向,就会延迟整个HTML文档的传输。在HTML文档到达之前,页面中不会呈现任何东西,也没有任何组件会被下载,降低了用户体验

如果一定要使用重定向的话,如http重定向到https,要使用301永久重定向,而不是302临时重定向,因为如果使用302则每一次访问http都会重定向到https页面,而永久重定向在第一次从http重定向到https之后,每次访问http,会直接返回https的页面

1.3 使用缓存

使用cache-control或expires这类强缓存的时候,缓存不过期的情况下不会向服务器发起请求。强缓存过期的时候,会使用last-modified或etag这类协商缓存向服务器发起请求,如果资源没有变化,则服务器返回304响应,浏览器继续从本地缓存加载资源,如果资源更新了,则服务器将更新后的资源发送到浏览器,并返回200

1.4 不使用css@import

使用css@import会造成额外的请求

1.5 避免使用空的src和href

a标签设置空的href,会重定向到当前页面的地址
form设置空的method,会提交表单到当前页面的地址

2、减少资源大小

2.1 html压缩

html代码压缩就是压缩在文本文件中有意义,但是在html中不显示的字符,包括空格,制表符

2.2 css压缩

css压缩包括无效代码删除与css语义合并

2.3 js压缩与混乱

js压缩与混乱包括无效字符及注释的删除、代码语义的缩减和优化、降低代码的可读性、实现代码的保护

2.4 图片压缩

3、优化网络连接

3.1 使用CDN

CDN是内容分发网络,它能够实时地根据网络流量和各个节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上,其目的是使用户可以就近的取得所需内容,解决网络拥挤的状况,提高网站的响应速度

3.2 使用DNS预解析

当浏览器访问一个域名的时候,需要解析一次DNS,获得对应域名的ip地址,在解析过程中,按照浏览器缓存、系统缓存、路由器换算、DNS缓存、域名服务器的顺序,逐步读取缓存,直到拿到ip地址

3.3 持久连接

使用keep-alive或者persistent来建立持久连接,降低了延时和连接建立的开销

4、优化资源加载

4.1 资源加载位置

通过优化资源加载位置,更改资源加载时机,使尽可能快地展示出页面内容,尽可能快地使用功能可用
1、css文件放在head中,先外链,后本页
2、js文件放在body底部,先外连,后本页
3、处理页面、处理页面布局的js文件放在head中,如babel-polyfill.js文件、flexible.js文件
4、body中尽量不写style标签和script标签

4.2 资源加载时机

1、异步script标签
defer:异步加载,在html解析完成后执行。defer的实际效果与将代码放在body底部类似
async:异步加载,加载完成后立即执行
2、模块按需加载
在SPA等业务比较复杂的系统中,需要根据路由来加载当前页面所需要的业务模块
按需加载,是一种很好的优化网页或应用的方式。这种方式实际上是先把代码在一些逻辑断点处分离开,然后在一些代码块中完成某些操作后,立即引用另外一些新的代码块。这样加快了应用的初始加载速度,减轻了它的总体体积

webpack提供了两类技术,优先选择的方式是使用符合ECMAScript提案的import语法,第二种就是使用webpack特定的require.ensure

3、使用资源预加载preload和资源预读取prefetch
preload让浏览器提前加载指定资源,需要执行时候再执行,可以加快当前页面的加载速度
prefetch告诉浏览器加载下一个页面可能会用到的资源,可以加速下一个页面的加载速度
4、资源懒加载与资源预加载
资源延迟加载也称为资源懒加载,延迟加载资源或符合某些条件的时候才加载某些资源
资源预加载是提前加载用户所需的资源,保证良好的用户体验
资源懒加载和资源预加载都是一种错峰操作,在浏览器忙碌的时候不能操作,浏览器空闲的时候再加载资源,优化了网络性能

5、减少重绘回流

6、性能更好的API

1、用对选择器

id选择器(#myid)
类选择器(.myclassname)
标签选择器(div,h1,p)
相邻选择器(h1+p)
子选择器(ul > li)
后代选择器(li a)
通配符选择器(*)
属性选择器(a[rel=“external”])
伪类选择器(a:hover,li:nth-child)

2、使用requestAnimationFrame来替代setTimeout和setInterval
希望在每一帧开始的时候对页面进行更改,requestAnimationFrame就是告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行,使用setTimeout或者setInterval来触发更新页面的函数,该函数可能在一帧的中间或者结束的时间点上调用,进而导致该帧后面需要进行的事情没有完成,引发丢帧

3、使用IntersectionObserver来实现图片可视区域的懒加载

传统的做法中,需要使用scroll事件,并调用getBoundingClientRect方法,来实现可视区域的判断,即使使用了函数节流,也会造成页面回流。使用IntersectionObserver,则没有上述问题

7、webpack性能优化

7.1 打包公共代码

使用CommonChunkPlugin插件,将公共模块拆出来,最终合成的文件能够在最开始的时候加载一次,便存到缓存区中供后续使用,这回带来速度上的提升,因为浏览器会迅速将公共的代码从缓存中抽取出来,而不是每次访问一个页面的时候,都需要去加载一个很大的文件
webpack 4 将移除 CommonsChunkPlugin, 取而代之的是两个新的配置项 optimization.splitChunks 和 optimization.runtimeChunk
通过设置 optimization.splitChunks.chunks: “all” 来启动默认的代码分割配置项

7.2 动态导入和按需加载

webpack提供了两种技术通过模块内联函数用来分离代码,优先选择的方式是ECMAScript提案的import()语法,第二种则是使用webpack特定的require.ensure

7.3 删除无用的代码

tree shaking是一个术语,通常用于移除Javascripy上下文中的未引用代码,它依赖于ES2015模块系统中的静态结构特性,例如import和export,js的tree shaking主要通过uglifyjs来完成,css的tree shaking通过purify css来实现

7.4 长缓存优化

1、将hash替换成chunkhash,这样当chunk不变的时候,缓存依然有效
2、使用Name而不是id

每个 module.id 会基于默认的解析顺序(resolve order)进行增量。也就是说,当解析顺序发生变化,ID 也会随之改变

下面来使用两个插件解决这个问题。第一个插件是 NamedModulesPlugin,将使用模块的路径,而不是数字标识符。虽然此插件有助于在开发过程中输出结果的可读性,然而执行时间会长一些。第二个选择是使用 HashedModuleIdsPlugin,推荐用于生产环境构建

7.4 公共代码内联

使用html-webpack-inline-chunk-plugin插件将manifest.js内联到html文件中

前端性能优化的七种方法相关推荐

  1. golang string 加号连接性能慢_面试必备:浅析C#性能优化的若干种方法

    浅析C#性能优化的若干种方法 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代 ...

  2. MySQL性能优化的9种方法

    MySQL性能优化的9种方法 1.选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快.因此,在创建表的时候,为 ...

  3. Java中性能优化的35种方法汇总

    原文地址:http://www.jb51.net/article/102831.htm 前言 对程序员们来说,代码优化是一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于 ...

  4. PHP程序性能优化的50种方法

    用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的"函数& ...

  5. isc-dhcp性能优化的一种方法

    使用gprof工具,可以测出dhcp的性能瓶颈在mdb.c中的lease_enqueue函数.该函数的功能就是维护地址池内部的不同状态下的地址链表,这些链表都必须根据时间排序的.目的是每次遍历都从最老 ...

  6. 列举6个常见且实用的Web前端性能优化方法

    在如今这个信息爆炸的时代,人们的节奏总是快速的,对于一个网站的耐心毕竟是有限的可怜的,如果网站不进行优化必定会流失相当一部分的客户,带来不必要的损失.那么从Web前端的性能优化上来说有哪些常见.实用的 ...

  7. WEB前端性能优化常见方法

    web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是 ...

  8. 前端性能优化 七个方面

    前端性能优化的七大个方面 包括优化网络连接.减少请求数量. 减小资源大小.优化资源加载.减少重绘回流.使用性能更好的API和webpack构建优化 1. 优化网络连接 [使用CDN] CDN全称是Co ...

  9. 性能测试之前端性能优化(前端基础知识,前端性能测试常用工具,前端性能优化常见方法)

    目录 1. 前端基础知识 1.1 为什么要关注前端页面的性能,了解页面的加载,渲染方式和顺序? 1.2 一次页面请求会经历哪些步骤? 1.3 页面的展示过程 2. 前端性能测试的常用工具 2.1 Go ...

最新文章

  1. 虚拟机linux 8.04汉化,在虚拟机中快速安装 Ubuntu 18.04
  2. hibernate -- 分页模糊查询中setParameter 和setParameterList
  3. 用户在电商网站中购买成功了,那么 TA 在微服务中经历了什么?
  4. boost::leaf::exception用法的测试程序
  5. tablewidget 行数自适应_控制|基于自适应遗传算法的增程式电动汽车能量管理策略优化...
  6. python 实例创建
  7. 微服务主见传递ID还是json_Feign实现微服务间文件传递
  8. oracle中的hint是什么,SQL优化过程中常见Oracle中HINT的30个用法
  9. IT人士十大不良饮食习惯及改进建议
  10. 阿里开源框架Jarslink1.6.1新特性
  11. K8s高可用集群部署
  12. 数学建模计算机部分知识,数学建模计算机知识的应用
  13. ElementUI Select选择器下拉框样式修改
  14. win10中计算机是英文的,如何解决Win10启动和登陆界面语言中英文混合显示?
  15. 程序猿必看的10部黑客电影
  16. mp4转换m3u8格式php,m3u8格式怎么转换mp4 ts格式转换 - 下载的m3u8、ts如何转换成mp4...
  17. Iphone 和 Ipad 开发 区别
  18. 路由器linux+开机启动,路由器里设置FRP开机启动教程
  19. 多源传感器融合时的时间对齐或者时间同步问题
  20. jsp页面读取txt乱码

热门文章

  1. 一位老中医的养生忠告
  2. 正睿OI补题(贪心)
  3. 在深度反应离子蚀刻工具中调整蚀刻方向性
  4. 2021年,小灰都读了哪些书?
  5. 双系统开机 进入grub resource,并且进不bios
  6. 万花筒写轮眼画法_万花筒写轮眼怎么画?
  7. 如何将多个excel合并成一个
  8. hdu 3037 插板法组合 + lucas定理
  9. mac(苹果)电脑终端使用技巧
  10. linux vi 替换