前端面试必答题:页面性能优化指南

综合技术 2018-03-13

前端页面的性能关乎用户体验,其重要性不言而喻。如果开发者千辛万苦制作的页面因为性能的原因不能很好的展示给用户,那之前的工作就没有了价值。前端性能优化的技巧是每一个前端开发者都必须掌握的基本技能。

前端性能优化的技巧很多文章都有提及,我结合自己实际经验和思考,和大家分享一些不同的优化思路。

优化方向1:减少HTTP请求的次数

HTTP请求占据页面加载时间的大部分,减少请求的次数能明显的减少页面加载时间,提升使用体验。为什么HTTP请求耗时呢?

一个HTTP请求的过程可以分为以下步骤:

域名解析 --> 3次握手建立TCP连接 --> 后发起http请求 --> 服务器响应http请求

1b3e5f2983ffe1fcaea8d29fc5c4b427

虽然HTTP请求的效率很高,时间很短。但是如果请求的次数过多,请求的数据过大,请求耗时就非常严重。这种情况如下有经验的同学相信都深有体会。那么从哪些方面来减少HTTP请求的次数呢?

(1)合并 js/css 文件

多个js/css文件可以整合到一起,合并的时候也要同时考虑文件体积大小的问题。将请求的数量减少到合理的范围。

(2)批量获取/传输数据

数据的获取和发送经常容易导致性能问题。有很多程序员在本机调试的时候一切正常,一上线就卡的不行。就是没有考虑到批操作的问题,本地的测试环境数据量小,网络传输快,即使循环发送请求也能很快响应,但是线上环境就不是这么回事了。

对于批量操作要把需要的数据一起获取或者发送,后台也一定要提供批量操作的接口。对于实时处理的情况,比如输入框实时搜索(后台搜索),可以等用户全部输入完再请求搜索结果,或者设置延迟debounce。

(3)使用缓存

将脚本,图片等资源缓存在客户端,不必每次都从服务器获取。这样也能减少请求的次数。方法可以是设置过期时间实现。

(4)按需加载/懒加载

前端页面的性能关乎用户体验,其重要性不言而喻。如果开发者千辛万苦制作的页面因为性能的原因不能很好的展示给用户,那之前的工作就没有了价值。前端性能优化的技巧是每一个前端开发者都必须掌握的基本技能。

前端性能优化的技巧很多文章都有提及,我结合自己实际经验和思考,和大家分享一些不同的优化思路。

优化方向1:减少HTTP请求的次数

HTTP请求占据页面加载时间的大部分,减少请求的次数能明显的减少页面加载时间,提升使用体验。为什么HTTP请求耗时呢?

一个HTTP请求的过程可以分为以下步骤:

域名解析 --> 3次握手建立TCP连接 --> 后发起http请求 --> 服务器响应http请求

8a550b74098b9a834fd7a66f3ada19ae

虽然HTTP请求的效率很高,时间很短。但是如果请求的次数过多,请求的数据过大,请求耗时就非常严重。这种情况如下有经验的同学相信都深有体会。那么从哪些方面来减少HTTP请求的次数呢?

(1)合并 js/css 文件

多个js/css文件可以整合到一起,合并的时候也要同时考虑文件体积大小的问题。将请求的数量减少到合理的范围。

(2)批量获取/传输数据

数据的获取和发送经常容易导致性能问题。有很多程序员在本机调试的时候一切正常,一上线就卡的不行。就是没有考虑到批操作的问题,本地的测试环境数据量小,网络传输快,即使循环发送请求也能很快响应,但是线上环境就不是这么回事了。

对于批量操作要把需要的数据一起获取或者发送,后台也一定要提供批量操作的接口。对于实时处理的情况,比如输入框实时搜索(后台搜索),可以等用户全部输入完再请求搜索结果,或者设置延迟debounce。

(3)使用缓存

将脚本,图片等资源缓存在客户端,不必每次都从服务器获取。这样也能减少请求的次数。方法可以是设置过期时间实现。

(4)按需加载/懒加载

只加载当前页面所需要的资源,用户使用了什么功能,访问了什么页面,再去加载相关的资源。这样既能提升页面速度,也能节省流量费用。

优化方向2:缩小HTTP请求数据的体积

如果把网络比作高速公路的话,HTTP请求就好比开在路上的汽车。我们减少HTTP请求次数就如同减少了路上的汽车,这样路上就能开更多车。但是除了减少汽车的数量,我们还可以缩小汽车的体积。让大货车变成奔驰smart,这样也能让公路上跑更多的汽车。

(1)压缩 js/css /image文件

这种方式应该是最基本的,相信现在没有压缩过的js/css/image应该都不会让上线。压缩的办法十分的有效,压缩js不仅能减少文件大小,还能混淆代码,提升代码的安全性。

(2)web服务器设置支持gzip压缩

gzip被浏览器广泛的支持,而且会自动查找缓存。

优化方向3:缩小DOM操作

每次对元素的操作一般都会引起页面的重绘或者重排,这会极大的影响页面的性能。如果你使用的是React或者Vue之类的框架,对DOM操作引发的性能问题就可少一些。因为这二者的虚拟DOM和Diff算法很强大,批量且高效的执行DOM操作。

如果你使用jQuery等直接操作元素,建议还是优化一下逻辑,避免或者减少大量的DOM操作。

优化方向4:使用CDN

可以将基础的,常用的文件放置在CDN服务器上。借助CDN运营商的网络加快文件的加载,从而提高页面性能。这里需要考虑一下文件的数量和大小,因为CDN是按照流量收费的。

如果一个开发者做出页面的性能很差,相信他涨薪的速度和页面加载的速度一样慢。今天先和大家介绍这些,其他一些简单的技巧比如CSS放在js的上面之类的相信订阅专栏的用户都了解了,我这里就不做赘述浪费大家时间了。

感谢每一位订阅专栏的朋友,我保证持续产出高质量的文章,不辜负你们的期望~

前端页面的性能关乎用户体验,其重要性不言而喻。如果开发者千辛万苦制作的页面因为性能的原因不能很好的展示给用户,那之前的工作就没有了价值。前端性能优化的技巧是每一个前端开发者都必须掌握的基本技能。

前端性能优化的技巧很多文章都有提及,我结合自己实际经验和思考,和大家分享一些不同的优化思路。

优化方向1:减少HTTP请求的次数

HTTP请求占据页面加载时间的大部分,减少请求的次数能明显的减少页面加载时间,提升使用体验。为什么HTTP请求耗时呢?

一个HTTP请求的过程可以分为以下步骤:

域名解析 --> 3次握手建立TCP连接 --> 后发起http请求 --> 服务器响应http请求

598730101d56a4c68457975ba3b3e5e8

虽然HTTP请求的效率很高,时间很短。但是如果请求的次数过多,请求的数据过大,请求耗时就非常严重。这种情况如下有经验的同学相信都深有体会。那么从哪些方面来减少HTTP请求的次数呢?

(1)合并 js/css 文件

多个js/css文件可以整合到一起,合并的时候也要同时考虑文件体积大小的问题。将请求的数量减少到合理的范围。

(2)批量获取/传输数据

数据的获取和发送经常容易导致性能问题。有很多程序员在本机调试的时候一切正常,一上线就卡的不行。就是没有考虑到批操作的问题,本地的测试环境数据量小,网络传输快,即使循环发送请求也能很快响应,但是线上环境就不是这么回事了。

对于批量操作要把需要的数据一起获取或者发送,后台也一定要提供批量操作的接口。对于实时处理的情况,比如输入框实时搜索(后台搜索),可以等用户全部输入完再请求搜索结果,或者设置延迟debounce。

(3)使用缓存

将脚本,图片等资源缓存在客户端,不必每次都从服务器获取。这样也能减少请求的次数。方法可以是设置过期时间实现。

(4)按需加载/懒加载

只加载当前页面所需要的资源,用户使用了什么功能,访问了什么页面,再去加载相关的资源。这样既能提升页面速度,也能节省流量费用。

优化方向2:缩小HTTP请求数据的体积

如果把网络比作高速公路的话,HTTP请求就好比开在路上的汽车。我们减少HTTP请求次数就如同减少了路上的汽车,这样路上就能开更多车。但是除了减少汽车的数量,我们还可以缩小汽车的体积。让大货车变成奔驰smart,这样也能让公路上跑更多的汽车。

(1)压缩 js/css /image文件

这种方式应该是最基本的,相信现在没有压缩过的js/css/image应该都不会让上线。压缩的办法十分的有效,压缩js不仅能减少文件大小,还能混淆代码,提升代码的安全性。

(2)web服务器设置支持gzip压缩

gzip被浏览器广泛的支持,而且会自动查找缓存。

优化方向3:缩小DOM操作

每次对元素的操作一般都会引起页面的重绘或者重排,这会极大的影响页面的性能。如果你使用的是React或者Vue之类的框架,对DOM操作引发的性能问题就可少一些。因为这二者的虚拟DOM和Diff算法很强大,批量且高效的执行DOM操作。

如果你使用jQuery等直接操作元素,建议还是优化一下逻辑,避免或者减少大量的DOM操作。

优化方向4:使用CDN

可以将基础的,常用的文件放置在CDN服务器上。借助CDN运营商的网络加快文件的加载,从而提高页面性能。这里需要考虑一下文件的数量和大小,因为CDN是按照流量收费的。

如果一个开发者做出页面的性能很差,相信他涨薪的速度和页面加载的速度一样慢。今天先和大家介绍这些,其他一些简单的技巧比如CSS放在js的上面之类的相信订阅专栏的用户都了解了,我这里就不做赘述浪费大家时间了。

感谢每一位订阅专栏的朋友,我保证持续产出高质量的文章,不辜负你们的期望~

您可能感兴趣的

十分钟读懂浏览器渲染流程 在之前写过的一篇 《"天龙八步"细说浏览器输入URL后发生了什么》 一文中,和大家分享了从在浏览器中输入网址URL到最终页面展示的整个过程。部分读者向我反馈对于最后的浏览器渲染布局这块不是很清晰,所以本文就浏览器渲染流程单独开篇讲解,希望大家都能有新的收获。 浏览器主要组件结构 ...
html-css初探 题外话 前端开发接触最多的就是浏览器,那么主流的浏览器都有哪些呢? 有人可能会说搜狐、百度、UC这些比较常见的浏览器,但是主流浏览器的评判标准不仅仅是市场占有率,还要有自己独立的内核,以上这些都没有。 一个浏览器最重要的是两个东西,一个是shell,浏览器外壳,这个基本都能写,重点就是内...
WEB 前端菜鸟,感觉很迷茫,该怎么做?... 前几天看到这样的问题 先说问题吧:感觉前端涉及到的东西太多了,自己也很浮躁,看了挺多书,可是代码缺敲得却不多。技术菜,又什么都想学,比如现在纠结要不要先学scss或者php或者angularjs,backbone等框架,还是深入学习html5+css3? 然后看了一些招聘要求发现又有一些坑要...
Supercharge Your Site With a CDN As a web designer, you already know that great design is essential for a website—it’s the concept of design you trust, unless a website looks absol...
CSS 行高 line-height 属性,可以用在块级元素上,顾名思义,就是 每一行的高度 。 line-height 属性可以使用下面的单位: px em % ...