提升页面加载速度的方案

       性能优化是一个庞大而相对复杂的知识,如今互联网发展迅速,市场竞争激烈在这样的环境下一个网站的性能决定着一个项目的好与坏。为了降低软件项目的跳出率、提高访问速度、减少加载时间、带给用户流畅的终端体验,好的优化是必不可少的。

       如何判断页面的载入时间是合适的,通常会将浏览器缓存清空并重新加载页面,打开控制台查看页面加载时间,时间的长短做为判断的依据,主要判断标准如下:

时间范围(s)

接受程度

T < 2

2 ≤ T  4

T > 5

       优化法则万变不离其宗,就是“越少越快、越简单越快”,用最少的资源完成相同的工作。以下是从某些方面进行阐述,如何快速提升并优化网页性能。

一、图片优化

       网页加载图片是最正常不过的一件事情,图片的视觉冲击能够给用户带来更好的体感,但是图片的加载会占据大部分的网络资源,这也是导致页面加载缓慢的主要原因之一,主要从以下几个方面来进行图片优化:

1、替换原则

       不使用图片毋庸置疑是最好的解决方法,但会影响页面视觉感,为此可通过CSS效果(渐变,阴影,圆角等)来替换部分可构造图片,减少资源字节数,这样也会加快渲染时间;

2、CSS Sprites

       CSS Sprites其实就是将一些零碎的图片整合到一张图片中,再利用“background”进行背景图片的精确定位。其优点就是能够很好的减少网页的HTTP请求,降低整体图片的大小,从而提高页面的性能。因为浏览器同一时间能够加载的资源数是一定的,一般规定IE 8是6个,Chrome是6个,Firefox是8个,尽量避免同页面不加载无用的图标。相对的也存在些许缺点:做图时间长;维护麻烦;高清失真,为了适应不同的分辨率,可能要准备多个规格的图片。

 

3、Icon Font

       开源的字体库很多,现如今最常用的就是阿里巴巴图标库,阿里库可以新建项目并添加相关成员共同维护同一项目的字体图标,可以解决图片重复载入问题:

(1)、基础图标字体

       优点:矢量图标(可修改颜色、大小)、体积小(可能几百个图标才几十KB)、灵活性好、兼容性好(支持IE6)、减少HTTP请求

       缺点:渲染颜色单一

(2)、symbol引用(多色图标)

       优点:支持多色图标

       缺点:兼容性交差(支持IE9+)

4、图片格式

       图片存在很多格式,最常见的图像格式是GIF、JPEG、PNG等,每种格式都有其长处和局限性,建议使用JPEG格式,而不是GIF和PNG图像,除非图像包含Alpha因子或者是透明的。

5、矢量图和栅格图

    ( 1)、矢量图优化

       SVG是一种可缩放矢量图形,可以通过HTML绘制,通常会使用一些工具进行文件压缩,编辑器元数据、注释、隐藏元素、默认值或非最佳值以及其他可以安全地删除或转换而不会影响SVG呈现结果的内容。我们可以通过svgo将SVG压缩,可以对比一下压缩前后文件大小缩减了36.7%。

    ( 2)、优化栅格图

       栅格化图是由数1×1像素小方块构成。可以根据当前所需图片最大像素来调整图片大小,避免多余的资源浪费,通常通过有损压缩和无损压缩来处理图片。根据图片的大小就可以判断图片的大小:

尺寸

像素

文件大小

尺寸

像素

文件大小

100 * 100

10,000

39 KB

300 * 300

90,000

351 KB

200 * 200

40,000

156 KB

500 * 500

250,000

977 KB

二、CSS优化

       在项目中经常遇到的CSS重复样式过多、命名不合理、没有复用、过度嵌套等问题,伴随着项目页面越来越多,重复样式也逐渐堆积重复调用。因此,为了提高页面选渲染速率、加快页面加载速度、提高复用率、快捷维护,优化CSS代码尤其的重要:

1、渲染样式

(1)、所有样式属性值为0时,不加单位(最好的方法就是看看Pycharm右侧是否有黄条,有旧代表CSS样式不规范);

 

(2)、删除多余空样式{}

(3)、属性值为浮动小数0.**,可以省略小数点之前的0;

(4)、属性值使用缩写;

(5)、当需要单一样式时,采用单一属性;

(6)、避免层级过深的选择器嵌套

(7)、充分利用CSS继承属性,减少代码量

(8)、抽离提取公共样式,方便集体操作;减少代码量,删除无关多余样式;

(9)、属性存在浏览器前缀都要写上;

(10)、尽量避免使用position、float、transform、动画、过度效果等;

(11)、尽量避免样式行内样式和内部样式

2、选择器性能

(1)、选择器有一个固定的排序,也对应着效率的高低,对于编写高效率的CSS选择器可以参考网上列举的注意事项,这里不做列举:

参考示例:p #mydom和#mydom p虽然权重值一样,但前者效率高于后者;

(2)、避免全局使用通配符选择器;

(3)、降低选择器的权重值;

(4)、尽量使用继承样式;

(5)、尽量少的使用后代选择器;

3、加载性能

(1)、CSS压缩:通过压缩工具将CSS压缩打包,减小加载体积;

(2)、普通页面加载CSS样式,要使用连接式语法link,该操作会在页面加载时一块渲染,导入式@import则是在页面加载完成之后渲染,从而延长了部分时间;

(3)、资源提示(Resource Hints):定义HTML中Link中的rel值(dns-prefetch、preconnect、prefetch、prerender),可以帮助浏览器指定源和预处理资源来提升页面性能;

(4)、Preload:提供了预获取资源的能力,可以将获取资源的行为从资源执行中分离出来,构建自定义的资源加载与执行。

三、JS优化

1、加载资源

(1)、合并文件(GZIP压缩资源),引用文件放在也页面尾部(减少页面CSS,HTML阻塞,从而减少界面空白时间(避免浏览器解析script标签之前,不会继续渲染页面);

(2)、推迟不必要的JS加载;

(3)、去除不必要的插件引用;

2、代码编写

(1)、代码精简的时候会移除不必要的空白字符(空格,换行、制表符),这样整个文件的大小就变小了。

(2)、减少作用域链上的时间,作用域中的数量越多加载时间越长,所以要避免全局查找,减少全局变量,也要尽量避免with语句。

(3)、避免使用定时器,即使避免不了也要及时做清除操作;

(4)、在一个没有变量声明的局部变量中定义函数作用域时,在每个变量之前加let或const,以便定义当前作用域,防止查找并加速代码执行;

(5)、减少DOM操作:DOM操作应该是最耗能的一种操作;

(6)、避免使用迭代器;

(7)、多变量声明,使用一个var定义;

(8)、避免对象嵌套过深、避免在原型链中位置过深;

(9)、语法替换:例如同Map替换大量的if-else和switch会提升性能;

3、网络请求

(1) 、减少HTTP请求:过多的HTTP请求会增加CPU使用率,同时页面响应时间延长。

(2) 、减少默认请求:不需要默认加载HTTP请求改为点击操作后执行,可以默认固定的数据,不必请求后台数据;

(3) 、减少重定向和跨域请求;

4、快速响应

JS是单线程语言,浏览器值分配一个主线程来执行一个任务其他任务则需要排队等待,并且在运行脚本期间,浏览器渲染线程都是处于挂起状态。那么web worker就诞生了,web worker是运行在UI线程外执行的JS,独立于其他脚本,不会阻塞UI线程,从而不会影响页面的性能。

5、本地缓存

(1) 、临时缓存(sessionStorage):用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据;一般用于固定不变的数据存储;

(2) 、长期缓存(localStorage):用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除;一般用于长期稳定的数据;

(3) 、Cookie缓存:是浏览器提供的一种技术,通过服务器将一些数据保存在客户端,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服务器的负载,但安全性差;

6、请求缓存

(1)、Ajax请求使用缓存:

POST请求:不能在客户端缓存,每次请求都需发送给服务器进行处理,并且都会返回状态码200。(可以在服务器端对数据进行缓存,以便提高处理速度)

GET请求:可以(默认)在客户端进行缓存的,除非指定了不同的地址,否则同一个地址的AJAX请求,不会重复在服务器执行,而是返回304。

(2) 、非HTTP协议定义的缓存机制:在HTML页面的<head>节点中加入<meta>标签;

(3)、添加Expires头

初次访问页面会加载所有所需HTTP请求,但是通过使用Expires可以使其被缓存,再次访问便可以减少不必要的HTPP请求,从而提高加载速度。Web服务器通过Expires头设置客户端在指定时间内可以使用一个组件的当前副本。引入Cache-Control:max-age来指定组件被缓存时长,若同时制定Cache-Control和Expires,则max-age将覆盖Expires头。

浏览器缓存的过程:

四、VUE优化

1、vue-router

  1. 、懒加载,异步路由;
  2. 、keep-alive,用来缓存组件,避免多次加载相应的组件,减少性能消耗;

2、页面优化

  1. 、对页面vuex进行优化,减少大量重复代码重复请求;
  2. 、第三方框架按需引入;
  3. 、减少等待通过XHR获取数据的时间:在redis中添加缓存;提前发起XHR请求;
  4. 、合理使用属性v-if/v-show、循环时添加key、遵循编码规范、合理使用生命周期等;
  5. 、公用部分改为模块调用,减少代码量;
  6. 、打包优化:工程文件打包的时候不生成.map文件
  7. 、释放资源:手动将iframe的内存释放、定时器销毁等

五、DNS优化

减少DNS查询,首先要了解访问路由到页面加载这个过程中间的流程,当用户在浏览器回车瞬间浏览器会解析域名向服务器发起TCP的3次握手,建立连接后发起HTTP请求,服务器响应请求返回HTML,浏览器解析并加载HTML资源后进行页面渲染。那么在查询过程中减少不同域名的数量将减少并行下载的数量,加快网站访问速度。

六、使用CDN

如果应用程序web服务器离用户更近,那么一个HTTP请求的响应时间将缩短。另一方面,如果组件web服务器离用户更近,则多个HTTP请求的响应时间将缩短。

 CDN(内容发布网络)是一组分布在多个不同地理位置的Web服务器,用于更加有效地向用户发布内容。在优化性能时,向特定用户发布内容的服务器的选择基于对网络慕课拥堵的测量。CDN还可以进行数据备份、扩展存储能力,进行缓存,同时有助于缓和Web流量峰值压力。

CDN的缺点:

1、响应时间可能会受到其他网站流量的影响。CDN服务提供商在其所有客户之间共享Web服务器组。

2、如果CDN服务质量下降了,那么你的工作质量也将下降

3、无法直接控制组件服务器;

七、总结

总之优化是一个循序渐进的过程,不是一蹴而就的,只有通过多方面的同步优化,才能更好的提升页面加载速度,带给用户更好的体验,希望今后在优化方面做的更好!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聂曦r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值