- 减少依赖文件 : 更少的文件意味着更少的http请求与更快的加载时间
- 降低图片大小: 适应与调整高分辨率图片,在额外的下载时间中占居榜首,占用了宝贵的内存与处理资源。
- 减轻客户端负担: 最佳实践是重新思考你的javascript,并使之降低到最小尺寸
一、怎样减少依赖文件
1.如果你想为移动端用户隐藏图片,display:none
与visibility:hidden
是不能阻止文件下载的。
替代方案是利用css加载背景图片,之后利用media query媒体查询来通过条件隐藏图片。
亚马逊独立的移动端页面使用了此种技术,根据设备来条件加载特定的图片。
<meta name="viewport" content="width=device-width"> <style> @media (max-width:600px) { .image { display:none; } } @media (min-width:601px) { .image { background-image: url(image1.jpg); } } </style> <div class="image"></div>
2.保持最小数量的外联样式表
你需要把多个文件合并在一个文件里,减少http请求。另一种方法,你可以通过后端处理,通过判断设备来自动插入样式表。 (这种方式在wordpress.com的响应式网站中使用过)。
另一种方案可以使用内部样式。亚马逊独立的移动产品页面有一个6 KB大小的外部样式表,连同一些内部样式。这只需要通过一个额外的HTTP请求来下载所有的页面样式。亚马逊的桌面版本并不是很高效,带有9个外部样式表,总共40 KB。
3.利用CSS3代替图片
圆角,阴影,渐变填充等,这些样式不需要使用图片,可以减少http请求,加快加载时间。
Css3可以减少http请求,但增加了处理负荷。我们创建了一系列的html文件,每个文件包含一个基本的css3特性。参考下面的图表,你可以发现css3带来的处理时间很小,但不能不考虑。特别注意box-shadow
对处理时间的影响最大。
4.DATAURI来代替图片与WEB字体文件
Data uri方案可以不使用任何额外资源就可以向html及css中插入内容。这个技术可以在web页面中插入任何内容,通常被用于插入图片及web字体文件。这个技术最大的好处是可以减少http请求。
Data uri使用很简单,你可以按照下面的格式,使用base64编码过的数据直接插入html与css中代替图片文件。
data:[MIME-type][;charset=encoding][;base64],[data]
Wordpress.com的响应式网站使用这个技术插入了图片及字体。波士顿环球报的响应式网站也使用了这个技术,他们的网站在智能手机上,四秒内就加载完毕了。
使用这项技术,从此不用为外部图片及字体文件劳心费神。也需要测试与比较是否值得应用这项技术来代替传统方式。
5.可缩放矢量图形(SVG)而不是图片
就像data URIs,可缩放矢量图形(SVG)可以被嵌入到一个页面来减少HTTP请求数。例如,下面的图片是一个内联SVG:
<svg version="1.1" id="drop" x="0px" y="0px" width="17.812px" height="28.664px" viewBox="296.641 381.688 17.812 28.664" enable-background="new 296.641 381.688 17.812 28.664" xml:space="preserve"> <path fill="#EE1C4E" d="M314.428,401.082c-0.443-5.489-5.146-9.522-7 .52-14.186c-0.816-1.597-1.352-5.208-1.352-5.208 s-0.555,3.792-1.388 ,5.425c-2.233,4.371-7.127,8.999-7.507,14.047c-0.36,4.794,4.101,9.191 ,8.896,9.191 C310.49,410.354,314.816,405.941,314.428,401.082z"/> </svg>
SVG文件可以通过一个矢量图形编辑器,如Adobe Illustrator创建。一旦创建,在文本编辑器中打开文件并把其代码拷贝出来(减去任何不必要的数据)。
上面的代码在HTML文件中会生效,,但不会在样式表中生效。若在一个样式表中嵌入SVG文件,需要先将它转换为一个数据URI
data:image/svg+xml[;base64],[data]
代码如下:
background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0i MS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx 1c3RyYXRvciAxNS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOi A2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL 0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8x LjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzE iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Im h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3a WR0aD0iMTcuODEycHgiIGhlaWdodD0iMjguNjY0cHgiIHZpZXdCb3g9IjI5Ni42NDEg MzgxLjY4OCAxNy44MTIgMjguNjY0Ig0KCSBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDI 5Ni42NDEgMzgxLjY4OCAxNy44MTIgMjguNjY0IiB4bWw6c3BhY2U9InByZXNlcnZlIj 4NCjxwYXRoIGZpbGw9IiNFRTFDNEUiIGQ9Ik0zMTQuNDI4LDQwMS4wODJjLTAuNDQzL TUuNDg5LTUuMTQ2LTkuNTIyLTcuNTItMTQuMTg2Yy0wLjgxNi0xLjU5Ny0xLjM1Mi01 LjIwOC0xLjM1Mi01LjIwOA0KCXMtMC41NTUsMy43OTItMS4zODgsNS40MjVjLTIuMjM zLDQuMzcxLTcuMTI3LDguOTk5LTcuNTA3LDE0LjA0N2MtMC4zNiw0Ljc5NCw0LjEwMS w5LjE5MSw4Ljg5Niw5LjE5MQ0KCUMzMTAuNDksNDEwLjM1NCwzMTQuODE2LDQwNS45N DEsMzE0LjQyOCw0MDEuMDgyeiIvPg0KPC9zdmc+DQo=);
6.Sprites图
Sprites(雪碧图)技术可以把经常使用的图片合成为一张图片,从而减少http请求。比如当你将四张图片合成到一个sprite中后,http请求从4减少到1.需要显示的图片利用background-position
属性来控制。
7.字体图标
字体图标是利用字体文件来包含符号和图表(如Wingdings或Webdings 都是某种图标字体),可以用来代替加载一个图像文件。
Wingdings和Webdings有点过气了,现在有其他更专业的Web字体可用的,可以通过font-face
加载。
单独的Web字体,对于所有图标来讲,HTTP请求的数量可以减少到一个。如果Web字体使用数据URI(如上所述)嵌入页面,HTTP请求可以减少到零。这正是WordPress.com使用的技术。
WordPress.com访问所有这些图标,不会有任何额外的HTTP请求,因为图标通过数据URI,以Web字体的方式嵌入到WordPress的样式表中。
同时,字体图标可以使用CSS3关键帧动画(这很有用,比如“加载”图标(小菊花))。 主要的缺点是,字体图标做成的CSS sprites只能是某个纯色。亚马逊的css雪碧图包括彩色图标,因此它不能使用这种技术。
如IcoMoon之类的工具可以很方便的建立一个自定义Web字体。所需要的只是每个图标的SVG文件。
8.避免内联iframe
每一个内联框架(iframe)都会生成一个HTTP请求,这是在iframe内没有另外依赖资源的情况下。这是我们做一个快速测试,比较一个iframe只含有文本。
包含一个iframe增加了将近0.2s的加载时间。为了保证web站点加载迅速,最好不要使用iframe。
9.移动先行
移动先行也适用于前端开发。
编码时以移动用户作为第一考虑,然后为平板电脑和桌面逐步增强,减少不必要的依赖。另外一种方式为桌面端优先,重型组件默认加载,然后为小屏幕隐藏这些组件(称为“优雅降级”)。
下面例子为桌面端优先的编码:
<style> .image { background-image: url(image1.jpg); } @media (max-width:390px) { .image { display: none; } } </style> <div class="image"></div>
在上面的代码中,默认是显示图像,然后在移动设备上通过媒体查询隐藏了图片。
下面的例子为移动端优先的编码:
<style> @media (min-width:391px) { .image { background-image: url(image1.jpg); } } </style> <div class="image"></div>
默认情况下,图片不显示,之后使用媒体查询对更大的屏幕进行渐进增强。
10.拆分到多个页面(单独的移动网站)
保持你的核心内容在页面上,之后提供到次要内容的链接到次要内容。这将减少HTML的加载负担,同时防止相关的资源被下载。
亚马逊的移动产品页面有通用的产品信息,同时提供链接到“用户评论”、“描述和细节”和“新&
使用提供。
这就减少了三张图片的HTTP请求,且HTML的大小减少45 KB。
11.保持最少重定向(单独的移动网站)、
亚马逊有一个重定向,来引导游客到单独的移动页面,这带来了0.4秒的延迟。与之相比,戴尔的网站有两个重定向,带来了1.2秒延迟。
二、如何缩小图片尺寸
1.响应式图片
响应式图片的思路是让访客图像只下载那些最适合他们的设备的图片,对于智能手机,使用低分辨率图像,可以快速下载和渲染。
亚马逊的独立的移动产品页面使用响应式图像技术,利用媒体查询分配一个特定的背景图像到一个div。这是亚马逊的代码:
<!-- // This meta viewport is inserted for iPhones // --> <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0"> <!-- // This meta viewport is inserted for the Nexus S // --> <meta name="viewport" content="width=device-width"> <style> @media (max-width:390px) { #image-container { max-width: 109px; } .image { background-image: url(image1.jpg); } } @media (max-width:390px) and (-webkit-min-device-pixel-ratio:1.5) { .image { background-image: url(image2.jpg); } } @media (max-width:390px) and (-webkit-min-device-pixel-ratio:2) { .image { background-image: url(image3.jpg); } } @media (min-width:391px) and (max-width:500px) { #image-container { max-width: 121px; } .image { background-image: url(image4.jpg); } } @media (min-width:391px) and (max-width:500px) and (-webkit-min-device-pixel-ratio:1.5) { .image { background-image: url(image5.jpg); } } @media (min-width:391px) and (max-width:500px) and (-webkit-min-device-pixel-ratio:2) { .image { background-image: url(image6.jpg); } } @media (min-width: 501px) and (max-width: 767px) { #image-container { max-width: 182px; } .image { background-image: url(image5.jpg); } } @media (min-width: 501px) and (max-width: 767px) and (-webkit-min-device-pixel-ratio:1.5) { .image { background-image: url(image7.jpg); } } @media (min-width: 501px) and (max-width: 767px) and (-webkit-min-device-pixel-ratio:2) { .image { background-image: url(image8.jpg); } } @media (min-width:768px) { #image-container { max-width: 303px; } .image { background-image: url(image8.jpg); } } @media (min-width:768px) and (-webkit-min-device-pixel-ratio:1.5) { .image { background-image: url(image8.jpg); } } @media (min-width:768px) and (-webkit-min-device-pixel-ratio:2) { .image { background-image: url(image8.jpg); } } </style> <div id="image-container"> <div class="image"> <img src="image1.jpg" /> </div> </div>
尽管亚马逊在内部样式中有八个产品图片,在竖屏模式下的iPhone 4或Nexus S只有两个被下载。
《波士顿环球报》的响应式网站,采用了利用不同的data-fullsrc
来加载图片的响应式图像技术。这是一个html标记,和一个服务器端JavaScript重定向规则的组合:
<img alt="" src="mobile-size.r.jpg" data-fullsrc="desktop-size.jpg" />
src
是手机上使用的图像,确保网站默认为尺寸较小的版本(移动先行),而data-fullsrc
是全尺寸的图像。JavaScript用来检测设备的屏幕大小,之后写入cookie
。对于大屏幕,JavaScript利用data-fullsrc
上的高分辨率图像替换较小的图片。服务器也使用Apache重写规则,来在图像文件的名称中检查.r.
(mobile用的图片带有.r.
),同时显示一个备用GIF,而不会使用较小的移动图像(从而防止手机大小的图像被下载到桌面)。
微软的响应式网站使用的斯科特·杰尔的Picturefill技术:
<div data-picture data-alt="Alternate text here"> <div data-src="image1.png"></div> <div data-src="image2.png" data-media="(min-device-pixel-ratio: 2.0)"></div> <div data-src="image3.png" data-media="(max-width: 539px)"></div> <div data-src="image4.png" data-media="(max-width: 539px) and (min-device-pixel-ratio: 2.0)"></div> <noscript><img src="image1.png" alt="Alternate text here" /></noscript> </div>
注意:上面的代码片段中, data-picture= " "
应该是 data-picture
,没有= " "。(=字符是smashing magazine的所见即所得编辑器自动插入的)。利用这种技术,JavaScript扫描页面的代码,发现包含data-picture
属性的div
。然后根据data-media
属性插入一个新的img
标签。
这些响应式图像技术的主要好处有:
- 小屏幕下载低分辨率的图像,而大屏幕下载高分辨率图像;
- 只下载所需的图片,而不需要的图片不在后台加载。
有各种各样的其他技术实现响应式图像。你可以查看这些资源,了解更多的细节:
三、如何减少客户端处理
让JAVASCRIPT降到最低
星巴克的响应式网站在 chrome下禁用javascript后,桌面端良好的网络环境下花费了3.53秒加载完毕,而启用javascript后,花费了4.73秒,增加了 34%。Javascript对加载时间的影响,在移动端较小的内存,cpu及缓存下会表现得更明显。通常,我们要重新思考javascript的使用, 并保持其在最小尺寸。
一个很好的例子是BBC移 动网站的JavaScript。网站不使用外部JavaScript文件——都是内联。内联脚本仅限于几行,没有显著影响内存,HTML文件和所有内联 JavaScript花费0.78秒加载完毕。就像BBC那样,亚马逊的移动产品页面也没有外部JavaScript文件,而使用最少的内联脚本。 HTML文件和所有内联JavaScript花费0.75秒加载完毕。
(请注意,jQuery不是一个轻量的替代方案,事实上是jquery本身的补充。)这两个网站在iPhone 4下均在4秒内加载完毕。使用一个JavaScript框架前,考虑它是否真的有必要。在某些情况下,使用少量的JavaScript比调用一个框架更有效。
避免组件
组件对实际加载时间的影响是灾难性的。为了验证这一点,我们创建了一系列简单的HTML文件,每个文件包含默认的嵌入代码,一个小部件。你可以看到下面的结果多糟糕。注意,这不是一个完美的测试,因为这些都是在模拟环境中的可控实验,不过结果比较有意思。
在单个页面中,结合他们为一个小部件,结果只包含这个部件的情况下,加载时间长达4秒。
服务器端(后端)技术
除了优化前端,服务器端技术也可以用来加速加载时间。这些技术都值得考虑,但不会在本文中介绍:
- 缓存HTTP重定向来加速重复访问;
- 合并HTTP重定向链来减少重定向;
- 使用HTTP压缩来减少数量的字节(Gzip或缩小)。
测试移动设备上的性能
由于移动设备的不可预知性,测试多个设备上的性能是很重要的。这里有一些免费的性能测试工具:
- Mobitest,Akamai: 可以对对iPhone 4的 iOS 5.0,iPhone 3 g和Nexus S 生成瀑布图和HAR文件 .注意Nexus S测试结果与我们自己的内部测试不一致。我们的服务器访问日志显示,当我们测试实际安卓2。x设备时产生了更少的HTTP请求。
- “Network Panel,” Chrome Developer Tools
结论
为了满足移动用户的高期望,你需要对网站针对移动设备进行优化,在4秒或更少的时间里加载完毕。最好的方式来达到4秒这个魔术时间,是通过减少JavaScript和优化HTML、CSS和图像,保持智能手机上最少的处理负荷。
使用上面介绍的技术,你就可以自己建立一个符合潮流的移动互联网体验!你有什么要补充的吗?在评论中让我们知道。
出处:http://www.w3cplus.com/performance/build-fast-loading-mobile-website.html
相关推荐
在移动端应用和网页设计中,"下拉刷新"和"下拉加载更多"是两种非常重要的交互功能,它们极大地提升了用户的浏览体验。这两种技术主要应用于数据流无尽滚动的场景,比如社交媒体、新闻聚合和电商产品列表等。下面将...
网站源代码前端交互是构建现代网页和应用的关键环节,尤其在移动端转换方面,它涉及到如何使网站在手机和平板等小屏幕设备上呈现良好用户体验。在这个过程中,HTML、JavaScript(js)、jQuery(jq)和CSS(cs)这四...
5. **预约管理**:用户可以直接在网站上预约摄影服务,填写相关信息如日期、时间、需求等,系统会自动管理这些预约,确保摄影师的工作安排有序。 6. **品牌**:最后,品牌页面用于介绍摄影师或工作室的品牌故事、...
在现代互联网世界中,Web前端移动端开发已经成为了一个不可或缺的领域,尤其随着移动设备的普及,为手机和平板电脑设计响应式、交互性强的网站变得至关重要。"web前端移动端开发网站源码"涉及到的关键技术包括HTML、...
SEO优化结构 — 良好的SEO结构让你的网站更容易被搜索引擎发现,提升品牌曝光度,带来更多潜在客户。 作为一名程序员,时间就是金钱,效率就是生命。合理利用模板,让你的项目开发事半功倍,立刻启动你的互联网成功...
在这个“h5响应式适配移动端网站模板”中,我们可以找到几个核心知识点: 1. **响应式设计原理**:响应式设计的核心理念是“流式布局”,通过CSS3的媒体查询(Media Queries)来定义不同屏幕尺寸下的样式规则。这种...
在移动端应用中,"下拉加载更多"是一种...通过以上步骤和技巧,你可以基于jQuery在移动端实现"下拉加载更多"的功能,为用户提供流畅、高效的浏览体验。在实际开发中,根据项目需求进行调整和优化,确保性能和用户体验。
在"60多套html5移动端模板"中,你将发现多种风格和功能各异的设计,可用于各种用途,如企业网站、电子商务平台、个人博客、产品展示等。 HTML5是超文本标记语言的最新版本,它引入了许多新特性,增强了网页的交互性...
模板可能内置或预留接口与第三方预订系统集成,允许用户直接在网站上预订旅行服务。 9. **地图集成**:利用Google Maps或其他地图API,可以展示旅游地点的位置,方便用户规划路线和了解周边设施。 10. **社交媒体...
SEO优化结构 — 良好的SEO结构让你的网站更容易被搜索引擎发现,提升品牌曝光度,带来更多潜在客户。 作为一名程序员,时间就是金钱,效率就是生命。合理利用模板,让你的项目开发事半功倍,立刻启动你的互联网成功...
在实际项目应用中,HUI框架可以广泛应用于各种类型的移动端应用,如电商网站、社交应用、新闻资讯平台等。例如,在电商应用中,HUI的购物车、商品详情页、分类导航等组件能快速构建出符合用户习惯的界面。在社交应用...
在当今信息化社会,移动设备的普及使得移动端购物网站成为企业和个人开发者关注的焦点。本项目名为“移动端购物网站”,它利用了先进的Web技术来创建一个适应手机和平板等移动设备的在线购物平台。通过使用Jquery...
HTML5 移动端网站源码是现代网页开发的重要组成部分,尤其在移动设备普及的今天,为手机和平板等设备优化的网站设计变得至关重要。"60套html5移动端网站源码"提供了一整套的资源集合,这些源码可以帮助开发者快速...
在移动端网页开发中,开发者面临着一系列独特的挑战,如屏幕尺寸各异、触摸交互、网络环境不稳定等。本资源包“移动端网页开发可参考源代码...如果你在使用过程中遇到问题,可以寻求提供者协助,进一步提升自己的技能。
在移动互联网时代,用户界面的交互性和视觉效果成为了吸引用户的重要因素,而移动端轮播图作为一种常见的网页元素,被广泛应用于各种应用程序和网站,包括携程移动端。它不仅可以展示多个广告或重要信息,还能通过...
在移动端应用开发中,下拉分类是一种常见的交互设计模式,用于优化用户界面并提供更高效的操作体验。这种设计尤其适用于屏幕尺寸有限的设备,如智能手机和平板电脑,它可以帮助用户在多个类别间轻松切换,而无需打开...
在IT行业中,搜索引擎优化(SEO)是一项至关重要的技术,它涉及到如何提高网站在搜索引擎结果页面上的排名,从而吸引更多的自然流量。本项目专注于PC和移动端的SEO排名,具体包括了百度、360搜索以及搜狗这三个主流...
在移动端UI设计中,界面设计构成包括了屏幕布局、元素分布、色彩搭配、字体选择等基本元素。设计师需要考虑如何将功能和信息以直观、清晰的方式呈现给用户。布局应遵循人机交互原则,如F型阅读模式,确保用户能快速...
### 费者2016 ─ 一场趋向移动端消费的转型 #### 一、概览 《费者2016 ─ 一场趋向移动端消费的转型》报告主要聚焦于中国移动端消费市场的快速发展及其背后的驱动力。该报告由毕马威国际委托Intuit Research进行,...
而今天我们要探讨的是其在移动端的延伸——"Ant Design风格移动端分享版",一个专门针对iPhone设备设计的原型,它旨在为移动应用设计提供一套完整且一致的视觉语言和交互规范。 首先,Ant Design风格的核心在于其...