前端性能优化建议


Posted in Javascript onSeptember 17, 2020

前言:

一说到性能优化,大家都不约而同的想起了雅虎的军规,2-5-8原则,3秒的首屏准则等等,这些规则在开发中虽然不是强制要求的,但是为了追求页面性能的完美体验,就不得不对代码进行修改和优化。

下面就与大家一同分享一下我了解的一些性能优化指标:

一.加载优化

1. 减少HTTP请求:尽量减少向服务器发送的请求数,节省网络资源,所有静态资源都要放在服务器端并设置缓存,并且要尽量使用长缓存。

2. 压缩代码:减少资源大小可加快网页的显示速度,对代码进行压缩,并在服务器开启Gzip

3. 无阻塞:头部内联的样式和脚本会阻塞页面的渲染,样式放在头部使用link引入,脚本放在尾部并使用异步方式加载。

4. 首屏加载:首屏快速显示可大大的提升用户对页面速度的感知,应尽量针对首屏的快速显示做出相应的优化。

5. 按需加载:将不影响首屏的资源和当前屏幕不使用的资源放到用户需要时才加载,可大幅度提升显示速度和降低总体流量。但是按需加载会导致大量重绘,影响渲染性能。

6. 预加载:大型资源页面可使用Loading,资源加载完成后再显示页面,但是加载时间过长,会造成负体验。

7. 压缩图像:使用图像时选择最合适的格式和大小,然后使用工具压缩,同时在代码中进行图片懒加载。

8. 减少Cookie:Cookie会影响加载速度,所以尽量减少不必要的Cookie。

9. 异步加载第三方资源:第三方资源不可控,会影响页面加载,所以要异步加载第三方资源。

二.执行优化

1.css写在头部,js写在尾部并异步。

2.避免img、iframe等标签的src属性为空:空src会重新加载当前页面,影响速度和效率。

3.尽量避免重置图像大小:多次重置图像大小会引发图像的多次重绘,影响性能。

4.图像尽量避免使用DataURL:DataURL图像没有使用图像压缩算法,文件会变大,并且要解码后再渲染,加载慢耗时长。

三.渲染优化

1.设置Viewport:HTML的viewport可加快页面的渲染。

2.减少DOM结点:DOM结点太多会影响页面的渲染。

3.尽量使用css3动画,合理使用requestAnimationFrame动画代替setTimeout。

4.优化高频事件:scroll、touchmove等事件尽量使用函数防抖节流等进行限制。

四.样式优化

1.避免在HTMl中书写style。

2.避免css表达式:css表达式的执行需要跳出css树的渲染。

3.移除css空规则:css空规则增加了css文件的大小。

4.正确使用display:display会影响页面的渲染。

5.不滥用float:float在渲染时计算量较大,尽量减少使用。

6.不滥用WEB字体:WEB字体需要下载、解析、重绘当前页面,尽量减少使用。

五.脚本优化

1.尽量减少回流和重绘。

2.缓存DOM选择与计算:每次DOM选择都要计算和缓存。

3.缓存.length的值:每次.length计算使用一个变量保存值。

4.尽量使用事件代理:避免批量绑定事件。

5.尽量使用id选择器:id选择器选择元素是最快的。

2-5-8原则

在前端开发中,此规则作为一种开发指导思路,针对浏览器页面的性能优化。

o 用户在2秒内得到响应,会感觉页面的响应速度很快 Fast

o 用户在2~5秒间得到响应,会感觉页面的响应速度还行 Medium

o 用户在5~8秒间得到响应,会感觉页面的响应速度很慢,但还可以接受 Slow

o 用户在8秒后仍然无法得到响应,会感觉页面的响应速度垃圾死了(「此时会有以下四种可能」)

§ 难道是网速不好,发起第二次请求 => 刷新页面

§ 什么垃圾页面呀,怎么还不打开 => 离开页面,有可能转投竞争对手的网站

§ 垃圾程序猿,做的是什么页面啊 => 咒骂开发此页面的程序猿

§ 断网了 => 网线断了?Wi-Fi断了?信号不好?话费用完了?

Ok完事儿,这就是本小白总结的一点点小经验啦~

以上就是前端性能优化建议的详细内容,更多关于前端性能优化的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
jQuery 遍历函数详解
Jul 05 Javascript
javascript实现动态导入js与css等静态资源文件的方法
Jul 25 Javascript
JavaScript基础知识及常用方法总结
Jan 10 Javascript
AngularJS使用ng-options指令实现下拉框
Aug 23 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
jQuery实现一个简单的验证码功能
Jun 26 jQuery
async/await地狱该如何避免详解
May 10 Javascript
Vue验证码60秒倒计时功能简单实例代码
Jun 22 Javascript
微信小程序实现左侧滑动导航栏
Apr 08 Javascript
jQuery实现轮播图效果
Nov 26 jQuery
JavaScript ES6 Class类实现原理详解
May 08 Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 #Javascript
JavaScript中如何调用Java方法
Sep 16 #Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 #Javascript
Vue父子组件传值的一些坑
Sep 16 #Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 #Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 #Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 #Javascript
You might like
PHP Token(令牌)设计
2008/03/15 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
《PHP编程最快明白》第三讲:php数组
2010/11/01 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
利用javascript查看html源文件
2006/11/08 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python中threading开启关闭线程操作
2020/05/02 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
业务部经理岗位职责
2014/01/04 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
一级电子管军用接收机测评
2022/04/05 无线电