如何提升网站在移动端的打开速度
如何提升网站在移动端的打开速度
如何提升网站在移动端的打开速度大部分人对移动端的浏览体验感到失望,同时当体验提升时,他们会在智能手机上花费更多的时间。因为64%的智能手机用户希望网站可以在4秒内加载完毕,但一半的网站花费了二倍以上的时间,达到了9秒。下面简单介绍一些可以使你的网站在移动端跑得更快的技术。
然而下载速度并不是瓶颈,网络延迟及智能机的内存与cpu才是瓶颈。即使手机可以在4秒内下载完1mb,页面也要花费更长的时间去加载,因为手机需要接收并解析代码与图片。
在桌面端,下载文件只占显示网站时间的20%,其余时间花费在解析http请求,获取样式表,脚本文件及图片上。由于移动端的cpu,内存与缓存跟桌面端完全无法相提并论,这些在手机上会花费更长的时间。
怎样减少加载时间
- 减少依赖文件 : 更少的文件意味着更少的http请求与更快的加载时间
- 降低图片大小: 适应与调整高分辨率图片,在额外的下载时间中占居榜首,占用了宝贵的内存与处理资源。
- 减轻客户端负担: 最佳实践是重新思考你的javascript,并使之降低到最小尺寸
怎样减少依赖文件
如果你想为移动端用户隐藏图片,display:none
与visibility:hidden
是不能阻止文件下载的。测试下面的代码:
<li style="display:none;">
<img src="image1" />
</li>
<li style="visibility:hidden;">
<img src="image2" />
</li>
你可以观察下面的瀑布图,图片容器设置display: none
或visibility: hidden
后仍然会被下载。
替代方案是利用css加载背景图片,之后利用media query媒体查询来通过条件隐藏图片。这个技术最初被Jason grigsby测试过,之后被tim kandlec进一步拓展。亚马逊独立的移动端页面使用了此种技术,根据设备来条件加载特定的图片。
<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>
<li class="image"></li>
你可以看到图片不加载的瀑布图:
保持最小数量的外联样式表
你需要把这些文件合并在一个文件里,减少http请求。另一种方法,你可以通过后端处理,通过判断设备来自动插入样式表。
另一种方案可以使用内部样式。亚马逊独立的移动产品页面有一个6 KB大小的外部样式表,连同一些内部样式。这只需要通过一个额外的HTTP请求来下载所有的页面样式。
Sprites图
Sprites(雪碧图)技术可以把经常使用的图片合成为一张图片,从而减少http请求。比如当你将四张图片合成到一个sprite中后,http请求从4减少到1.需要显示的图片利用background-position
属性来控制。
避免内联
iframe
每一个内联框架(iframe)都会生成一个HTTP请求,这是在iframe内没有另外依赖资源的情况下。这是我们做一个快速测试,比较一个iframe只含有文本。
为了保证web站点加载迅速,最好不要使用iframe。
拆分到多个页面(单独的移动网站)
保持你的核心内容在页面上,之后提供到次要内容的链接到次要内容。这将减少HTML的加载负担,同时防止相关的资源被下载。
亚马逊的移动产品页面有通用的产品信息,同时提供链接到“用户评论”、“描述和细节”和“新&
使用提供。
这就减少了三张图片的HTTP请求,且HTML的大小减少45 KB。
保持最少重定向(单独的移动网站)
亚马逊有一个重定向,来引导游客到单独的移动页面,这带来了0.4秒的延迟。与之相比,戴尔的网站有两个重定向,带来了1.2秒延迟。
如何缩小图片尺寸 : 响应式图片
响应式图片的思路是让访客图像只下载那些最适合他们的设备的图片,对于智能手机,使用低分辨率图像,可以快速下载和渲染。
亚马逊的独立的移动产品页面使用响应式图像技术,利用媒体查询分配一个特定的背景图像到一个li。这是亚马逊的代码:
<style>
@media (max-width:390px) {
#image-container {
max-width: 109px;
}
.image {
background-image: url(image1);
}
}
@media (max-width:390px) and (-webkit-min-device-pixel-ratio:1.5) {
.image {
background-image: url(image2);
}
}
@media (max-width:390px) and (-webkit-min-device-pixel-ratio:2) {
.image {
background-image: url(image3);
}
}
@media (min-width:391px) and (max-width:500px) {
#image-container {
max-width: 121px;
}
.image {
background-image: url(image4);
}
}
@media (min-width:391px) and (max-width:500px) and (-webkit-min-device-pixel-ratio:1.5) {
.image {
background-image: url(image5);
}
}
@media (min-width:391px) and (max-width:500px) and (-webkit-min-device-pixel-ratio:2) {
.image {
background-image: url(image6);
}
}
@media (min-width: 501px) and (max-width: 767px) {
#image-container {
max-width: 182px;
}
.image {
background-image: url(image5);
}
}
@media (min-width: 501px) and (max-width: 767px) and (-webkit-min-device-pixel-ratio:1.5) {
.image {
background-image: url(image7);
}
}
@media (min-width: 501px) and (max-width: 767px) and (-webkit-min-device-pixel-ratio:2) {
.image {
background-image: url(image8);
}
}
@media (min-width:768px) {
#image-container {
max-width: 303px;
}
.image {
background-image: url(image8);
}
}
@media (min-width:768px) and (-webkit-min-device-pixel-ratio:1.5) {
.image {
background-image: url(image8);
}
}
@media (min-width:768px) and (-webkit-min-device-pixel-ratio:2) {
.image {
background-image: url(image8);
}
}
</style>
<li id="image-container">
<li class="image">
<img src="image1">
</li>
</li>
星巴克的响应式网站在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比调用一个框架更有效。
避免组件
组件对实际加载时间的影响是灾难性的。
服务器端(后端)技术
除了优化前端,服务器端技术也可以用来加速加载时间。这些技术都值得考虑:
- 缓存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和图像,保持智能手机上最少的处理负荷。
- django对话框(基于django channel实现websocket的聊天室的方法示例)
- vue websocket实时刷新数据(Vue+WebSocket页面实时刷新长连接的实现)
- WEB API 中get、post、put,delete请求方式
- 服务器宕机处理方式(web服务器宕机监控方法大全)
- tomcat部署web项目常见问题(关于tomcat部署应用无法访问前端页面的问题)
- pythonsocket编写web服务器(局域网内python socket实现windows与linux间的消息传送)
- 做网站是使用nginx还是apache(web服务器软件Apache与Nginx的对比分析)
- 最小web服务器linux系统(常用的web服务器软件整理win+linux)
- 常见的sql注入技术(浅谈一次与sql注入 & webshell 的美丽“邂逅”)
- web.config自定义配置节点,将多个节点合并
- 静态web服务器nginx(WEB服务器该选择 Apache 还是 Nginx?)
- pythondjango搭建web(PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上)
- 属于web服务器的有哪些(web服务器有几种类型?)
- asp的定义和意义(小旋风ASPWEBServer是什么?有什么作用?)
- 常见的web应用服务器有哪些(常用的web服务器软件整理)
- 搭建lamp平台并测试(浅谈Web服务器的构架:LAMP LNMP以及LLMP)
- 电影《民间怪谈录之走阴人》定档8月5日,开启一场中式惊悚之旅(电影民间怪谈录之走阴人定档8月5日)
- 原创图画书,以儿童视角讲述中国故事(以儿童视角讲述中国故事)
- 八月再见 愿你岁月不扰,余生静好(八月再见愿你岁月不扰)
- 赏读 八月再见,九月你好(赏读八月再见九月你好)
- 散文 八月再见,九月,我在风中等你(散文八月再见九月)
- 8月再见 9月你好(8月再见)
热门推荐
- input的autocomplete="off"属性
- h5嵌入app解决方案(app内嵌H5 webview 本地缓存问题的解决)
- pandas怎么写入csv文件(Pandas读写CSV文件的方法示例)
- SQL中的CONVERT()函数
- mysql触发器入门(MySQL中触发器和游标的介绍与使用)
- python语言支持多态(Python实现多态、协议和鸭子类型的代码详解)
- php的字符串表达方法(php中字符串和整数比较的操作方法)
- sqlserver存储过程参数默认值(sql server使用临时存储过程实现使用参数添加文件组脚本复用)
- dedecms更改主页模板(dedecms首页调用专题页描述和链接的实现方法)
- servertemporarilyunavailable(Service Temporarily Unavailable的503错误是怎么回事?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9