前端优化之渲染层面分析

前端性能优化这一块一直在项目中多多少少的在使用,但是知识点都太碎了,加上面试的出现率炒鸡高,所以来一波整理。
前端优化的话主要分为页面渲染,css优化,js优化,图片,网络请求几类。 这篇就对除了网络请求之外的优化分析一波。

页面渲染

1. 把CSS资源引用放在HTML文件顶部

这样浏览器可以优先加载css,但是里面又可以细节的分化一下,包括之前的mvc开发经常会吧所有的css放到一个模板里面直接加载,或者前端的书写习惯也喜欢link这边直接复制粘贴一把梭。都会导致一些无用资源优先加载而导致页面的渲染时间增长。可以通过以下代码的应用实现css的异步加载,或者通过js的动态添加link元素也是可以的。

//两种都可以实现
<link rel="stylesheet" href="css.css" media="none" onload="if(media!='all')media='all'">
<link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'">
//考虑兼容
<noscript><link rel="stylesheet" href="css.css"></noscript>

2. 把JavaScript文件引用放在HTML文件底部

因为javascript默认是同步加载,会导致阻塞页面渲染。也可以使用动态添加或者使用HTML5新增的属性, defer和anysc

//会在加载完毕之后就随之执行。
<scrtpt src='js.js' defer></script>
//加载完毕之后不会执行,是在onload之前执行
<scrtpt src='js.js' async></script>

3. 避免各种情况导致的重排(reflow)重绘(redraw)

页面的重排重绘很消耗性能,所以一定尽可能减少页面的重排重绘。

重绘

当盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,将内容呈现在页面上。
重绘是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。

触发重绘的条件:改变元素外观属性。如:color,background-color等。

重排

当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建, 这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候。

触发重排的条件:任何页面布局和几何属性的改变都会触发重排,比如:
  1、页面渲染初始化;(无法避免)
  2、添加或删除可见的DOM元素;
  3、元素位置的改变,或者使用动画;
  4、元素尺寸的改变——大小,外边距,边框;
  5、浏览器窗口尺寸的变化(resize事件发生时;
  6、填充内容的改变,比如文本的改变或图片大小改变而引起的计算值宽度和高度的改变;
  7、读取某些元素属性:(offsetLeft/Top/Height/Width, clientTop/Left/Width/Height, scrollTop/Left/Width/Height, width/height, getComputedStyle(), currentStyle(IE))
重绘和重排的关系:在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘。
所以,重排必定会引发重绘,但重绘不一定会引发重排。
优化点
1.浏览器自己的优化:浏览器会自己维护一个队列,把所有引起重排,重绘的操作放在这个队列,等队列中的操作到了一定数量或者一定时间,就会进行一个批处理。把多次的重绘重排变成一次重绘重排。
2.操作的优化:
(1)直接修改元素的className
(2)先设置元素为display:none,然后对布局进行操作。设置完之后再将元素设置为display:block。
(3)将需要多次重排的元素,position设置为absolute,元素脱离了文档流,变化不会影响到其他元素。
(4)多个DOM节点创建,简化成一次创建。原生的话就是DocumentFragment,jq就是字符串多次拼接之后直接append()或者html()。

4.减少DOM元素的数量和深度

HTML中标签元素越多,标签的层级越深,浏览器解析DOM并绘制到浏览器中花的时间就越长

5.尽量避免使用table、iframe等慢元素

table及其内部元素可能需要多次计算才能确定好其在渲染树中节点的属性值,比同等元素要多花两倍时间
iframe内资源的下载进程会阻塞父页面静态资源的下载以及HTML DOM的解析

6. 压缩html

将HTML代码压缩,将注释、空格和新行从生产文件中删除。
将link和script中的type属性删除掉,因为html5把text/css、text/javascript作为默认值。

CSS优化

1.压缩和合并

使用gulp,或者webpack进行压缩,从生产文件中删除注释,空格和空行。合并之后可以减少http请求。

2.className的长度 和 深度

尽量去减少className的长度和深度 可以提高加载速度。

JS优化

1.压缩

2.尽量的使用ID选择器

选择页面DOM元素时尽量使用id选择器,因为id选择器速度最快

3.合理的缓存dom对象

对于要重复使用的dom对象,要优先设置缓存变量,避免每次使用时都要从整个dom树重新查找。

4.页面元素尽量使用事件代理,避免事件直接绑定

使用事件代理可以避免对每个元素都进行绑定,并且可以避免出现内存泄漏以及需要动态添加元素的事件绑定问题

图片优化

1.压缩

在压缩后的图片符合产品要求下将图像进行优化。

2.base64 和 雪碧图

3.懒加载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,192评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,186评论 1 303
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,844评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,471评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,876评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,891评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,068评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,791评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,539评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,772评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,250评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,577评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,244评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,146评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,949评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,995评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,812评论 2 276

推荐阅读更多精彩内容