本文从加载的角度写一下前端性能优化。

需要说明的是下面这种脑暴图是按照从第一象限和第四象限的顺序来看的。

一、加载体积优化

我们无法控制用户的网络状况,既然想加载速度快,那当然是能不加载就不加载,能少加载就少加载啦。

  • 在http1.1时代合并代码是很重要的一件事儿。

  • uglify和压缩无论什么时候都重要。gzip大家都耳熟能详,brotli有可能会有些陌生,brotli有着更高的压缩率,Chrome早已支持(浏览器支持情况可查看caniuse.com),国内的一些云存储也支持。 如果浏览器支持你会在Accept-Encoding请求头中看到br的字样。返回的是brotli压缩的消息其Content-Encoding为br。

  • 图片压缩,以及是否做有损压缩要结合业务实际情况来决定。

  • 图片懒加载,http1.1很明显,再说全加载也浪费服务器资源。基本做法是先用一个占位的图片(也可做成背景图),当滚动到可视区域时再加载图片。

  • 为不同分别率提供提供不同尺寸图片,需要图片服务器支持裁切做起来才比较爽。

  • 如果能使用css实现优先使用css实现,一般来说这样是对的,但不绝对。

  • 减少cookie传输,大部分时候图片、css、js这些资源是不需要cookie的,所以将这些资源放在一个独立的域名下会带来减少cookie传输的好处。

  • 选择合适的图片,这个请看脑暴图。webp作为新格式在各方面都有优势,但存在浏览器兼容问题。在图片服务器支持转格式的情况下可以在前端用js判断是否支持webp并将相应参数拼接到图片url上,实现同一图片url根据前端需求加载不同格式。

二、缓存优化

  • http协议层面的优化,请看脑暴图,主要是一些请求头响应头,这些头信息可控制浏览器新鲜度验证行为。

  • 工程化角度,将不容易变的资源单独打包,有助于这类资源的长期缓存。

  • Service Worker,好吧,PWA这些日子挺热的。

三、加载距离

值得说的是,这里不是物理上的距离,而是网络拓扑层面的距离。可能你和你邻居的网络距离是3000公里。

  • CDN,现在大家都在用,思考一个问题,CDN一定快吗? 答案是否定的,有可能你的宽带运营商特别坑,你在北京访问的是西藏的CDN节点,但是绝大部分是没问题的。

  • 如果你的页面是在自己公司的app内使用,那么app来帮你做预加载是很爽的,当需要打开页面的时候可以直接在本地拿到页面并打开,那会非常快。

四、加载顺序

  • 网页现在越来越庞大了,但是优先看到的一定是首屏,如果能让首屏非常快的出来其他资源慢慢加载是极好的。

  • bigpipe,这是响应优先级优化,用到了http层面的transfer-encoding: chunked,最早Facebook提出,适合的场景是页面分成很多块,每一块的数据都单独获取。为啥不用js在前端主动请求?js单线程,会阻塞住。bigpipe得提一下 @i5ting ,江湖人称狼叔,来自金刚狼,他在github上有一个项目叫做bigview,是Node.js base的bigpipe封装,非常棒。 @蒲小花 贡献了大量代码。

五、加载链路优化

主要是httpdns,我们知道dns解释是一个很繁琐的过程,可能要与远端服务器进行很多次信息交换才能拿到IP,如果其中一个环节慢都会严重影响页面打开速速。另外,如果宽带运营商的DNS服务器很坑,你就惨了,可能根本打不开页面。更惨的是被劫持了,你都不知道用户打开的是个什么鬼东西。

针对自家app接入httpdns可以做到的是一次http请求就可以拿到IP,而且可以在app侧做缓存,这样就可以将dns解析时间缩减到0,这是一个非常爽的事儿。这也是为啥我来推动app端接入httpdns的原因。

如果各浏览器端都能接入httpdns,前端又幸福了很多。抛个问题,谁能推动这事儿?

六、http1.1与http2的差异

在加载方面http2有一个多路复用,很多云存储厂商已经支持HTTP2。

在http1.1时代我们希望请求数少,而且浏览器会对同一个域名所建立的链接数有一个限制,所以我们希望把资源分散在多台机器上。

在http2时代,请求数不是问题了,但是只有同一个域名下的资源才能使用到多路复用,所以域名要适当的做收敛。附带的好处是,由于复用同一个链接,所以http慢启动的问题就一定程度上规避了。

更多HTTP/2的介绍请查看前端性能优化(三)聊聊HTTP/2带来的加载优化

小结

不当以及遗漏之处欢迎指出和交流。

前端性能优化(一)用一张图说明加载优化相关推荐

  1. queueing 优化_简单聊聊网页的资源加载优化

    移动开发中很重要的一块是资源的加载优化.移动开发由于网速低带宽,高延迟,移动设备小内存,低处理器性能的原因,因此很多时候不得不通过优化前端页面的性能来满足用户对网页加载的预期. 前段时间做了相关方面的 ...

  2. 前端性能优化的重要方案:图片懒加载

    大家好,我是前端岚枫,一枚二线城市的程序媛,今天主要跟大家分享我整理的前端性能优化的重要方案:图片懒加载,主要包括其原理,我们常用的一些插件,及编写源码实现图片懒加载功能等,图片懒加载是项目比较常见的 ...

  3. Vue 首屏加载优化(dist 打包文件从 5M+ 缩减到 324kb)

    最近在做 Vue 项目的首屏优化,效果不错,在这里将经验分享给大家,总的优化措施是以下四点. 优化方式1:将项目中用到的图片移动到百度云文件存储 优化方式2:使用路由懒加载 优化方式3:关闭 sour ...

  4. 前端性能优化学习 08 资源加载优化

    图片延迟加载 什么是延迟加载 首先来想象一个场景,当浏览一个内容丰富的网站时,比如电商的商品列表页.主流视频网站的节目列表等,由于屏幕尺寸的限制,每次只能查看到视窗中的那部分内容,而要浏览完页面所包含 ...

  5. 记前端项目首屏加载优化(网络篇)

    继之前的一篇<记前端项目首屏加载优化(打包篇)>之后,这次来讲一讲我的首屏加载在网络方面的优化?. 写在前面 资源加载是一个网站的展示在用户浏览器的必经之路,资源的请求次数和响应时间决定了 ...

  6. (七)传输加载优化(前沿技术解决高访问量网站性能优化问题)

    传输加载优化 启用压缩Gzip[必会的传输压缩方案] Gzip 安装ngnix 启用Keep Alive[通过一个参数提速连接] Keep Alive HTTP资源缓存[必会的HTTP缓存方法] 看看 ...

  7. 前端页面图片加载优化

    前端页面图片加载优化 问题:前端页面如果图片资源过多或者过大就会导致用户加载图片时间过长,导致用户体验下降 我总结的优化思路与方法有以下几种 一.将图标换成icon字体管理 如果项目存在大量的图表用的 ...

  8. 前端图片加载优化的各种技巧

    目前的前端图片加载优化技术有很多,像懒加载/预加载,img上的srcset属性以及picture标签,新的图片编码格式以及Client Hints等. Client Hints 顾名思义,client ...

  9. 响应式滚动图懒加载 element ui el-carousel 组件优化代码

    响应式滚动图懒加载 element ui  el-carousel 组件优化代码 懒加载插件vue-lazyload //main.js import VueLazyload from 'vue-la ...

最新文章

  1. CKEditor的安装与基本使用
  2. 【WPF】动态设置Binding的ConverterParameter转换器参数
  3. JSP简单练习-数组应用实例
  4. 树言树语:谁动了苹果的弦
  5. 摆脱“人肉”审核,从0搭建可视化SQL自动审核平台
  6. FLASH与E²PROM的区别
  7. android模拟用户输入
  8. 中序遍历+后序/先序遍历构建二叉树
  9. YOLO: Real-Time Object Detection 遇到的问题
  10. js图片上传预览功能
  11. 2021-04-03
  12. 协方差的计算公式例子_协方差公式_协方差的计算公式例子
  13. c语言程序设计精髓第六章编程题
  14. Xcode6的新特性、
  15. PPT 将图片的白色部分透明化
  16. 如何截取整个网页长图,福利到,整个网页长图该怎样截取
  17. MATLAB小波变换的图像融合系统[完美运行,GUI界面,详细教程,万字文稿]
  18. R(2)时间序列分析及应用之TSA安装(R语言)
  19. undefined reference to `_Unwind_Resume'
  20. 用计算机解决逻辑推理问题,逻辑推理问题解决.doc

热门文章

  1. python冰雹猜想_洛谷-P5727 【深基5.例3】冰雹猜想
  2. 钓鱼网站-现代网络“李鬼”
  3. 年底防骗提醒:微信买票 小心“李鬼”
  4. 关于Oracle-HR表的查询
  5. 【python】python获取网站源码失败,出现一堆script脚本内容
  6. 完美PDF打印:PDFPrinting.NET Crack
  7. 汇编语言笔记01_概述1(小甲鱼笔记总结)
  8. python网络爬虫权威指南 第2版 pdf微盘_python网络爬虫权威指南第2版pdf-Python网络爬虫权威指南第2版中文PDF+英文PDF+源代码下载_东坡手机下载...
  9. 获取最新的config.sub和config.guess
  10. mysql生成饼状图_ireport 5.6教程之饼图制作过程