在浏览网页的过程中,图片最容易吸引用户的注意力,它即能给用户直观感受,又能清晰地表达意图,所以在制作网页时,如何快速有效地加载图片资源显得尤为重要。
常见的图片加载方式一般而言,最常见的图片加载方式是 HTTP URI Scheme 简称 HTTP URI。例如:某图片存储在又拍云存储上,链接为 https://f.lxpzyy.top/upyun/upcdn.svg。我们可以通过引入图片 HTTP 链接的方式,如:
来加载图片。除此之外,我们可以通过 Data URI Scheme 的方式来引入图片。
<img src=http://www.likecs.com/“data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu……/>Data URI Scheme 的方式和 HTTP URI 的使用较为类似,只是看起来多了很多“乱码”。那这些乱码有什么作用呢?和 HTTP URI 相比,它有什么优势让我们选择它呢?
初识 Data URIData URI scheme 简称 Data URI ,是在 RFC2397 中进行定义的。目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。以上方的 Data URI 链接为例:
<img src=http://www.likecs.com/“data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu……/>我们可以看到它由 data,image/svg+xml,base64 以及后面的字符串组成。
data:[][;charset=][;],
这几部分分别为:
data: 表示取得数据的协定名称,表明这是一个 Data URI。
mime type: 数据类型名称,也是就是 image/svg+xml,如果传入的是个 png 图片,那么可以指定类型为 image/png。
charset=: 可不填,默认是 charset=US-ASCII 编码。
base64: 是数据的编码方法。
encoded data: 经过 base64 编码后的数据。
我们可以看到,除去可不填的 charset=,使用 Data URI 必然会用到 base64 编码,那这个要如何获得呢?
如何获得 base64 编码最简单的方式是直接上网找一个编码小工具。
现在网上有很多的 base64 编码小工具,他们可以直接将文件或者字符进行 base64 解编码。
除此之外以下代码语言也都有其对应的 base64 编码方式,可以很方便地进行编码解码转换:
JAVA
String test="Upyun"; BASE64Encoder base64Encoder=new BASE64Encoder(); String encode = base64Encoder.encode(test.getBytes("UTF-8")); System.out.println(encode);PHP
$str = 'Upyun'; $encode = base64_encode($str); echo $encode.'<br>';**JavaScript **
var data=windows.btoa('Upyun'); Data URI 的使用方式及优势了解了 Data URI 的大致情况,我们来看看它要如何使用。
它主要有两种使用方式,第一种是将处理好的 Data URI 格式数据,放入 HTML 页面代码 img 标签的 src 属性中。这种方式的好处是减少了 HTTP 请求,缺点是无法进行缓存。另一种方式则是将 Data URI 放入到 css 里,优点是浏览器会积极缓存 css 文件来提升加载页面时的速度,缺点是增加了 css 的长度。
那么回到我们最初的问题 Data URI 比 HTTP URI 的优势是什么呢?
相比 HTTP URI,Data URI 拥有以下优势:
使用 Data URI 能够有效减少 HTTP 请求数
不依赖于网络环境,即没有网络的时候页面中的资源也可以被加载出来
可以免除一些极小文件对 HTTP 请求的占用
当然 Data URI 也有不少缺点。经过 Base64 编码后的文件或者数据,通常来说比起原文件体积增大了30%左右,然后 Data URI 通常会写在 css 文件中,不易维护,另外手机端加载 Data URI 资源也比较消耗 CPU 资源。
相比之下,Data URI 还是很值得使用的,现在就有很多场景都使用 Data URI 的方式引入资源,比如百度首页的小图标以及谷歌的首页等。
如果想让网站拥有不同的加载方式,特别是避免因网络状况差导致的无法加载问题,那一定要试试 Data URI。
在考虑使用 Data URI 的过程中,我们可以从以下几点着重考虑:
图片的实际尺寸比较小
不经常更新的资源图片
需要在页面中经常使用的图片