目录

一:资源的压缩与合并

1.1.为什么要压缩&合并

1.2.HTML压缩:

1.3.CSS压缩:

1.4.JS 压缩与混淆:

1.5.CSS JS 文件合并:

二:图片格式优化

2.1.JPEG/JPG:

2.2.PNG:

2.3.WebP:

三:图片加载优化

3.1.图片的懒加载(lazy loading)

3.2.渐进式图片

3.3.响应式图片

四:字体优化

4.1.什么是 FOIT 和 FOUT

4.2.使用 font-display

4.3.使用 Ajax + Base64


一:资源的压缩与合并

1.1.为什么要压缩&合并

  • 减少 HTTP 请求数量

请求的越多,所造成的网络开销就越大

  • 减少请求资源大小

资源越小,加载的就越快,再去进行资源的解析和渲染就越快

资源优化不是吧所有的技术都用上,要根据实际情况选择适合自己的优化策略

1.2.HTML压缩:

  • 使用在线工具进行压缩

  • 使用 html-minifier 等 npm 工具

html-minifier-terser 以html-minifier为例,我们可以看到压缩后的HTML文件可节约30%

1.3.CSS压缩:

  • 使用在线工具进行压缩
  • 使用 clean-css 等 npm 工具

PS:html-minifier已经集成了clean-css,不用单独去使用

1.4.JS 压缩与混淆:

  • 使用在线工具进行压缩
  • 使用 Webpack 对 JS 在构建时压缩

1.5.CSS JS 文件合并:

比如有 20 个 CSS,合并成一个 CSS 可能会比 20 个分别加载要快,因为每个资源请求都要经历不同的阶段:进行 DNS 查找、TCP 链接建立等(这两个可以复用),TTFB 这个没办法避免,20 个肯定会比 1 个稍微大写,缺点是合并的话维护带来麻烦

基于以上内容,所以我们要对不同问题进行分别处理:

1.若干小文件。比如有 20 个 CSS,每个才几K,这样可以考虑将它们都合成一个

2.对JS而言,合并完不会造成冲突,且都服务相同的模块,那可以进行合并来优化。如果只是单纯的去进行网络的加载优化,这是不可行的,因为这可能会造成长时间白屏问题,我们更关心的在于用户的体验问题。(目前对JS文件的拆分相对还是更多一些)

二:图片格式优化

先来看一下图片优化的几种方式

图片格式比较

2.1.JPEG/JPG:

下面两个是能将JPEG/JPG图像进行压缩以及在线压缩的网站

imagemin

https://imagemin.saasify.sh/

优点:压缩比很高,画质还可以很好的保存,色彩保留也很丰富。

使用场景:需要展示比较大的图片时,还想保留画质和色彩

缺陷:如果图片比较强调纹理或边缘,JPG 会显得有锯齿感或模糊,比如:Logo 不会用 JPG,边缘会显得粗糙

2.2.PNG:

下面是能将PNG图像进行压缩的网站

imagemin-pngquant

优点:可以做透明背景的图片,PNG也有 24 位格式,色彩丰富程度也是没问题。通常 quality 设置在 65% ~ 80% 之间是比较好的,这样可以达到 80% 的压缩比率

使用场景:想强调线条、纹理、边缘这些细腻程度时

缺陷:因为保留了细节,所以体积相对会大些

2.3.WebP:

Google 新提出的图片格式,已经推了几年,跟 PNG有相同的质量,但是压缩比率比 PNG 要高。缺点是普及程度不是很高

下面是各大浏览器对WebP的适配程度:

三:图片加载优化

3.1.图片的懒加载(lazy loading)

我们前端优化所说的懒加载就是指图片的懒加载

1.原生的图片懒加载方案

<img loading="lazy" src="https://placekitten.com/400/400">

示例网站:

img-loading-lazy

特点;需要浏览器进行支持,自定义以及可扩展性不是特别的好

2.第三方图片懒加载方案

vanilla-lazyload :用于延迟加载图片、背景图像、视频、iframe 和脚本。它利用 Intersection Observer,支持响应式图像

yall.js:使用 Intersection Observer 并回退到事件处理程序的库

lozad.js:使用 Intersection Observer 的轻量级选项

3.2.渐进式图片

图片不是一步到位加载出来,而是由模糊逐渐变清楚

  • 基线 JPEG,自上而下的行扫描形式

  • 渐进式 JPEG,会从低像素到高像素的过程

渐进式图片的优点和不足:

渐进式图片的解决方案:

  • progressive-image
  • ImageMagick
  • libjpeg-turbo
  • jpeg-recompress-bin
  • imagemin

3.3.响应式图片

不同屏幕尺寸都有一张合适的图片给用户达到最佳视觉体验,主要通过img标签的以下两个属性进行实现

srcset属性:定义了浏览器可选择的图片设置以及每个图片的大小

sizes属性:定义了一组媒体条件(例如屏幕宽度)并且指明当某些媒体条件为真时,什么样的图片尺寸是最佳选择

或者通过picture标签包含零或多个 <source> 元素和一个 <img> 元素来为不同的显示/设备场景提供图像版本

四:字体优化

网页上的大部分内容以文字的形式展示给用户,为了让文字展示更漂亮,很多时候会使用自定义字体,这些字体资源就会通过网络加载到客户端

4.1.什么是 FOIT 和 FOUT

  • Flash Of Invisible Text

    文字从看不到到看到的闪烁变化过程

  • Flash Of Unstyled Text

    没有经过样式渲染,也就是文字开始看上去是一种样式,后来经过样式渲染又变成另外一种样式,没有中间这个变化和闪动的过程

4.2.使用 font-display

这个属性有 5 个值:

auto

block:开始不让文字进行显示,3s 之后字体下载完再用你的字体,3s 之后字体还没下载完,先用默认字体显示,直到字体下载完再换成你的字体

swap:开始就使用默认字体进行显示,直到字体下载完成之后再换成你的字体,用户一开始就可以很快看到字体,不会看到白屏

fallback:对 block 的优化,开始不显示的等待时间缩短了,只有 100ms

optional:为手机端进行优化,浏览器用100ms判断用户网络情况,如果速度比较好,那就用你下载的字体,如果下载不下来,就用默认字体进行显示。缺点是一旦选择了某种字体后就不会再去进行变换了。

4.3.使用 Ajax + Base64

使用 Base64 把字体进行转码或嵌到 CSS 里或 JS 里,再进行加载,转码之后通过异步请求的方式去获取这个字体。

优点:通过Base64把字体进行转换之后,达到了统一的格式,解决了兼容性的问题;其次通过异步去进行加载,推迟了字体进行加载的时间

缺点:把 Base64 嵌到其他资源里,导致文字就没有办法进行缓存,它的缓存实际就依赖于 CSS 的缓存,所以它的过期或者缓存就变得不可控

总的来说,不是最佳,但是可以考虑的一种方案

前端资源(文件、图片、字体)优化相关推荐

  1. 前端资源文件(图片 css js)同步到阿里云OSS

    前端资源文件(图片 css js)同步到阿里云OSS 需求: 为了实现自动化更新前端资源,前端资源已放到了阿里云OSS,实现自动上传. 思路: 1.因为使用的是php语言开发项目,自然会想到用php实 ...

  2. [前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化

    在前端优化中,js.css等文件的优化一般都是压缩的优化,进行合并.减小体积以达到减小请求的目的. 今天发现了一个集成在VS中的压缩插件,使得压缩变得比较快捷. 配置方法 首先需要去下载Microso ...

  3. html标签 资源加载失败,前端资源加载失败优化

    Web 项目上线后,开始开门迎客,等待着来自大江南北.有着各式各样网络状态的用户莅临.在千差万别的网络状态中,访问页面难免会遇到前端资源加载失败的情况,占比或许不高,但一遇到,轻则页面样式错乱,重则白 ...

  4. Android 中 资源文件图片转 Bitmap 和 Drawable 以及相互转换的方法

    Android 图片转换的方法总结: 一.Bitmap 转换成 Drawable 对 Bitmap 进行强制转换 Drawable drawable = new BitmapDrawable(bmp) ...

  5. springboot+前端实现文件(图片)上传到指定目录

    第一步 前端写html的代码 <!-- 联系方式--><div class="layui-form-item"><label for="fi ...

  6. 前端读取文件图片信息流;js读取图片不同信息流;js读取图片;前端就js读取二进制数据;前端js读取文件流使用FileReader对象的readAsDataURL方法来读取图像文件;

    原文链接 FileReader来把文件读入内存,并且读取文件中的数据. readAsDataURL方法可以在浏览器主线程中异步访问文件系统,读取文件中的数据,且读取后 result 为 DataURL ...

  7. 前端笔记-webpack加载前端资源(图片,css等)

    目录 基本概念 代码与实例 基本概念 通过在webpack.config.js这个文件中添加module rules进行如下代码: 这里分别是加载vue,以及css,和styl样式和图片 styl用于 ...

  8. 前端资源文件加载失败_原神提示code9107怎么办 资源文件下载失败解决方法

    原神提示code9107怎么办?近日很多玩家都在游戏中遇到了"资源文件下载失败或网络问题,请重试Code-9107"的系统提示,那么这个错误要怎么处理呢?下面就是原神资源文件下载失 ...

  9. 【前端优化】第三方字体优化方案大全

    前言 因为快过年了,相信有些读者如果有年度账单,xx总结,过年期间使用的H5等应用免不了需要加一些花里胡哨的字体,尽管可能没有用,但是奈何UI稿已发,硬着头皮优化一下.接下来带来几种优化方式,字体再多 ...

  10. android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...

    Vector矢量图在Android项目中的利用愈来愈广泛,但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦,首先能支持的SVG规范较少,其次操作流 ...

最新文章

  1. HTML5对音频的支持
  2. python 框架和 spring mvc_Django和Spring MVC,该选择哪个框架进行Web开发学习?
  3. ITK:追加两个3D体积
  4. 清华计算机考研笔记,[考研天地]清华计算机,电子,自动化全套考研资料
  5. 锁定计算机在哪里设置方法,怎样锁定电脑?如何设置电脑锁屏【步骤详解】
  6. 关于JM8.6中MAX_LIST_SIZE值的选取
  7. 大前研一:聪明人必作的十件事
  8. python利用函数求不及格率_Excel利用这个函数轻松完成自动计算及格率、合格率...
  9. 关于解决The Operation Couldn't be Completed
  10. android 触摸屏干扰,一种电容触摸屏的抗干扰方法及其控制模块与流程
  11. [重新认识前端的第4天] html+css案例
  12. HTML 行间距的设置方法与问题
  13. python学习笔记之序列,内含列表和元组的常用方法
  14. 海思SDK学习(7)海思媒体处理软件平台MMP(6)视频编码VENC
  15. 《结构动力分析的MATLAB实现》,结构动力分析的MATLAB实现
  16. (6/6) Codeforces Round #694 (Div. 2)
  17. Tableau Prep经验总结
  18. python reset_HTML DOM reset() 方法
  19. 2014年GCT考试报名时
  20. 国家开放大学 计算机网络形式测试二

热门文章

  1. 日志分析命令 cat+awk+uniq+sort 详解
  2. NetCore List揭秘
  3. 酷酷的笔记_很酷的东西
  4. MOT:MOTchallenge任务评价方法
  5. 淮海工学院计算机考试题库,淮海工学院数据库试卷.docx
  6. vant中 tab栏遇到的坑 van-tabs。
  7. 第十届国际iCAN创新创业大赛暨红谷滩杯VR/AR行业赛启动
  8. IT学习网站推荐排行
  9. 大四毕业找工作真的很难?
  10. 全志XR806芯片 串口修改波特率后与目标波特率不匹配如何解决?