Retina时代的前端视觉优化
随着New iPad的发布,平板也将逐渐进入Retina时代,在高分辨率设备里图片的显示效果通常不尽人意,为了达到最佳的显示效果就需要对图片进行优化,这里介绍一些优化方法:
一、用CSS替代图片
这一点在任何时候都适用;只是在当前我们可以更多的使用样式表来制作出设计效果,CSS3的圆角、渐变、模盒阴影、字体阴影能帮助我们处理绝大多数视觉效果,并且在各种分辨率下都有良好的表现。
二、为高分辨率设备提供高清图片
如果必须使用图片,通常是准备2套图片,一套原始尺寸( 为普通设备准备 ),一套两倍尺寸( 为高分辨设备准备 ),再根据设备的分辨率调用不同的图片,调用的方式有2种:
1.使用CSS媒体查询( CSS media queries ),适用于根据不同分辨率来加载不同的背景图片
内联样式:
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2){
/* 2倍分辨率 执行样式*/
}
外链样式:
<link href="retina.css" rel="stylesheet" type="text/css" media="only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)"/>
2.使用Javascript替换图片地址,适用于<img>标签加载的外链图片
首先使用 window.devicePixelRatio 来判断是否为高分辨率,然后替换图片的地址。
想了解此方法的细节,可以参考下这篇分析apple.com方案的文章:
http://blog.cloudfour.com/how-apple-com-will-serve-retina-images-to-new-ipads/
下面是文中提到的 image_replacer.js 源码:
https://gist.github.com/2029936
三、 Icon优化
独特的Icon是大多数网站必备的设计元素,常规的处理方式是使用 sprite 技术,配合上面介绍的 CSS media queries 方法达到最优的显示效果,除此之外前端工程师也在探索一些新的优化方式:
1.Icon Fonts
将图标制作成特殊的字体,然后使用CSS3的自定义字体(@font-face)调用
优点:
- 文件体积小,一般20-50kb;
- 图标可以通过CSS更改尺寸和颜色,添加阴影,hover颜色等。
缺点:
- 制作成本较高,你需要矢量图形处理软件和专业的字体制作软件;
- 不易维护,不同浏览器支持的字体格式不一样,需要制作多份。
一些现成的Icon Fonts资源,基本可满足常规的设计需求:
- MODERN PICTOGRAMS

- Font-Awesome

- Social Media Icons Pack

- PulsarJS @FontFace
- ClickBits Web Icon System( 需付费 )
如果你对Icon Fonts的制作方法感兴趣可以参考这篇文章《CSS3 icon font完全指南》:
http://www.qianduan.net/css3-icon-font-guide.html
2.CSS Icon
与Icon Fonts思路类似,不同的是使用CSS来制作各种图标
优点:
- 文件体积小,尺寸与Icon Fonts相当
- 同样可以随意修改尺寸和颜色,添加阴影等。
- 修改方便,调用灵活
缺点:
- 受限于浏览器渲染能力,在不同浏览器中表现不一
资源:
关于CSS Icon的制作会在以后做介绍( 先挖个坑=。= )
3.SVG Icon
SVG是一种可伸缩矢量图形,调用方式和jpg、png等格式图片一样,通过CSS即可加载:
background-image: url('sprite.svg');
优点:
- 文件体积小,因为SVG是XML格式定义图形,所以可压缩性更高
- 在缩放时图形质量不会有所损失
- 可以用来动态生成图形
缺点:
- 同样受限于浏览器,支持SVG的浏览器有:Internet Explorer 9+、Firefox 4+、Chrome 4+、Safari 4+、Opera 9.5+
四、Canvas图片处理
这个方法有点偏门,来自嗷嗷的一篇文章:Retina 显示屏下 @2x 图片的模拟
优点
- 大部分图片效果比原来好,不用做@2x 的图片
- 多终端统一维护,脚本渐进增强
- 文件小省带宽,3G 时还是有一定的优势 用EDGE的就更不用说了。
缺点
- 效果真心没 @2x的好,当然如果有更好的算法也难说
- canvas 读图片数据存在跨域问题
- 锐化目前的实现,基本就是读点的操作,大图片手机估计吃不消
写在最后
达到高分辨率下最佳的视觉效果固然不错,但加载速度也是用户体验重要指标之一。所以有时候我们也要在优质与高速之间找一个平衡点,这里可以通过 navigator.connection 来判断用户的网络环境,如果是EDGE那还是斟酌下是否要给用户提供高清图片。
Retina时代的前端视觉优化的更多相关文章
- Java Web 前端高性能优化(二)
一.上文回顾 上回我们主要从图片的合并.压缩等方面介绍前端性能优化问题(详见Java Web 前端高性能优化(一)) 本次我们主要从图像BASE64 编码.GZIP压缩.懒加载与预加载以及 OneAP ...
- 前端性能优化(三)——传统 JavaScript 优化的误区
注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几 ...
- Web前端性能优化全攻略
网页制作poluoluo文章简介:Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多网站无情忽视的技术. Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多 ...
- Web前端性能优化全攻略[转载]
1. 尽量减少 HTTP 请求 (Make Fewer HTTP Requests) 作为第一条,可能也是最重要的一条.根据 Yahoo! 研究团队的数据分析,有很大一部分用户访问会因为这一条而取得最 ...
- [好文翻译]WEB前端性能优化的14条规则
作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...
- 前端性能优化:细说JavaScript的加载与执行
本文主要是从性能优化的角度来探讨JavaScript在加载与执行过程中的优化思路与实践方法,既是细说,文中在涉及原理性的地方,不免会多说几句,还望各位读者保持耐心,仔细理解,请相信,您的耐心付出一定会 ...
- 前端项目优化 -Web 开发常用优化方案、Vue & React 项目优化
github github-myBlob 从输入URL到页面加载完成的整个过程 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来 接下来是 TCP 握手 ...
- Js基础知识(五) - 前端性能优化总结
前端性能优化总结 资源优化 缓存 最好的资源优化就是不加载资源.缓存也是最见效的优化手段.说实话,虽然说客户端缓存发生在浏览器端,但缓存主要还是服务端来控制,与我们前端关系并不是很大.但还是有必要了解 ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
随机推荐
- 使用J2SE API读取Properties文件的六种方法
1.使用java.util.Properties类的load()方法示例: InputStream in = lnew BufferedInputStream(new FileInputStream( ...
- HRESULT:0x80070057 (E_INVALIDARG)的异常
错误信息: 未能加载文件或程序集……或它的某一个依赖项.参数不正确. (异常来自 HRESULT:0x80070057 (E_INVALIDARG)) English:Could not load f ...
- Codeforces Round #332 (Div. 2)
水 A - Patrick and Shopping #include <bits/stdc++.h> using namespace std; int main(void) { int ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1 - 条件判断法
本文来源于:http://blog.csdn.net/zhubaitian/article/details/39293883 Robotium的测试类ActivityInstrumentationTe ...
- Linux添加Terminal快捷键和文件系统的总结
一:Fedora 怎样设置终端快捷键 百度连接:http://jingyan.baidu.com/article/cb5d61053598ed005d2fe05c.html ubuntu里面不用设置就 ...
- git 回滚
git reset --hard HEAD~10 可以通过上面的命令会退到最初的版本查看源代码, git reset --hard 4aa9a32d1625997ef5b28463ccde78d711 ...
- Boom.TV完成350万美元融资,目标直指VR电竞直播
3D在线电竞直播平台Boom.tv刚刚宣布已经完成350万美元的融资,该平台旨在让观众在任何设备以任意视角观看电竞比赛,并将支持VR版本. 这家位于美国加州红木城的初创公司成立于2015年,由Gupt ...
- ORACLE11g JDBC Driver
http://blog.163.com/z_rx/blog/static/276363762011312947507/ ORACLE服务器端安装程序找到相应目录"x$\app\Adminis ...
- codeforces round #234B(DIV2) B Inna and New Matrix of Candies
#include <iostream> #include <vector> #include <string> #include <algorithm> ...