前端性能优化建议


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 相关文章推荐
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 Javascript
js解析json读取List中的实体对象示例
Mar 11 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
Mar 10 Javascript
微信小程序 scroll-view实现锚点滑动的示例
Dec 06 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
小程序实现左右来回滚动字幕效果
Dec 28 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 Javascript
详解jenkins自动化部署vue
May 14 Javascript
js中Map和Set的用法及区别实例详解
Feb 15 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
Prototype Selector对象学习
2009/07/23 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python实现的各种排序算法代码
2013/03/04 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python找出9个连续的空闲端口
2016/02/01 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
pygame实现打字游戏
2021/02/19 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
为什么需要版本控制
2016/10/28 面试题
药品质量检测应届生求职信
2013/11/14 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
小学生环保倡议书
2014/05/15 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
父亲去世追悼词
2015/06/23 职场文书
关于国庆节的广播稿
2015/08/19 职场文书