网页上的base64码太长?科普base64到底是啥

news/2024/11/7 16:59:38/

一、前言

      书接上回,上次是通过返回base64码给前端页面,实现了我们访问项目外图片的目的。只是代码实在是太长了,不好看啊,得想办法优化下。顺带了解下base64到底是啥,用着好不好,会不会影响速度呢?


php上传图片到非项目目录,前端页面的读取问题

二、代码逻辑优化

1、需要时再请求,不需要时不要管

      既然咱们的问题是页面上的base64码太多了,那么我们换一种思维,在每次需要打开详情页的时候,请求后端,然后获取对应的base64码,赋值给图片即可。
优点:
(1)页面上不需要大量的base64码,方便维护
(2)页面代码减小,同时初始化的时候程序压力也变小,页面加载速度会变快
(3)http请求变多,但是都是选择性的请求,一次执行一个http请求就可以

缺点:
(1)http请求的速度不如base64的渲染速度,如果出现网络不佳的情况,可能会有一定的影响

      优点大于缺点,最终选用该方案。在打开详情页的时候,进行网络请求,然后获取图片地址,再把图片转化为base64返回,赋值即可。具体参考上篇文章的代码,类似的方法,只是思维方向转化了下。

2、继续转化思维,页面src直接写上接口地址?

      既然我们可以通过ajax请求页面返回base64码,那么我们是不是也能够直接请求接口返回图片的二进制流呢?imgsrc属性本职就是一种http请求,我们写上接口路由,这个路由对应的方法就是通过php读取存在项目外的图片,然后加个header头输出image即可,如果方案可行的话,那就没那么多问题了。

大致方法如下:

php代码:

 header("Content-Type: image/jpeg;text/html; charset=utf-8");$img_path = $dir.$images;$thumb = new Thumbnail(100, 100);$thumb->loadFile($img_path);$data =  $thumb->buildThumb();return $data;   //返回二进制的流

前端代码:

页面展示效果

      最后发现还真的行得通,直接请求个接口地址,返回流就可以了。这里返回的结果,用file_get_contents也可以获得的,直接return即可。

三、科普下二级制的图片流和base64码的区别

1、区别

二进制的图片流: 用二进制流来表示图片,计算机的存储在物理上是都二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。
base64码: Base64 编码之所以称为 Base64,是因为其使用 64 个字符来对任意数据进行编码。Base64 编码本质上是一种将二进制数据转成文本数据的方案。对于非二进制数据,是先将其转换成二进制形式,然后每连续 6 比特( 2 的 6 次方= 64 )计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串。base64编码主要用在传输、存储、表示二进制领域,不算是加密方法,只是看不到明文而已,
      大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。

2、根据图片地址获取base64

  public function base64EncodeImage ($image_file) {$base64_image = '';$image_info = getimagesize($image_file);$image_data = fread(fopen($image_file, 'r'), filesize($image_file));$base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));return $base64_image;}

看完上面的解释,我们就知道的差不多了,base64只是一串字符串而已。Base64编码原理与应用

3、base64适用场景

1、跨域场景
2、只能传输字符的请求
3、网页上很多小icon,影响网页速度的
4、网页优化:
如图:页面在请求之初发生了150多个请求,每个http请求花费的时间不多,但加起来可就太多。这种小图片,转化为base64的字符也不会太长,icon一般都在公用部分,不常修改,其次是可以节省大量的网络请求。

在这里插入图片描述

注意: 使用base64注定有得有失,base64多的话照样会影响网页的加载速度。一般的css和图片资源都是可以被缓存的,但base64码并不会被缓存,所以在用的时候要注意得失吧,找一个平衡点

优秀文章推荐:
base64编码的原理
[译]Base64 编码&性能:

      其实写这两篇文章,也是博主自己的一个思维的递进。有时候确实觉得自己挺笨的,第一时间想起来的永远都不是最佳方案,不断的试错试错,最后才能找到相对而言还可以的方案。加油吧,少年!

end


http://www.ppmy.cn/news/172162.html

相关文章

4k纸是几厘米乘几厘米_4k纸多大(4k纸有几张a4纸大)

4k纸张的纸长是54cm宽38cm,大约是四张A4纸的大小。4K纸一般指“四开”大小的纸张。 一般复印纸A4,二张拼成A3约8K,比4K纸大一点,就是4张A4约等于4k纸。网络介绍为54 x38厘米。 4开纸的尺寸是: 正度389mm*546mm 把一张e799bee5baa6e997aee7ad94e78988. (210mm*297mm)的两倍…

64位java_java64位

java64位是非常厉害的java编写开发工具。java64位主要是为64位系统的java用户设计,为用户提供易用性、多语种特色,使用户在进行java开发时编写程序更简单为用户带来最好的编程体验。 java64位功能说明: 1、系统进程管理:将对管理操…

台式计算机内存多大算好些,台式电脑内存多大合适_台式电脑硬盘多大合适

2016-12-11 16:44:06 你好!很高兴为你解答,升级到4G比较合适,因为单条2G的内存条性价比较高,4G的有点小贵。另外玩游戏的时候,可以适当调整下游戏参数,对画质、光影效果的各种参数调低一些,这样运行会流... 2017-01-03 14:15:11 一般而言,4G的内存就够了,如果需要经常…

Base64加密解密

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递…

4k纸是几厘米乘几厘米_4k纸有多大?长宽各几厘米?

展开全部 4开纸的尺寸是: 正度389mm*546mm,大度 444mm*597mm。 纸张开62616964757a686964616fe58685e5aeb931333431356131本 1、全开 正度787*1092mm 大度 889*1194mm。 2、对开 正度787*546mm 大度 889*597mm。 3、四开 正度389*546mm 大度 444*597mm。…

html展示base64有长度限制,网页上的base64码太长?科普base64究竟是啥

1、前言 书接上回,上次是经过返回base64码给前端页面,实现了咱们访问项目外图片的目的。只是代码实在是太长了,很差看啊,得想办法优化下。顺带了解下base64究竟是啥,用着好很差,会不会影响速度呢?php 2、代码逻辑优化 一、须要时再请求,不须要时不要管html 既然我们的问…

计算机内存多大够用,Win10到底需要多大内存才够用,你知道吗

Win10带来了语音助手、通知中心、Edge浏览器以及安全上的诸多改进,依然有人因为界面不够华丽,隐私保护有潜在威胁,体验中容易卡顿、蓝屏等诸多问题而选择不升级。如果你已经升级Win10,玩硬件的用户一般在这时候就要考虑一个问题:Win10操作系统对配置有什么要求呢?官方给出…

多开工具,终于给找来了~

前言 不少小伙伴在用电脑时应该都有过开一个软件不够用的情况,比如W&X、扣扣、网盘甚至是一些游戏而大部分软件为了避免进程间互相影响,都不允许同时启动多个,这给想要多开的朋友造成了很多困扰。今天便给大家分享两款刚淘来的PC端多开工…