性能优化

作为前端工程师,性能优化这个话题,老生常谈,是一个不会过时的话题,无论我们在工作中还是面试中会经常遇到它。随着移动互联网的快速发展,用户体验变得越发重要,接下来我将结合自己工作中的实践,简单记录一下关于性能优化可以做的事情。

一、在设计上减少HTTP请求

一个网站的用户体验,浏览器跟服务器的http请求时间占到80%以上。如果我们在跟后台对接的时候,在实现需求的前提下,减少接口数量即可大大提升用户体验。

二、HTTP请求环节上

1.网络传输性能优化

贴上如下这张经典图,介绍了浏览器跟服务器通讯过程:

如上图我们可以看出,浏览器在得到用户请求之后,经历了下面这些阶段:重定向→拉取缓存→DNS查询→建立TCP链接→发起请求→接收响应→处理HTML元素→元素加载完成,我们做优化其实就是对这些环节做相应处理。

1.1 浏览器缓存

浏览器在向服务器发起请求前,会先查询本地是否有相同的文件,如果有,就会直接拉取本地缓存,我们先看看浏览器处理缓存的策略:

浏览器默认的缓存是放在内存内的,内存里的缓存会因为进程的结束或者说浏览器的关闭而被清除,而存在硬盘里的缓存才能够被长期保留下去。在服务器上设置的Etag字段,在浏览器接收到服务器响应后,会检测响应头部(Header),如果有Etag字段,那么浏览器就会将本次缓存写入硬盘中。

在我们配置缓存时一定要切记,浏览器在处理用户请求时,如果命中强缓存,浏览器会直接拉取本地缓存,不会与服务器发生任何通信,也就是说,如果我们在服务器端更新了文件,并不会被浏览器得知,就无法替换失效的缓存。所以我们在打包阶段,可以借助webpack在打包后的文件名后面加上 hash值,避免资源更新而引起的前后端文件无法同步的问题。

1.2 开启 Gzip 传输

针对一些接口开启Gzip传输压缩,它能将我们的文本类文件体积再压缩,效果立竿见影,但不要对图片文件进行Gzip压缩,会有反效果,图片进行压缩后会占用后台大量资源。

1.3 webpack配置优化

前面所作的浏览器缓存工作,只有在用户第二次访问我们的页面才能起到效果,如果要在用户首次打开页面就实现优良的性能,必须对资源进行优化。

目前webpack是前端最火的自动化工程构建工具,我目前所作项目的工程化都是基于webpack,接下来我将结合webpack的配置,说一下对资源的优化,目前这个webpack的版本是3.12.0。

uglifyJsPlugin 用来对js文件进行压缩,从而减小js文件的大小,加速load速度:

HTML压缩:

提取css样式,并压缩:

结合 Vue 的异步组件和 Webpack 的代码分割功能,轻松实现路由组件的懒加载:

1.4 图片资源优化

webpack资源打包压缩只是在代码层面,而在我们实际开发中,图片的加载占用了大量的网络资源,对图片进行优化,会有良好的效果。

雪碧图:

把多张图片放在一起,减少了网络请求,同时相对于每张单独图片加起来的体积更小,可以通过 css 属性 background-position 对需要的图片进行定位 。

字体图标:

图片可以做的很多事情,矢量图也可以做,而且它只是往HTML里插入字符和CSS样式而已,和图片请求比起来资源占用完全不在一个数量级,如果你的项目里有小图标,可以用矢量图。

图片懒加载(延迟加载):

  目的为了,减少页面第一次加载过程中http的请求次数。

  具体步骤:

    1、页面开始加载时不去发送http请求,而是放置一张占位图

    2、当页面加载完时,并且图片在可视区域再去请求加载图片信息

1.5 使用CDN

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求,大大提升网络传输速度。

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

推荐阅读更多精彩内容

  • 1、尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容,这部分时间包括下载页面中的图像、样式...
    兔子不打地鼠打代码阅读 518评论 0 1
  • 相关概念 阻塞渲染 JS下载、执行时肯定会阻塞渲染例如下图中代码,对于浏览器,接收到html文档后,解析到a.js...
    LouisJ阅读 1,037评论 0 32
  • 从雅虎军规看前端性能优化 本文大部分内容翻译自雅虎前端的性能优化,如何让页面加载更快,雅虎给出了多个规则,原文地址...
    cce117b0a0ce阅读 900评论 0 3
  • 前端性能优化资料整理 页面性能差的直接后果是用户需要等待,而等待,尤其是不确定要多长时间的等待会给用户带来焦虑,为...
    飘零之雪阅读 781评论 2 3
  • 渔夫从海里打捞起一个魔瓶,解开封印放出了魔鬼,魔鬼对渔夫说:在第一个300年里解救我的人,我将送给他贵重的财富;在...
    81fccb800fe2阅读 184评论 0 7