移动端优化

由于移动设备有限的CPU处理能力,移动网络的高往返时间,以及移动应用的快速增长,对移动端的理解以及优化相对于PC端来讲变得更加重要。Page Speed Insights 现在可以让你轻松地分析和优化您的移动端网站的性能。下面讲的很多移动端的最佳优化方案也同样适用于PC端,所以这些建议也包含在PC端浏览器的网页速度分析报告中。

推迟JavaScript的解析

使登录页(着陆页,landing page)重定向可缓存

推迟JavaScript的解析


概览

为了加载一个页面,浏览器必须解析所有 <SCRIPT>标签的内容,这额外的增加了页面的加载时间。最小化页面加载所需的JavaScript,推迟解析JavaScript直到需要执行的时候,通过这种方式你可以有效降低页面初始加载时间。

详细介绍

有几种方式可以用来推迟JavaScript的解析。最简单同时又是最优的方式是简单地延迟JavaScript的加载,直到需要的时候。第二种方法是在适当的时候使用<script async>属性,将它推迟到UI线程比较空闲的时候加载,以此来阻止对页面加载造成的阻塞。如果这些技术都不合适,在移动应用中,下面还有一些额外的常用技巧:

当构建移动应用程序时,预先加载所有需要使用的JavaScript非常重要,这样就算用户处于脱机状态仍然能够继续使用。在这种情况下,一些应用,如移动Gmail,发现在注释(comments)中加载Javascript并且直到需要使用时才eval()这种方式非常有用。这种方法保证了所有的JavaScript在初始页面时加载,但是不要求去解析这些JavaScript。

在注释(comments)中存储代码的一种替代方式是在JavaScript字符串常量中存储代码。当使用这种技术时,Javascript只有在需要的时候通过再次调用eval()对JavaScript字符串常量进行解析。这种方式同样可以让应用程序预先加载Javascript,但推迟解析,知道需要使用的时候。

请注意,将<SCRIPT>标签移到页面的尾部是次优的,因为浏览器在将Javascript解析完之前将一直呈现一个繁忙的状态。用户可能会等到页面加载状态显示完全加载完毕才会进行页面操作,所有,最大限度地减少浏览器中显示的页面加载完成的时间是很重要的。

在2011年初进行的测试中,我们发现,在现代移动设备,JavaScript每增加1千字节,页面总的加载时间将会多出1ms的js解析时间。因此,页面初始化加载时100KB的Javascript对用户来讲会增加100ms的加载时间。因为每次访问页面时JavaScript都将被解析,这些时间将会成为每个页面加载时间的一部分,不管是从网络加载,还是通过浏览器的缓存,又或者是使用HTML5的离线模式。

使登陆页(着陆页,landing page)重定向可缓存


概览

很多页面,尤其是移动页面,会将用户重定向到一个不同的URL,例如从www.example.com 到m.example.com。通过让用户的浏览器对此重定向进行缓存可以在用户重复访问该网站时加快页面加载时间。

详细介绍

如果可能的话解决重定向最好的方式是删除重定向,但有些情况下确实很难取消登录页重定向,尤其是重定向到移动端网站。举例来说,一个网站的移动版本部署在不同的Web服务器上,这就要求访问时重定向到一个不同的域名。在这种情况下,使重定向到移动特定的网站的请求可缓存,以减少用户重复访问页面加载的时间就非常重要。如果您的网站的移动版本与PC站点是使用的同样的web服务器,你就不应该使用重定向到移动版本的方式而是应该使用与PC站点同样的URL。

建议

移动专用站点的重定向必须是私有高速缓存,以防止代理服务器将移动站点重定向给非移动用户。我们建议您使用302重定向,并存缓存一天。重定向应包括一个Vary:User-Agent 头以及一个Cache-Control:private头。这些头防止代理服务器将移动专用站点重定向给非移动用户。您可能还需要包括一个Expires头,以防止旧的HTTP/1.0代理缓存这些重定向然后发给非移动用户。

查看英文原版

【译】Optimize for mobile-移动端优化的更多相关文章

  1. 全面解密QQ红包技术方案:架构、技术实现、移动端优化、创新玩法等

    本文来自腾讯QQ技术团队工程师许灵锋.周海发的技术分享. 一.引言 自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年).刷一刷红包(2016 年)和 AR 红包(2017 年)几个 ...

  2. OPTIMIZE TABLE linked list 表优化原理 链表数据结构 空间再利用

    小结: 1.加快读写: 2.对于InnoDB表,在一定条件下,通过复制旧表重建: 3.实践中, 3.1.show processlist;查看线程,发现,认为堵塞读请求: 3.2.数据长度空间不变,索 ...

  3. tagCould3d 移动端优化版

    针对https://github.com/bitjjj/JS-3D-TagCloud这个版本的做了移动端性能优化(使用transform做偏移及缩放,优化帧).基本原理一致. class TagCou ...

  4. 【译】如何编写“移动端优先”CSS

    原文链接:https://zellwk.com/blog/how-to-write-mobile-first-css/ 构建响应式网站是如今前端开发者的必备技能,当我们谈到响应式网站时,“移动端优先” ...

  5. 移动端优化 && 清除移动端网站点击a标签时闪现的边框或遮罩层(CSS) && 移动端点击 && 文字不可选择

      在移动端网站,当你点击加了a标签的文字或图片时,该元素的周围会闪现一个蓝色的边框,在微信上的网站就是如此:而有的浏览器会闪现一个半透明遮罩层,比如移动端的Chrome浏览器,其实这些特效无非就是为 ...

  6. PHP服务端优化全面总结

    一.优化PHP原则 1.1PHP代码的优化 (1)升级最新的PHP版本 鸟哥PPT里的对比数据,就是WordPress在PHP5.6执行100次会产生70亿次的CPU指令执行数目,而在PHP7中只需要 ...

  7. jQuuery Mobile 移动端开发框架

    jQuery Mobile 是创建移动 web 应用程序的框架. jQuery Mobile 适用于所有流行的智能手机和平板电脑. jQuery Mobile 使用 HTML5 和 CSS3 通过尽可 ...

  8. 【gRPC】C++异步服务端优化版,多服务接口样例

    官方的C++异步服务端API样例可读性并不好,理解起来非常的费劲,各种状态机也并不明了,整个运行过程也容易读不懂,因此此处参考网上的博客进行了重写,以求顺利读懂. C++异步服务端实例,详细注释版 g ...

  9. [mobile]移动端页面没有重新请求时,刷新页面代码

    <input type="hidden" value="yes" id="id_if_reload" /> <script ...

随机推荐

  1. HDU 5768 - Lucky7

    题意: 给出x, y, m[1...n], a[1..n].     在[x,y]中寻找 p % 7 = 0 且对任意(1<= i <=n) p % m[i] != a[i] 的数字的个数 ...

  2. python运维开发(十一)----python操作缓存memcache、redis

    内容目录: 缓存 memcache redis memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数 ...

  3. 握手(bestcode#42)

    Shaking hands 问题描述 今天是Gorwin的生日,所以她举办了一个派对并邀请她的朋友来参加.她将邀请n个朋友,为了方便,Gorwin把他们从1到n标号.他们之中有一些人已经相互认识,有一 ...

  4. #pragma 预处理指令

    Linux C 编程一站式学习 #pragma 预处理指示供编译器实现一些非标准的特性,C 标准没有规定 #pragma 后面应该写什么以及起什么作用,由编译器自己规定.有的编译器用 #pragma ...

  5. 使用Hashtable和List结合拼json数据

    在做项目的时候,有时候需要向页面返回一个特定的json类型的数据,一般情况下会有下面的方法进行拼接: public String chongzhiList() throws Exception { L ...

  6. Oracle EBS-SQL (QA-3):检查已检验未入库.sql

    DEFINE RECE="%"  SELECT rsh.receipt_num                                    收据号,           ...

  7. codeforces gym 100187M Heaviside Function

    //大概就是没想起来怎么做 解法:首先观察seitan方程,发现我们要找的是满足seitan(si*x-ai)=1的方程数,即si*x-ai>=0的方程数,因为si=1 or -1,于是分类讨论 ...

  8. PDF转word文档

    本文未对扫描版的PDF实验,但是可编辑PDF版本可以转换为word而且转换后的word是可编辑的. 1.从http://xiazai.zol.com.cn/detail/33/326858.shtml ...

  9. linux命令之uname

    uname是linux中查询系统基本信息的命令. 命令形式: uname [选项] 选项包括:(若不跟任何选项:则默认-s选项) -s, --kernel-name 输出内核名称   -n, --no ...

  10. flex——将Sprite控件添加到FLEX UI中

    在Flex的帮助文档里,有很多例子都是扩展Sprite类的.如果想把这些实例添加到你的s:Application中,如:addChild(DisplayObject ),肯定会出错.错误的大致意思是: ...