众所周知,在互联网行业里,移动端占有的比例越来越高了,尤其实在电商领域,用户购物大部分在移动端。比如淘宝双11,在移动端支付的接近7成。这就要求我们产品质量越来越高,那对于我们前端工程师来说也是一个挑战,如何让我们所开发的页面能有更好的体验,就是我们今天讨论的话题:移动端页面性能优化。

Html5的出现对于移动端影响挺大,HTML5框架可以提升网站的访问速度,通过优化前端将响应时间加快,使用户的等待时间减少,所谓前端是指在客户端通过浏览器发送了一个请求,除去后台系 统用户请求、执行数据查询并对结果进行组织所需要处理消耗的时间,在涌现的新技术中,JavaScript和一套新的API纯脚本技术,是HTML5核 心,需要通过JavaScript有许多方法可以用来检测HTML5的支持能力。

对于访问量大的网站来说,前端的优化是必须的,即使是优化1KB的大小对其影响也很大,下面马海祥就带大家来看看移动手机平台的HTML5前端优化,或许对你有帮助和启发。

如何优化HTML5在移动设置上的性能表现,首先我们需要明确以下几个原则:

1、PC优化手段在Mobile侧同样适用。
2、在Mobile侧我们提出三秒种渲染完成首屏指标。
3、基于第二点,首屏加载3秒完成或使用Loading。
4、基于联通3G网络平均338KB/s(2.71Mb/s),所以首屏资源不应超过1014KB。
5、Mobile侧因手机配置原因,除加载外渲染速度也是优化重点。
6、基于第五点,要合理处理代码减少渲染损耗。
7、基于第二、第五点,所有影响首屏加载和渲染的代码应在处理逻辑中后置。
8、加载完成后用户交互使用时也需注意性能。

我们可以先看下面的一张图片:

从上图可以看出,上面基本涵盖所有的优化方案了。在这里,只是针对其中几个代表性方案出来探讨。

加载优化

对于移动端的网页来说,加载过程是最为耗时的过程,可能会占到总耗时的80%时间,因此是优化的重点,当然,手机站的其他前端要素优化也是不能忽略的。

1、减少HTTP请求

因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个,马海祥建议的优化要点为以下2点:

1、合并CSS、JavaScript
2、合并小图片,使用雪碧图

2、缓存

使用缓存可以减少向服务器的请求数,节省加载时间,所以所有静态资源都要在服务器端设置缓存,并且尽量使用长Cache(长Cache资源的更新可使用时间戳)。

1、缓存一切可缓存的资源
2、使用长Cache(使用时间戳更新Cache)
3、使用外联式引用CSS、JavaScript

3、压缩HTML、CSS、JavaScript

减少资源大小可以加快网页显示速度,所以要对HTML、CSS、JavaScript等进行代码压缩,并在服务器端设置GZip。

1、压缩(例如,多余的空格、换行符和缩进)
2、启用GZip

4、无阻塞

写在HTML头部的JavaScript(无异步),和写在HTML标签中的Style会阻塞页面的渲染,因此CSS放在页面头部并使用Link方式引入,避免在HTML标签中写Style,JavaScript放在页面尾部或使用异步方式加载

5、使用首屏加载

首屏的快速显示,可以大大提升用户对页面速度的感知,因此应尽量针对首屏的快速显示做优化。

6、按需加载

将不影响首屏的资源和当前屏幕资源不用的资源放到用户需要时才加载,可以大大提升重要资源的显示速度和降低总体流量。

1、LazyLoad
2、滚屏加载
3、通过Media Query加载

另外,马海祥提醒大家一点:按需加载会导致大量重绘,影响渲染性能。

7、预加载

大型重资源页面(如游戏)可使用增加Loading的方法,资源加载完成后再显示页面,但Loading时间过长,会造成用户流失。

1、可感知Loading(如进入空间游戏的Loading)
2、不可感知的Loading(如提前加载下一页)

3、对用户行为分析,可以在当前页加载下一页资源,提升速度。

8、压缩图片

图片是最占流量的资源,因此尽量避免使用他,使用时选择最合适的格式(实现需求的前提下,以大小判断),合适的大小,然后使用智图压缩,同时在代码中用Srcset来按需显示。

1、使用智图
2、使用其它方式代替图片(使用CSS3;使用SVG;使用IconFont)
3、使用Srcset
4、选择合适的图片(webP优于JPG;PNG8优于GIF)
5、选择合适的大小(首次加载不大于1014KB;基于手机屏幕一般宽度不宽于640)

另外,马海祥提醒大家一点:过度压缩图片大小影响图片显示效果。

9、减少Cookie

Cookie会影响加载速度,所以静态资源域名不使用Cookie。

10、避免重定向

重定向会影响加载速度,所以在服务器正确设置避免重定向。

11、异步加载第三方资源

第三方资源不可控会影响页面的加载和显示,因此要异步加载第三方资源。

脚本执行优化

脚本处理不当会阻塞页面加载、渲染,因此在使用时需要注意以下几点:

1、CSS写在头部,JavaScript写在尾部或异步。
2、避免图片和iFrame等的空Src,空Src会重新加载当前页面,影响速度和效率。
3、尽量避免重设图片大小,重设图片大小是指在页面、CSS、JavaScript等中多次重置图片大小,多次重设图片大小会引发图片的多次重绘,影响性能。
4、图片尽量避免使用DataURL,DataURL图片没有使用图片的压缩算法文件会变大,并且要解码后再渲染,加载慢耗时长。

CSS优化

1、尽量避免写在HTML标签中写Style属性。
2、避免CSS表达式,CSS表达式的执行需跳出CSS树的渲染,因此请避免CSS表达式。
3、移除空的CSS规则,空的CSS规则增加了CSS文件的大小,且影响CSS树的执行,所以需移除空的CSS规则。
4、正确使用Display的属性,Display属性会影响页面的渲染,因此马海祥建议各位站长要合理使用。
    (1)、display:inline后不应该再使用width、height、margin、padding以及float
    (2)、display:inline-block后不应该再使用float
    (3)、display:block后不应该再使用vertical-align
    (4)、display:table-*后不应该再使用margin或者float
5、不滥用Float,Float在渲染时计算量比较大,尽量减少使用。
6、不滥用Web字体,Web字体需要下载,解析,重绘当前页面,尽量减少使用。
7、不声明过多的Font-size,过多的Font-size引发CSS树的效率。
8、值为0时不需要任何单位,为了浏览器的兼容性和性能,值为0时不要带单位。
9、标准化各种浏览器前缀
    (1)、无前缀应放在最后。
    (2)、CSS动画只用(-webkit- 无前缀)两种即可。
    (3)、其它前缀为“-webkit- -moz- -ms-无前缀”四种(-o-Opera浏览器改用blink内核,所以淘汰)。
10、避免让选择符看起来像正则表达式。

高级选择器执行耗时长且不易读懂,避免使用。

JavaScript执行优化

1、减少重绘和回流
    (1)、避免不必要的Dom操作
    (2)、尽量改变Class而不是Style,使用classList代替className
    (3)、避免使用document.write
    (4)、减少drawImage
2、缓存Dom选择与计算,每次Dom选择都要计算,缓存他。
3、缓存列表.length,每次.length都要计算,用一个变量保存这个值。
4、尽量使用事件代理,避免批量绑定事件。
5、尽量使用ID选择器,ID选择器是最快的。
6、TOUCH事件优化,使用touchstart、touchend代替click,因快影响速度快,但应注意Touch响应过快,易引发误操作。

渲染优化

HTML文档是以包含文档编码信息的数据流方式在网络间传输,页面的编码信息一般会在HTTP响应的头部信息或在文档内的HTML标记中指明,客户端浏览 器只有在确定了页面编码后才能正确的渲染页面,所以在绘制页面或执行任何的javascript代码前,大部分的浏览器(ie6、ie7、ie8除外)都 会缓冲一定字节的数据来从中查找编码信息,不同的浏览器当中预缓冲的字节数是不一样的。

1、HTML使用Viewport

Viewport可以加速页面的渲染,请使用以下代码:

  1. <meta name=”viewport” content=”width=device-width, initial-scale=1″>

2、减少Dom节点

Dom节点太多影响页面的渲染,应尽量减少Dom节点。

3、动画优化

(1)、尽量使用CSS3动画。
(2)、合理使用requestAnimationFrame动画代替setTimeout。
(3)、适当使用Canvas动画5个元素以内使用css动画,5个以上使用Canvas动画(iOS8可使用webGL)。

4、高频事件优化

Touchmove、Scroll事件可导致多次渲染。

(1)、使用requestAnimationFrame监听帧变化,使得在正确的时间进行渲染。
(2)、增加响应变化的时间间隔,减少重绘次数。

5、GPU加速

CSS中以下属性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)来触发GPU渲染,请合理使用。

另外,过渡使用会引发手机过耗电增加。

HTML5只是一种方法和手段,并不是万能的,思考怎么符合移动端设备特别是没错,但前提务必要基于PC站框架结构和内容,保证内容的一致性是解决 HTML5痛点的唯一办法,这个时候大家再去理解“凡是适合在移动端展现的网站”就不是站在高点去理解了,就应该站在最低点,怎么展示符合移动界面,同时 满足一部分移动用户的使用体验和需求。

总结

一款好的产品不是只看表面,“内在的东西”也非常重要,内外兼优的产品才是最好的,你说呢?

浅谈移动端页面性能优化方案相关推荐

  1. 移动端页面性能优化方案

    移动端页面性能优化方案 加载优化 使用首屏加载 按需加载 预加载 压缩图片 减少Cookie 异步加载第三方资源 脚本执行优化 CSS优化 JavaScript执行优化 渲染优化 SEO(搜索引擎优化 ...

  2. 游戏怎么这么卡?!--浅谈手游开发性能优化

    前言.手游优化为什么这么难? 手机性能比pc差很多,而且手机性能参差不齐,低端机占有的比例又比较大,导致很多游戏必须向低端机对齐,很苛刻的优化游戏的性能. 并且,手游端的开发环境还有很多缺陷,例如对V ...

  3. 浅谈移动端页面无刷新跳转问题的解决方案

    最近开发微信公众号,用的框架是 一般的 UI,但是涉及到多页面之间的相互跳转的问题,降低了浏览器的性能,用户体验特别不好,卡顿,不流畅,因此不采用传统的页面跳转方式,看到不少手机网页开发的框架都都是在 ...

  4. 浅谈Android性能优化方案

    经过前一阶段的调查,大概对性能优化已经有了初步的解决方案: 先给大家介绍一下UC公司的性能优化指标以及部分方案: 一.性能优化六项指标: 性能.内存.稳定性.流量.电量.安装包大小: 二.背景 --- ...

  5. 人人都能掌握的Java服务端性能优化方案

    转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...

  6. 网站页面性能优化的34条守则

    (雅虎团队经验) 1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTT ...

  7. 重度使用Flutter研发模式下的页面性能优化实践

    简介: 淘宝特价版是集团内应用Flutter技术场景比较多,且用户量一亿人以上的应用了.目前我们首页.详情.店铺.我的,看看短视频,及评价,设置等二级页面都在用Flutter技术搭建.一旦Flutte ...

  8. 雅虎网站页面性能优化的34条黄金守则(转)

    2019独角兽企业重金招聘Python工程师标准>>> 雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数       终端用户响应的时间中,有80%用于下 ...

  9. web页面性能优化及SEO优化

    web页面性能优化 前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网 ...

最新文章

  1. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2
  2. 2008秋-计算机软件基础- 实验一 参考源程序
  3. 盘点那些你可能错过的CNCF优秀开源项目
  4. C++编译器对属性和方法的处理机制
  5. 不适合的任务:一个例子 启示:记住 我们选择做我们最擅长的事情,并且把事情做到最好
  6. 2015年07月04日
  7. mysql 雇员表脚本,mysql压力测试脚本实例_MySQL
  8. Firefox UI已迁移至Web Components
  9. 【OS学习笔记】六 实模式:编写主引导扇区代码
  10. BugkuCTF-Crypto题一段Base64
  11. python点线图_Python | 点线图
  12. mysql存储过程知识点_知识点:Mysql 基本用法之存储过程
  13. python3哪个版本稳定-Python 3.9 发布稳定版本,八大特性学起来!
  14. C# 编译的DLL文件在其他项目中调用时,看不见注释
  15. laravel Ajax请求 X-CSRF验证问题
  16. STM32L系列与普通STM32F系列的比较
  17. win10找回windows照片查看器的方法
  18. 用Python模拟QQ界面之QQ登录界面的奥秘
  19. 《风暴英雄》游戏体验
  20. Android通知渠道

热门文章

  1. Elasticsearch 学习(二).实战使用
  2. Windows10安装Photoshop CC2018(PS)软件时关闭电脑防火墙
  3. 爬虫之爬取英雄联盟战绩详细数据
  4. 限制p元素之显示2行文字,同时出现省略号。
  5. Python实现ATM
  6. 磕磕碰碰的Chrome之plugin开发
  7. Win10多用户同时远程桌面,并各自操作互不干扰
  8. 微信小程序云端解决方案探索之路
  9. php活体检测,活体检测
  10. 从问题描述到电子运转 思维导图 《计算机系统概论》