当前位置: 首页 > Web前端 > HTML

Base64编码知识,一篇文章尽在掌握!

时间:2023-03-28 19:11:15 HTML

现在网站越来越多地使用图片来提升用户的浏览体验,而这些图片通常以Base64的形式存储和加载。所以各位开发工程师一定对Base64不陌生,那么你知道Base64是什么,为什么要用Base64,Base64的优缺点吗?什么是Base64Base64是一种在网络上存储和传输二进制数据的常见用法。Base64的一个字节只能表示64种情况,编码格式中每个字节的前两位只能为0,剩下的6位用来表示内容。看到这里,相信大家也能体会到,这种编码格式不能充分利用存储资源,效率低下。那么为什么它仍然是互联网上的常见用法呢?事实上,Base64最先被用在邮件传输协议中。当时的邮件传输协议只支持ASCII字符的传输,用ASCII码来表示所有的英文字符和数字以及一些符号。这里有一个问题。如果邮件中只传输英文数字等,那么ASCII可以直接支持。但是,如果要传输文件中的图片、视频等资源,这些资源在转换为ASCII时会出现非英文数字。而且邮件中有很多控制字符,这些控制字符会变成隐形字符。非英文字符和控制字符在传输过程中容易出错,影响邮件的正确传输。为此,一种新的编码规则诞生了。将二进制分成3个字节为一组,然后将每组的3个字节(24位)转换为4个6位。对应一个ASCII符号,这就是Base64。Base64将8位字节数据拆分为6位二进制片段。每个6位单元对应Base64索引表中的一个字符。比如下图中M的ASCII码是77,二进制转换后的前六位二进制对应的值为19,即Base64字典中的T。当然,这里会有一个问题。如果要编码的二进制数据不是3的倍数,就会剩下一两个字节。为此,Base64在最后使用000000字节值进行补足,使字节数能被3整除。=的个数表示添加了多少字节,解码时会自动去掉。总体来看,Base64编码后的字符数相比编码前增加了约33%。图片的Base64编码前面我们也提到,Base64编码是网站加载小图片的主要方式。那么Base64是如何处理图片的呢?我们都知道图片在网页中通常以img标签的形式使用,img标签的src属性指定了远程服务器上的一个资源。当网页加载到浏览器中时,浏览器向服务器发送每个外部资源的拉取资源请求。但是这样会消耗大量的网络资源,而且由于大多数浏览器都有并发请求数的限制,如果你在网页中嵌入过多的外部请求,很容易导致页面加载速度过慢。Base64编码可以利用DataURL技术,将图片以字符串的形式直接嵌入到页面中,与HTML合二为一。这样可以避免加载时请求外部资源。为什么选择DataURL至于为什么选择DataURL技术,与传统的外部资源引用方式相比,它有以下优势:减少HTTP请求;避免跨域问题;可以像单独的图片一样使用,比如背景图片复用等。这样Base64编码可以更快捷方便的优化各种前端图片资源。我们来看一个具体的例子:可以清楚的看到,Base64编码是将一张图片数据编码成一串字符串,并用这个字符串来代替图片地址。虽然乍一看并没有什么图像相关的内容,但最终渲染出来的无疑是一个完整的图像效果。当然,使用DataURL对图片进行Base64编码并不完美,它有两个不可忽视的缺点:Base64编码后的数据量通常是原始数据量的4/3,即图片中的DataURL的形式将比二进制格式的图像大。1/3DataURL形式的图片不会被浏览器缓存,这意味着每次访问都需要重新请求资源,给服务器带来很大的压力。有没有办法把这些数据放到浏览器缓存中?加快加载的小窍门事实上,大多数网站的背景图片都是由一张宽高只有几个像素的小图片,平铺成一张背景图片组成的。通常我们将小图片保存为GIF或者PNG格式,然后在CSS的background-image属性中引用图片地址。但是浏览器本身并不关心URL中写的是什么,它只需要通过它获取需要的数据即可。所以我们可以使用CSS样式文件将图片以DataURLs的形式存储在CSS样式表中。这样浏览器就会缓存CSS文件和图片,可以进一步提高页面加载效率。上图是一个简单的用例。这样就避免了背景图片单独生成HTTP请求,背景图片和CSS文件一起被浏览器缓存,避免了每次打开网页都加载一次。背景图像,以提高用户的浏览体验更快更流畅。DateURL技术与Base64编码相结合,可以有效减少HTTP请求,让用户访问体验更好。这其实是我们开发过程中的一个小技巧。希望看完后能给你带来一些帮助。推荐阅读这些技术难点如何攻克游戏出海浪潮下跨境电商的两大技术难点,如何解决?

猜你喜欢