您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

Base64是什么?前端用Base64加载图片到底好不好?

时间:2020-05-24 15:59:15  来源:今日头条  作者:全栈工程师鸡腿

相信无论是前端还是后端开发工程师,对于Base64都不会感到陌生,在开发中我们经常会将一些小图片以Base64的形式存储和加载。然而知其然也要知其所以然,Base64究竟是什么,我们为什么要使用Base64,以及Base64的优缺点又是什么呢?今天我们就来聊一聊。

什么是Base64

首先Base64是一种编码格式,普遍应用于需要在网络中存储和传输的二进制数据。为什么叫Base64呢,主要是因为这种编码格式每个字节的前两位只能是0,剩下只有6位可以表示,所以对于Base64来说,一个字节只能表示64种情况。Base64的名字由此而来。

 

为什么要存在Base64

但我们不难发现,这样的话这种编码格式并不能充分利用存储资源,是比较低效的,那为什么还要用Base64这种编码呢?为什么不直接传输二进制而要转成Base64格式再去传输呢?

原因是因为base64最早是用在邮件传输协议中的,当时邮件传输协议只支持ascii字符传递,ascii码可以用来表示所有的英文字符和数字还有一些符号,但其中还存在很多不可见字符或者叫控制字符,不可见字符在传输过程中可能会产生一些错误,如果邮件中只传输英文数字等,那么ascii是可以直接支持不会有问题,但是如果你要在文件中传输一些二进制文件,图片,视频等资源的时候,不可避免的转成ascii的时候会出现非英文数字的情况,也就是上面所说的不可见字符,这时就有可能会导致传输过程中出现问题。

Base64就是用来解决这个问题的,人们想到把二进制划分为多个3个字节的块,把每3个字节(24位)转换成4个6位,每个六位根据查表对应一个ASCII符号。如下图所示:

Base64是什么?前端用Base64加载图片到底好不好?

上图是Base64的编码字典

 

Base64是什么?前端用Base64加载图片到底好不好?

如上图所示,比如我们有一个3个字节的数据,转成ascii码以后就是第一行所示,但我们查询ascii码会发现第三个字节是个不可见字符,所以如果在曾经的邮件传输协议中这么传输可能会在过程中产生一些错误,于是我们需要转成base64再去传输,根据Base64的转化规则曾经的三个字节就变成了4组6位的值,然后我们需要在每一组前面补充两个0补齐字节长度。于是根据Base64编码之后我们打印出的结果就是S3qb这个字符串。

另外这个例子比较特殊,我们正好是个3字节数据,如果1个字节或者2个字节时,我们就会发现位数不能正好被6整除,不能整除就会是下面这个示例展示的样子

Base64是什么?前端用Base64加载图片到底好不好?

 

如何编码和解码Base64

JAVAScript 中,有两个函数被分别用来处理解码和编码 base64 字符串。

  • btoa() — 字符串转 Base64编码
  • atob() — 通过Base64规则解码成ascii字符串

Base64是什么?前端用Base64加载图片到底好不好?

 

使用Base64存储和加载图片好不好?

相信大家对于Base64的编解码和原理已经有了深入了解,最后我们简单聊聊在前端页面中使用Base64加载图片到底好不好。所有事情都有两面性,没有绝对的好不好,只有在某些特定场景下合不合适。我们来看看Base64加载图片的优劣点:

资源大小:根据我们上面提到的原理,我们很容易发现Base64会比正常资源要大三分之一,Gzip压缩之后差距会缩小。

缓存方式:图片资源很好缓存,但如果是base64的话,如果是在cssjs中引入可以跟文件一起进行缓存,如果在html中直接引用则必须缓存html文件,所以缓存方便程度上肯定是图片资源文件更方便缓存。

加载方式:html/css中引入base64会导致文件体积变大,从而导致首屏展示的比较慢,而用过图片资源方式异步引入会首屏会展示的比较快。但对于需要加载很多图片的情况下,尤其是脚在很多小图片小icon的情况下,如果不使用雪碧图的方式就会造成请求量很大,在http1.1/1.0协议下,在不开启keep-alive的情况下,会导致效率低下重复创建销毁连接通道,并且浏览器存在请求线程限制,并且存在网络io延迟,这种情况下base64效率更高,但如果你的应用使用http2/3的协议,base64的优势就不大了。

 

结语

所以综合来看Base64加载图片的方式多数情况下并不是最优选择,只有在图片比较小,比较独立并不适合做成雪碧图的情况下再去使用比较好。



Tags:Base64   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
浅谈JS处理文件数据的API:Blob、FileReader、Base64、File?
在前端开发中,开发者常常会使用文件上传、下载或数据转换的操作。JavaScript 提供了许多 API 来处理二进制数据和转换数据流,如:ArrayBuffer、FileReader、base64 、Blob、File...【详细内容】
2023-08-03  Search: Base64  点击:(208)  评论:(0)  加入收藏
为啥要做 base64 编码
在项目中,对豹纹进行压缩、加密后,最后一步一般是 base64 编码。因为 base64 编码的字符串更适合不同平台,不同语言的传输。base64 编码的优点: 算法是编码,不是压缩,编码后只会增...【详细内容】
2021-05-14  Search: Base64  点击:(452)  评论:(0)  加入收藏
Base64是什么?前端用Base64加载图片到底好不好?
相信无论是前端还是后端开发工程师,对于Base64都不会感到陌生,在开发中我们经常会将一些小图片以Base64的形式存储和加载。然而知其然也要知其所以然,Base64究竟是什么,我们为什...【详细内容】
2020-05-24  Search: Base64  点击:(177)  评论:(0)  加入收藏
一文让你彻底搞懂Base64的编码过程
java 中怎样实现Base64的编码 结果为:V29ybGQ=Base64 是怎么编码的?ASCII 码表第一步: World 中的每个字母根据上面的ASCII码,转换成二进制 第二步:把 第一步生成的二进制 重新...【详细内容】
2020-02-22  Search: Base64  点击:(511)  评论:(0)  加入收藏
一文看懂Base64原理(并使用java实现)
Base64编码解码算是网络安全领域的很小而且很简单的一个知识点了,虽然简单但是应用场景却极其广泛,可以这样说,开发者要是不懂Base64,基本上可以告别程序员生涯了。这篇文章从原...【详细内容】
2019-10-11  Search: Base64  点击:(701)  评论:(0)  加入收藏
js中对字符串进行base64编码和解码
1.js中对字符串进行base64编码和解码function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // publ...【详细内容】
2019-10-11  Search: Base64  点击:(1184)  评论:(0)  加入收藏
一文彻底看懂Base64编码解码原理(并使用java实现)
Base64编码解码算是网络安全领域的很小而且很简单的一个知识点了,虽然简单但是应用场景却极其广泛,可以这样说,开发者要是不懂Base64,基本上可以告别程序员生涯了。这篇文章从原...【详细内容】
2019-09-19  Search: Base64  点击:(913)  评论:(0)  加入收藏
PHP AES/DES加解密方法,使用了base64和16进制加解密串
在做接口的时候,我们需要对数据进行加密处理,本例使用的是AES/DES加密解密方法,因为在加密解密的过程中,加密的串是乱码的,所以加乱码的串进行了base64编码或者转为16进制同理解...【详细内容】
2019-08-07  Search: Base64  点击:(1167)  评论:(0)  加入收藏
一篇文章彻底搞懂base64编码原理
本文原创作者:源理君头条号:底层软件架构公众号:技术原理君开始在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了...【详细内容】
2019-06-28  Search: Base64  点击:(1432)  评论:(0)  加入收藏
▌简易百科推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  前端之神  微信公众号  Tags:前端   点击:(12)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  机器之心Pro    Tags:前端   点击:(9)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown —— 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  OSC开源社区    Tags:Vue   点击:(11)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  海燕技术栈  微信公众号  Tags:Promise   点击:(23)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  CarryData    Tags:前端   点击:(32)  评论:(0)  加入收藏
网站程序开发中的前后端分离技术
随着互联网的快速发展和技术的不断创新,传统的网站开发模式已经难以满足日益增长的业务需求。为了提高开发效率、增强系统的可维护性和可扩展性,前后端分离技术逐渐成为了网站...【详细内容】
2024-01-31  网站建设派迪星航    Tags:前后端分离   点击:(23)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  前端充电宝  微信公众号  Tags:前端   点击:(69)  评论:(0)  加入收藏
Vue中Scope是怎么做样式隔离的?
scope样式隔离在 Vue 中,样式隔离是通过 scoped 特性实现的。当在一个组件的 <style> 标签上添加 scoped 特性时,Vue 会自动为这个样式块中的所有选择器添加一个唯一的属性,以...【详细内容】
2024-01-04  海燕技术栈  微信公众号  Tags:Vue   点击:(80)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  互联网高级架构师  今日头条  Tags:vue3   点击:(38)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  爱做梦的程序员  今日头条  Tags:Vue3   点击:(72)  评论:(0)  加入收藏
站内最新
站内热门
站内头条