web前端性能优化方案
主要优化手段有:浏览器访问优化、使用反向代理、CDN等
浏览器访问优化
减少HTTP请求
主要方式有脚本合并、图片合并、文件压缩、避免重定向、使用浏览器缓存、减少cookie传输
脚本合并
通常一个大型网站需要依赖多个JS文件。可以把多个文件合并成一个,这样只需要引用一个,只需要一次请求。使用自动化构建工具例如gulp、Grunt和 JSCompress进行自动合并。
(自动化构建工具可以用来自动编译、压缩、合并、单元测试)
图片合并
图片合并用精灵图,把多张图片合并成一张。
文件压缩
包括CSS、JavaScript、图片的压缩。
在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量。 HTML、CSS、javascript文件启用GZip压缩可达到较好的效果。
避免重定向
重定向会增加http请求数,但必要的重定向有利于提高用户体验
定义链接URL时使用最完整的、最直接的地址。如:
使用www.baidu.com而非baidu.com使用www.google.com.hk而非www.google.com使用http://write.blog.csdn.net/而非http://write.blog.csdn.net
使用浏览器缓存
CSS、javascript、logo、图标这些静态资源文件更新的频率都比较低,可以利用强缓存的方式来设定浏览器缓存,把缓存时间设置得长一些。强缓存就是利用http头中的cache-control和expires属性。
更新静态资源时,采用逐量更新的方法,比如需要更新10个图标文件,不宜把10个文件一次全部更新,而是应该一个文件一个文件逐步更新,并有一定的间隔时间,避免服务器负载骤增和网络拥堵。
协商缓存ETag/If-None-Match;Last-Modified/If-Moidfied-Since
减少cookie传输
cookie包含在每次请求和响应中,太大的cookie会严重影响数据传输,因此哪些数据需要写入cookie需要慎重考虑,尽量减少cookie中传输的数据量。
懒加载
首先只加载第一屏的图片,当用户滚动访问后面的内容时在加载相应图片。
方法:先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图),将图片的src属性值存放在一个非src的自定义属性中,判断图片进入可视区域后将路径赋值给src属性。
CSS放在页面最上部,javascript放在页面最下面
如果将 CSS放在其他地方比如 body中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到 CSS状态,用户体验比较糟糕,所以可以考虑将CSS放在head中。
浏览器在加载javascript后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此javascript最好放在页面最下面。
代码优化
JS代码优化
减少对DOM的操作
对DOM的操作代价是昂贵的,这在网页中通常是一个性能瓶颈。
减少对DOM元素的查询与修改:
查询:需多次访问的可以保存在变量中。
修改:使用innerHTML代替DOM操作。
减少重排和重绘
不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然后修改 DOM 的 className,即将多次改变样式属性的操作合并成一次操作
如果要对一个元素进行多次操作,先将元素设为
display: none
(需要1次重排和重绘),然后对这个节点进行100次操作,最后再恢复显示(需要1次重排和重绘)。这样一来,你就用两次重新渲染,取代了可能高达100次的重新渲染。脱离文档流的元素重排开销较小【如:position为absolute或fixed,float元素】,因为对文档流中元素无影响;
慎用with。使用 with相当于增加了作用域链长度。查找作用域链是要消耗时间的,过长的作用域链会导致查找性能下降。
慎用eval和Function。每次 eval 或 Function 构造函数作用于字符串表示的源代码时,脚本引擎都需要将源代码转换成可执行代码。这是很消耗资源的操作。通常比简单的函数调用慢 100倍以上。
减少作用域链查找。如果在循环中需要访问非本作用域下的变量时请在遍历之前用局部变量缓存该变量,并在遍历结束后再重写那个变量。
CSS代码优化
不要用CSS通配符 *,
CSS选择器层叠不要超过三层
关键选择器(key selector)。选择器的最右边的部分为关键选择器(即用来匹配目标元素的部分);如果规则拥有 ID 选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了);
提取项目的通用公有样式,增强可复用性,按模块编写组件;增强项目的协同开发性、可维护性和可扩展性;
使用预处理工具例如Less/Sass或自动化构建工具(gulp对css进行语法检查、自动补前缀、打包压缩、自动优雅降级);
CDN加速
CDN(content distribute network,内容分发网络)的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获取数据。
(通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上,让用户可就近取得所需内容。)
反向代理
传统代理服务器位于浏览器一侧,代理浏览器将http请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站web服务器接收http请求。
当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻web服务器负载压力。
参考资源:
https://www.2cto.com/kf/201604/498725.html
https://blog.csdn.net/Vivian_jay/article/details/58308434?locationNum=11&fps=1
web前端性能优化方案相关推荐
- Web前端性能优化思路
本文旨在整理常见Web前端性能优化的思路,可供前端开发参考.因为力求精简,限于篇幅,所以并未详述具体实施方案. 基于现代Web前端框架的应用,其原理是通过浏览器向服务器发送网络请求,获取必要的inde ...
- Web 前端性能优化
网页制作poluoluo文章简介:Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多网站无情忽视的技术. Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多 ...
- 大型网站技术架构(3):WEB 前端性能优化
上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应用服务器 ...
- WEB前端性能优化小结
1. 请减少HTTP请求 基本原理: 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出. 一个正常HTTP请求的流程简述:如在浏览器中输 ...
- 列举6个常见且实用的Web前端性能优化方法
在如今这个信息爆炸的时代,人们的节奏总是快速的,对于一个网站的耐心毕竟是有限的可怜的,如果网站不进行优化必定会流失相当一部分的客户,带来不必要的损失.那么从Web前端的性能优化上来说有哪些常见.实用的 ...
- WEB前端性能优化常见方法
web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是 ...
- (2020.12.7)初次web前端性能优化记录
(转载公司内部论坛本人文章2020.12.7) 导语: 作为客户端开发,由于项目的需要,最近一年陆续做了很多web前端的需求开发.但过去做的大部分都是单页面的运营H5,上线时间短,一般保证能稳定运行就 ...
- web前端性能优化与SEO
web前端性能优化与SEO 网站优化的必要性 浏览器的页面优化 使用浏览器缓存 css Sprites 压缩 css与js文件的位置 减少cookie运输 javascript代码优化 数据访问 字符 ...
- 【JavaWeb】Web前端性能优化
本文目录 一. 浏览器访问优化 1.1 减少http请求 1.2 使用浏览器缓存 1.3 启用压缩 1.4 CSS放在页面最上面. JavaScript 放在页面最下面 1.5 减少Cookie传输 ...
- 深度讲解:web前端性能优化
一.课程简介: 1.课程大纲 涉及到的分类 网络层面 构建层面 浏览器渲染层面 服务端层面 涉及到的功能点 资源的合并与压缩 图片编解码原理和类型选择 浏览器渲染机制 懒加载预加载 浏览器存储 缓存机 ...
最新文章
- 比特币现金受到美国和欧洲市场的欢迎
- SQLServer中ISNULL、NULLIF和CONVERT函数
- 基于线性表邻接矩阵结构的图的深度/广度优先搜索算法
- HDU 1153 magic bitstrings(读题+)
- python 绘制围棋棋盘_围棋之规则基础(一)
- ckeditor java 上传_java使用CKEditor实现图片上传功能
- click事件的累加绑定
- Python之HTML的解析(网页抓取一)
- 复练-软考高级-论文写作专题
- 95-910-140-源码-FlinkSQL-FlinkSQL简介
- WCF同步到异步转换
- UniqueIdentifier 数据类型
- 黄聪:sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”...
- Win10家庭版禁用系统更新方法汇总及问题解决
- 计算机专业期末试卷分析,计算机期末试卷分析
- 判断一个数是否为素数
- 【知乎问答】有哪些特殊的搜索引擎?
- 纪一次笔试之行—燃烧的远征
- 浅谈css样式及选择器
- Unity 用什么IDE比较好?