不是正文
前端优化的重要性?
1、更好的把控项目,二次开发不反胃
工作了刚好一年,在第一家公司的时候,做项目那叫一个赶,创下了连续加班二十几天,更是晚上十点多才下班的记录。
但是以前做的项目,我愣是不想看第二遍,为什么?根本没有时间去想优化的事情,整个项目,现在想起来乱糟糟的,甚至有点反胃,可见优化是多么重要,如果你要维护,要二次开发…..除非你跳槽,但是相信你会一天被别人问候好几天。
自从现在跟了腾讯大佬unclexiao,极致探索前端优化,力求把项目做精致,利于自己对项目的把控。
2、利于面试啊,找工作啊
面试过很多次,都问会不会前端优化
面试官:说说你对优化有什么了解的。
我:emmmm,压缩?合并?减少请求?懒加载?
面试官:呵呵呵呵呵,可以可以。
这是正文
附:当然了,下面的优化建议,只是本人通过=问问人啊+搜搜资料啊+个人意见啊,憋出来的东西,有什么不对的地方,尽管骂我啊,反正也没人看到
IMG 优化
Base64
- 使用 打包工具进行 base64 转换
- 相关功能网站直接转换
使用字体
- 使用 iconfont,引入字体文件,font-family !!!!
图片懒加载
- 屏幕下方的图片暂时不请求,等到用户滑动到屏幕显示区域再请求
图片压缩
- 推荐工具 pngcrush
HTML 优化
标签 嵌套不要太深
- 减少嵌套层次,提升网页加载速度
页面总标签数尽量少
语义化标签,便于SEO
易于阅读和维护
CSS 优化
常用属性样式提取
1 |
比如 flex,font-size,color 一些简单的设置
1 | flex{ display:flex } |
有的人觉得没有必要,但是我觉得这样写很方便啊
优点
- 样式变化灵活,写页面快得一批,不用另起特殊类名写样式
- 减少了css 体积
- 易维护,不会因为页面变化,导致写很多次样式
缺点
- 增加了 html 体积,因为 一个标签可能增加了很多类名
- 显得零碎
常用组件样式提取
需要对整个项目浏览一遍,看哪些样式是一样的,提取出一个公共类,方便重用,不需要见一个写一个
比如:项目中常见的移动端的链接
1 | 最外层 .hoho-cell |
之后,就可以直接用了,完全不用再写一遍,省心省力啊喂
CSS 命名类名
命名 CSS 类名的时候,无非是两种,一种是前缀限定,一种是层级限定
前缀限定
- 例如 评论的内容,类名是 .comment-content
- 缺点是:类名会比较长,增加了 html 体积
- 优点是:样式不容易被覆盖
层级限定
- 同样是评论内容,类名变成 .comment .content
- 缺点是:
- 多人合作导致样式名容易重名(content)
- css文件比使用前缀限定要大一些,因为多了空格
CSS 属性不要拆开写
比如 border ,不要写成 border-left,border-right 。
比如 background,像我以前傻逼,就喜欢分开写成
background-repeat
background-size
background-position
的确你直接用一个 background 就可以减少很多代码量啊喂
公共样式 和 其他样式 不要都打包成一个 css 文件
因为在 打包工具中,我们习惯把整个项目的 css 打包成 一个文件
这样导致首屏加载速度变慢,加载了首页外多余的样式。
声明:个人意见啊喂
CSS去除不必要浏览器前缀
- 添加浏览器前缀,要考虑实际情况,如果是移动端,就不用添加 微软 等前缀了。
- 比如一般会用 postcss 会帮我们自动添加前缀,这时就要认真思考你项目生产环境,通过配置postcss 不配置多余的前缀
JS异步加载,包括路由,功能函数,插件 等。
JS异步加载,包括路由,功能函数,插件 等。
JavaScript 优化
JS异步加载,包括路由,功能函数,插件 等。
- 不需要一开始就加载全部文件,异步加载,减少首屏时间
减少 全局(变量,方法)的定义。
- 避免多人合作造成的变量污染
减少 DOM 的重复获取,用局部变量保存获取的 DOM。
- 访问DOM 次数越多,代码运行越慢
减少 作用域链的查找,用局部变量缓存。
- 比如如果多次用到 a.b.c ,就声明一个变量保存 var z = a.b.c, 之后就用 z 去操作
循环优化。
- 循环数组,保存数组长度 len=arr.length
- forEach 比普通循环慢 8倍 ,倒序比正序要快
避免重复判断。
- 比如在写绑定事件的兼容代码时,需要判断当前是什么浏览器,最好是判断一次之后,就保存下来,而不是每次绑定事件都重复判断
查找表 代替 多重判断 if-else。
- 设计模式中的——–状态模式
事件委托。
- 如果需要给多个子元素绑定相同事件,可以利用冒泡来给父元素绑定事件
减少重排重绘。
- 重排:元素位置,尺寸,浏览器窗口尺寸,添加删除可见DOM
- 重绘:元素颜色,背景色
Ajax 优化
尽量使用 GET 请求。
- POST 是通过一个两步的过程来实现的,先发送 HTTP 头,再发送数据
减少请求的发送。
自定义请求缓存 Cache。
- 在 JavaScript 中声明一个对象 var cache,每次请求前,先查找这个对象,是否存在这个借口的数据,(Yes)使用 cache 中的数据,(No)保存请求回来的数据
- 设计模式中的——备忘录模式
其他 优化
CDN
- 请求等待的时间,也会跟地理位置有关,离你越近,获取越快
JS,CSS文件压缩
- 使用打包工具压缩,能减少一半体积以上啊!
Gzip 服务端压缩
- 可以压缩 三分之二 的体积啊!
文章结束,给个赞玩玩,虽然好像没什么用,好了,今天就到这里,我们下期再见!!!
声明:尬图,尬排版,请看过的盆友不要介意