[译]图片优化 第五章:AlphaImageLoader
作者:s5s5 来源:[米随随] s5s5 发布时间:2010-08-29 18:39:00
译者:AlphaImageLoader是一个让IE6正常显示PNG32时要用到的一个滤镜,但它在使用中也会产生一系列的问题,本文对使用AlphaImageLoader及替代方案都做了很详细的分析和总结。关于图片优化YUIblog有五章内容,其它内容大家貌似都懂,有兴趣的同学译吧。关于PNG32在Photoshop中导出的叫做PNG-24,但在Fireworks导出PNG会有三种格式,PNG8、PNG24、PNG32,它导出的PNG24是没有透明度的,为了防止大家搞错,所以我译做PNG32。
原文地址:http://yuiblog.com/blog/2008/12/08/imageopt-5
译文地址:http://www.misuisui.com/weblog/?p=2286
作者Stoyan Stefanov在雅虎的性能优化团队工作,领导开发YSlow性能工具。同时他还是一个开源贡献者、演讲者和技术作家,他的最新著作是《Object-Oriented JavaScript》。
本文是图片优化的第五章。点击以下链接查看其他章节:
本章图片优化主要介绍IE浏览器私有CSS滤镜:AlphaImageLoader,开发人员经常使用它来解决在IE下显示PNG32图片的透明度问题。但使用AlphaImageLoader会使网页性能降低,从而伤害用户体验。所以我认为应改尽可能避免使用AlphaImageLoader。
快速复习
我们在图片优化 第二章:选择正确的文件格式一文中提到,PNG格式有几种不同类型,大致可以分为:
Indexed (palette),也被称为PNG8有多达256种颜色。
Truecolor PNG,也被称为PNG32或PNG24,所有颜色都不会丢失。
这两种格式都支持 Alpha(变量)透明,但在IE6下PNG8显示为如同GIF图片一样的无变量的透明(例如,来源),PNG32则在原本显示透明背景的地方显示成了灰色(如下图所示)。
AlphaImageLoader修复
IE6(及更老版本的IE)提供了一个针对PNG图片显示的解决方案,通过其私有CSS滤镜。以下代码可使PNG图片在浏览器中正常显示:
#some-element { background: url(image.png); _background: none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='image.png', sizingMethod='crop'); }
你会发现,下划线的CSS Hack被用来针对IE6及更老的版本,它的作用是:
不显示背景图片
使用微软的AlphaImageLoader滤镜加载背景的PNG图片
因为IE7不使用CSS淲镜也能支持PNG图片的Alpha透明。(但IE8中又不一样,它实际上完全改变了CSS滤镜的语法 。)
该滤镜的有趣之处在于,它并没有改变图片,相反,它在改变使用该滤镜的HTML元素。而更有趣的是,它对所有使用它的元素都只在一个UI处理线程中处理。这个过程中每个使用该滤镜的元素都要消耗系统资源,当你使用滤镜越多情况就会越糟糕,即使你所有元素其实是用同一张图片。
现在的问题是:这将如何影响该网页的表现?
假死!副作用#1
这里有一个简单的实验:创建一个页面,有一个CSS滤镜,然后模拟(和增大)网络中的延迟,延迟10秒加载淲镜中使用的图片。结果呢?在这10秒中什么也没显示(空白页),并且浏览器也会假死,这意味着你不能与浏览器进行交互:单击图标、菜单、键入网址…通通不行,甚至更不能关闭它。
在这个例子中,我没有用下划线,所以你可以看到在IE7下也一样会假死,即使在IE8的“兼容模式”下。
虽然效果演示的是夸张了的,但网络延迟也生活中的事实,这可能是最糟糕的用户体验,这意味着:有人来到你的网页,然后你让他的浏览器假死。
需要注意的是,它不阻塞并行下载。浏览器其实在后台还在下载其他网页文件,但没有进行渲染。你可以这样认为:IE不会渲染任何元素,直到所有的CSS下载结束(更多信息)。就是因为CSS中有一个图片的依赖于滤镜加载,所以CSS被认为没下载结束,导致IE不去渲染页面,直到依赖滤镜的图片被加载到。
如果你在网页中使用了多个AlphaImageLoader滤镜会怎么样呢?他们会一个接一个的处理。比如你有5个图片,每2秒延迟在服务器上,哪么浏览器就会有10秒的假死状态。


猜你喜欢
- 本文web服务器使用的为apache。1. 安装apacheyum install -y httpd2. 配置apache修改apache配
- 1. 集合 set 简介集合的最大特征是其每个元素都是唯一的,它可以删除、可以增加、也可以通过增删实现替换元素,但是它是没有下标的,你无法通
- Python在3.4引入了 asyncio 库,3.6新增了关键字 async和await,此后,异步框架迅速发展了起来,性能上能和Node
- python strip() 函数和 split() 函数的详解及实例一直以来都分不清楚strip和split的功能,实际上st
- 本文采用OpenCV3和Python3 来实现静态图片的人脸识别,采用的是Haar文件级联。 首先需要将OpenCV3源代码中找到data文
- 在深度学习中,经常需要动态调整学习率,以达到更好地训练效果,本文纪录在pytorch中的实现方法,其优化器实例为SGD优化器,其他如Adam
- 花了两个多钟在看 ThinkPHP 框架,不想太过深入的知道它的所有高深理论。单纯想知道怎么可以用起来,可以快捷的搭建一个网站。所以是有选择
- 一、什么是协程协程拥有自己的寄存器和栈。协程调度切换的时候,将寄存器上下文和栈都保存到其他地方,在切换回来的时候,恢复到先前保存的寄存器上下
- 基于python的Appium进行b站直播消费记录爬取之前看文章说fiddler也可以进行爬取,但尝试了一下没成功,这次选择appium进行
- function f(x){ alert(x); return
- string操作在编程中具有极高的频率,那么string中有哪些有用的方法呢?使用strings直接操作Comparefunc Compar
- 项目场景:在做目标检测时,重新进行标注会耗费大量的时间,如果能够批量对xml中的信息进行修改,那么将会节省大量的时间,接下来将详细介绍如何修
- 漏斗图漏斗图是由Light等在1984年提出,一般以单个研究的效应量为横坐标,样本含量为纵坐标做的散点图。效应量可以为RR、OR和死亡比或者
- 我就废话不多说了,大家还是直接看代码吧!import matplotlib.pyplot as pltimport numpy as npf
- 因为直接把内容作为字符串给编辑器的 Value 属性赋值使用的是 JavaScript 代码,要让 JS 代码不受内容中双引号、换行等的干扰
- 在使用pycharm开发工具连接mysql数据库时提示错误,信息如下:Server returns invalid timezone. Go
- 方法一:def dict_to_numpy_method1(dict): dict_sorted=sorted(dict.iteritems
- 1:为什么每个layout下都有个inlayout?我们将layout的宽/浮动等属性设置好之后,对于layout内的padding和mar
- 第一次打包vue的项目部署到服务器下时,发现初次加载特别的缓慢,将近20s页面才加载出来,完全没有开发环境上的那么流畅。主要原因是页面在打包
- scipy.optimize函数使用简单使用scipy.optimize,训练逻辑回归损失函数,得到权值。scipy.optimize模块包