网站性能优化:base64:URL传输图片文件

news/2024/5/9 19:15:30/文章来源:https://xymyeah.blog.csdn.net/article/details/8559136

一、base64百科

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。

某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什么?

好吧,我也不喜欢专业术语的解释。你只要知道,base64编码就是长得像下面这样子的代码:

thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg==

上面代码大家都熟悉吧,迅雷下载链接哦(咳咳,该地址很纯洁),就是base64编码后的地址,所以以后看到这种:一堆连续字母,最后有1~2个“=”的代码就是base64。

base64:URL就是URL地址是base64编码的。

例如下面这个:

<img src="data:image/gif;base64,R0lGODlhAwADAIABAL6+vv///yH5BAEAAAEALAAAAAADAAMAAAIDjA9WADs=" />

二、base64与文件数据编码

在网络中,通过HTTP传输的文件还可以通过base64对数据进行编码进行传输。就如上面的这个base64的gif格式图片。当然,可以base64编码的文件不仅仅是图片,也可以是字体文件,例如(中间有缺省):

@font-face{

font-family: forTest;

src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAh4 ... RFERuENEGADl7JlY=) format('woff');

}

自然,对于background-image图片,我们也可以使用base64编码进行传输,例如:

background-image:url(data:image/gif;base64,R0lGODlhBAABAIABAMLBwfLx8SH5BAEAAAEALAAAAAAEAAEAAAICRF4AOw==);

而使用base64编码作为background-image图片就是本文要着重阐述的。

三、如何获得图片的base64编码

其实在我之前“基于HTML5的可预览多图片Ajax上传”以及“zSlide-基于CSS3/HTML5演示文档jQuery插件”实际上就与图片的base64编码的获取打过交道了。如下本地图片转换成可预览的base64编码的核心脚本:

var reader = new FileReader(), htmlImage;

reader.onload = function(e) {

htmlImage = '<img src="'+ e.target.result +'" />'; // 这里e.target.result就是base64编码

}

reader.readAsDataURL(file);

上面说的你只需要了解,实际上,目前base64编码工具不少,对于我们前端制作,下面这个本地图片 base64编码获取页面是值得推荐的:Encode Data URL By PuterJam

直接将桌面图片拖到条条里就有了响应的background-image url属性可用的base64地址了:

在线获取本地图片base64编码使用示例  张鑫旭-鑫空间-鑫生活

该转换页面的原理就是上面所说的HTML5 文件本地预览原理,具体可以自己查阅资料。

四、使用base64:URL的优缺点

个人觉得base64:URL传输图片文件的好处在于:

1.减少了HTTP请求

2.某些文件可以避免跨域的问题

3.没有图片更新要重新上传,还要清理缓存的问题

不足在于:

1.浏览器支持

使用base64编码图片作为背景图片的这种技术IE6/IE7浏览器是不支持的(IE9浏览器IE7模式下支持,这里被@前端的那点破事鄙视了 )。对于目前PC页面,兼容性问题使没有文件上传以及无需更新缓存的优点不存在了。

2.增加了CSS文件的尺寸

base64编码图片本质上是将图片的二进制大小以一些字母的形式展示,例如一个1024字节的图片,base64编码后至少1024个字符,这个大小会被完全嵌入到CSS文件中(不过幸运的是也可以被gzip了,而图片文件被gzip效果不明显)。

3.编码成本

图片完成后还需要base64编码,目前估计手工完成的多,因此,增加了一定的工作量,虽然不多。

五、优缺点权衡下的实际应用价值

权衡上面所展示的优缺点,貌似base64:URL图片没有什么用武之地啊,实际上非也,有一种情况时有base64编码作为background-image背景图片利要远大于弊的。何种情况呢?

在web页面制作的时候,由于某些现实原因,我们可以会用到下面这一类图片:

1.这类图片不能与其他图片以CSS Sprite的形式存在,只能独行

2.这类图片从诞生之日起,基本上很少被更新

3.这类图片的实际尺寸很小

4.这类图片在网站中大规模使用

想想看,你的网站中有没有同时满足上面四条的背景图片呢?

//zxx: 假设已经过去了今天朝鲜火箭勃起的时间

怎样,想到了没?提点下,例如下面这个企鹅微博中的loading gif图片(537字节,勉强算是):

加载中

537字节的大小实际上还是偏大了点,让我们看个更better的例子,大家可以去豆瓣首页,可以看到下图所示的垂直线:

为background-image图片(for 等高布局):

从bg_line.png这样的命名可以预知(不是:home_bg_line.png),该背景图片会在(可以在)网站中多处使用。

图示平铺图片地址为:http://upload.chinaz.com/2012/0606/1338961513462.png

大小1 * 1 像素,png格式,大小88字节。//zxx: 当图片颜色简单到一定程度的时候,gif格式图片大小要小于png8, 所以,这个点如果保存成gif格式,只需要43字节,为png一半大小

像这种图片大小极小,但又占据了一次HTTP请求,同时不能与其他背景图片Sprite,而网站很多地方都使用。因此,没有什么背景图片比这个更适合使用本文的“base64:URL图片”技术进行优化了!

为了比对优化的好处,我们来看个实际的demo.

六、base64:URL图片的实际应用

我博客首页的个人信息介绍处的虚点是使用背景图片实现的(考虑到IE6 dot边框跟dashed搞基,不同浏览器虚点间距差异等)。

现在,demo就要展示如何使用base64:URL图片实现该虚点效果。

您可以狠狠地点击这里:base64 URL虚点背景demo

相关CSS代码如下:

.dot {

background-image: url(data:image/gif;base64,R0lGODlhBAABAIABAMLBwfLx8SH5BAEAAAEALAAAAAAEAAEAAAICRF4AOw==);

*background-image: url("http://upload.chinaz.com/2012/0606/1338961513409.gif"); // IE6~IE7

background-repeat: repeat-x;

background-position: left bottom;

}

可以看到,使用base64的CSS代码量基本上跟下面使用完整地址差不多,因此,对于一些级小尺寸图片,所谓增加CSS文件大小的不足可以忽略(再考虑到gzip),同时减少了1个HTTP请求,加上这个图片网站很多地方使用,因此,累积节约的HTTP请求就很惊人了。

当然,唯一美中不足的是,对于IE6~IE7浏览器不能享受到这种“百利仅一害”的优化技术,我们还需要专门为它们擦屁股。不过,权衡来看,还是很值得的,毕竟目前,在中国IE8浏览器是大头(就在最近),IE6,IE7 就乖乖地泻下去吧。

最后,展示下demo页面YSLOW分析图吧,可以看到,没有任何CSS background-image请求。

没有CSS 背景图片的请求 张鑫旭-鑫空间-鑫生活

七、虽是一篇小短文,结尾也要干爹疼

IE6/IE7又一次暴露了自己的屌丝形象,对其,我已无力再次吐槽,不过,毕竟历史长河中的有功之人,就等其静静退出历史舞台吧。

再次提醒下,使用base64编码代替CSS背景图片是有局限性的,并不是所有图片都适合使用base64编码这种技术的。例如:

1. CSS Sprite图片后期维护会死人,只能是独立图片

2. 图片尺寸过大,CSS文件就会变成了臃肿的大棒子,反而不利于加载

3. CSS文件的优点就是重用,因此,如果背景图片就一个地方使用,减少的请求数有限,考虑到其他成本,还不如直接使用普通url图片地址

4. 如果图片经常改动,好吧,哥们,苦逼的前端加班仔中就多了一个你

因此,技术本身虽好,需天时地利人和方可使用。

在微博上,@朴灵提过MHTML这个东东,好像与base64编码相关的,对此我几乎一无所知,希望有相关了解的人可以补充下。

另外,周末时节,想着明早可以睡到自然醒,文笔过于仓促,出现错误在所难免,文中有表述不准确的地方欢迎指正,感谢阅读,祝大家周末快乐!


来源:互联网纪事 http://www.xymyeah.com/1285.html





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_806120.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在网站中使用VideoJs视频播放器播放视频

之前使用videojs用来网页中播放视频&#xff0c;现在做一下总结 &#xff08;这里把插件下载及演示地址、使用方法及demo放出来&#xff09; 视频播放插件Video.js 插件下载地址&#xff1a; http://www.jq22.com/jquery-info404 演示播放视频地址&#xff1a;http://www.jq…

如何注册网站域名?申请域名详细教程

要搭建网站我们就必须要有域名&#xff0c;有了域名别人才可以访问你的网站。域名&#xff0c;是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时标识计算机的电子方位。通俗点就是我们经常说到的网址&#xff0c;不过这种说法…

如何申请阿里云免费SSL证书(可用于https网站)并下载下来

前提条件&#xff1a;你要有阿里云的账号&#xff0c;并且要有一个域名。 注意&#xff1a;阿里云系统也在不断更新&#xff0c;界面以后可能会有稍许变化&#xff0c;但是原理是相通的。 具体步骤&#xff1a; 1.登录到阿里云后台&#xff0c;并选择 “SSL证书&#xff08;应…

【JavaWeb】利用开放平台建设网站生态圈

在互联网时代&#xff0c;把网站的服务封装成一系列计算机易识别的数据接口开放出去&#xff0c;供第三方开发者使用&#xff0c;这种行为就叫做Open API&#xff0c;提供开放API的平台本身就被称为开放平台。通过开放平台&#xff0c;网站不仅能提供对Web网页的简单访问&#…

此网站无法提供安全连接(客户端和服务器不支持一般 SSL 协议版本或加密套件。)

最近访问一部分网站时&#xff0c;出现如下图所示 “ 此网站无法提供案例连接&#xff0c;客户端和服务器不支持一般 SSL 协议版本或加密套件 ” 的问 题。 注意这里显示了非常关键的一句话&#xff0c;xxx使用了不受支持的协议。从这句话入手&#xff0c;很快就查到了原因。原…

网站 smtp服务器,网站smtp服务器

网站smtp服务器 内容精选换一换如果您需要使用创建的云服务器搭建一个对外展示的网站或者Web应用程序&#xff0c;请按以下步骤进行相关的配置操作。建站参考如果您使用的是公共镜像创建的云服务器&#xff0c;那么购买完成后可以参考以下建站指导完成完网站或应用程序的搭建。…

记一次前后端分离网站部署全流程(mysql安装,jdk配置,redis安装配置,elasticSearch配置等..)

阿里云服务器配置 配置ssh秘钥对 到ECS控制台的网络与安全创建秘钥对&#xff0c;并且绑定到你的服务器实例上。 配置实例密码 将之前创建的ssh秘钥对下载至本地&#xff0c;使用xshell连接 配置JDK 使用xftp 将jdk上传至服务器后解压 tar -zxvf jdk-8u201-linux-x64.tar…

添加域名不生效_网站建设:如何给域名做解析

网站制作一年350元&#xff0c;五站合一&#xff0c;快速建站 &#xff0c;www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册)&#xff0c;需要联系我吧&#xff01;电话&#xff1a;13752214574&#xff0c;微信号&#xff1a;m1078582894域名买好了&am…

腾讯cdn设置 php,教你利用腾讯云 cdn 加速网站静态资源

今天在给 onepoint 更换 js 库的 cdn 时突然想起来&#xff0c;腾讯云每个月还送我 10g 的 cdn 流量包。博客里面有时候会包含很多图片&#xff0c;正好可以把这闲置的资源用上了。平台信息bt(宝塔)、apache2、typecho类型选择cdn 可以选择全站加速&#xff0c;也可以选择只对指…

网络拓扑图画图工具_给你5分钟白漂:这些都是我的常用在线工具和网站

小伙伴们大家好&#xff0c;本期再托一次家底&#xff0c;和大家分享十几个自己日常工作学习过程中的常用在线工具和网站&#xff0c;希望能有帮助。也欢迎小伙伴们分享和安利出你们觉得有用的工具&#xff0c;不要停啊。注&#xff1a;本文 Github开源项目&#xff1a;github.…

网页模板快速建站工具_10款精品Windows工具,值得推荐

接着再来更新10款实用的电脑工具&#xff0c;希望对大家有所帮助&#xff01;以下工具百度搜索名称即可获取下载工具-Aria2Aria2是一个轻量级多协议多平台的开源下载工具。它支持HTTP&#xff0c;HTTPS&#xff0c;FTP&#xff0c;BT 等多种格式下载。它虽然是命令行工具&#…

url获取网站信息不包含网页源文件内的标签_站内SEO:影响优化效果的7个站内因素...

站内SEO是SEO优化的一个极其关键的方面&#xff0c;我们并不是说它比站外SEO更重要&#xff0c;但是您可以完全控制它&#xff0c;因此可以更好地利用它。为了快速回顾&#xff0c;页面上的SEO处理您的网页或网站上的内容&#xff0c;它包括内容&#xff0c;关键词&#xff0c;…

hbuilderx制作简单网页_推荐一款可以把网页打包app的网站和软件(第1期)

可以把网页打包app的软件和网站有很多&#xff0c;今天要推荐的是国产的一款轻巧、极速 10M的绿色发行包。 C架构&#xff0c;启动速度、大文档打开速度、编码提示&#xff0c;都极速响应。强大的语法提示 一流的ast语法分析能力&#xff0c;语法提示精准、全面、细致&#xff…

github怎么用_只需10分钟,构建你的 GitHub 个人网站

很多开发者尤其是前端开发者都希望有一个自己的网站来展示个人信息、简历或者写一些博客。也许你会想到自己买云服务器&#xff0c;然后将开发的网站放上去&#xff0c;但是服务器价格不菲而且对于初学者来说自己部署也比较麻烦。其实想搭建个人网站有 GitHub 就足够了。今天我…

百度 热搜词页面的 js是怎么做的_来宾快手广告渠道,网站关键词优化,热推

首页 > 新闻列表 > 正文作者&#xff1a;佚名 点击数&#xff1a; 6更新时间&#xff1a;2020-11-07 12:19:33 导读&#xff1a;一帆创众网络为您提供来宾快手广告渠道,网站关键词优化的相关知识与详情&#xff1a; 网站作品关键词传播的独创性是搜索引擎基本重要的要求…

服务器被入侵网页后门,谨防“网页后门”,浅谈Webshell入侵网站的原理和预防措施...

正在看手机、电脑或电视的你&#xff0c;是否发现了一个问题&#xff0c;人们对于互联网的依赖程度&#xff0c;让网络几乎已经成了生活中必不可少的东西&#xff0c;不管是生活中还是工作中&#xff0c;它都起着重要的作用&#xff0c;但同样它在给人们带来好作用的同时&#…

css设置logo图片大小,修改ecshop网站logo图片尺寸大小

ecshop里面把logo的尺寸是写固定了的&#xff0c;大概在150*35的样子&#xff0c;如果设计的尺寸偏大&#xff0c;那么就会出现只能显示部分logo的情况&#xff0c;请的合作美工出于漂亮和完整传达意思的考虑&#xff0c;他把我的logo尺寸修改为150*52&#xff0c;这样的话logo…

解决wp的插件all-in-one-seo-pack被百度收录失败的问题

用过wordpress的都应该知道all-in-one-seo-pack插件的强大性&#xff0c;这是一个对网站SEO影响很大的插件&#xff0c;然而&#xff0c;再强大的插件也是有一些不足的地方。这几天我们公司的网站很多页面都没有被百度收录进去&#xff0c;明明已经SEO过了却还是不行&#xff0…

服务器状态监控app,服务器/网站连接状态监控工具

本工具是监听服务器或者网站状态的工具&#xff0c;一次可以批量检测多个IP或者服务器&#xff0c;工具是由概念网络自主开发的&#xff0c;本工具为收费软件&#xff0c;没有免费版本下载&#xff0c;程序是用C#开发&#xff0c;需要.Net Framework 3.5及以上的环境支持&#…

服务器运维浏览器,本机浏览器如何访问docker容器的内容_网站服务器运行维护,浏览器,docker...

docker无法下载镜像怎么办_网站服务器运行维护docker无法下载镜像的解决方法是&#xff1a;1、运行命令【systemctl stop firewalld】关闭防火墙&#xff1b;2、运行命令【date -s xxxx】同步时间&#xff1b;3、运行yum命令安装【docker -devel】。1、查看容器的详细信息命令格…