浅谈H5页面性能优化1

微信图片_20170910165537.jpg

传统流程

通常将html、js、css等静态资源放入cdn上,然后页面加载后,再通过CGI去拉取最新的 数据,进行拼接展示。 这样可以利用CDN的多低部署和就近接入等优势,同时提高了服务器的并发能力
CGI是啥:不是一种语言,也不是一种技术,而是一种模式,Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端 HTML页面的接口,“通用网关接口”,这就是CGI的中文意思。

换句话,只要是提供HTML的服务器端程序都可以叫CGI,APS、PHP、JSP这些都是,你用C语言写一个可以提供HTML的服务器端EXE文件,也叫CGI。

  1. 用户点击后,经过终端一系列初始化流程 ,比如进程启动、Runtime初始化、创建webview等等;
  2. 完成webview初始化后,开始去CDN上请求html加载页面;
  3. 页面发起CGI请求对应的数据或者通过localStorage获取数据,数据回来后再对dom进行操作更新。
    概括:
    初始化 webview -> 请求页面 -> 下载数据 -> 解析HTML -> 请求 js/css 资源 -> dom 渲染 -> 解析 JS 执行 -> JS 请求数据 -> 解析渲染 -> 下载渲染图片

可以看出上述流程存在着几个问题:

微信图片_20170910170542.jpg
  1. 从外网统计数据来看,用户的终端耗时在1s以上,这意味着在这1s多的时间内,网络是完全空闲等待的,非常浪费;
  2. 页面的资源和数据完全依赖于网络,特别是用户在弱网络场景下,页面会出现很长时间的白屏,体验非常差;
  3. 因为页面的数据依赖于动态拉取,加载完页面后,往往看到的是一些模块先转菊花,再展示,体验也是非常不好的。同时这里涉及到较多数据更新,经常要更新DOM ,性能上也有不少开销。

优化方案

终端优化

针对终端耗时1s以上的情况,做以下优化

  1. webview 池:可以用两个或多个 webview 重复使用,而不是每次打开 H5 都新建 webview。不过这种方式要解决页面跳转时清空上一个页面,另外若一个 H5 页面上 JS 出现内存泄漏,就影响到其他页面,在 APP 运行期间都无法释放了
  2. 预加载:在一个进程内首次初始化 webview 与第二次初始化不同,首次会比第二次慢很多。原因预计是 webview 首次初始化后,即使 webview 已经释放,但一些多 webview 共用的全局服务或资源对象仍没有释放,第二次初始化时不需要再生成这些对象从而变快。我们可以在 APP 启动时预先初始化一个 webview 然后释放,这样等用户真正走到 H5 模块去加载 webview时就变快了。

服务端渲染-静态直出

服务器端拉取首屏数据通过Nodejs进行渲染。然后生成一个包含了首屏数据的html文件,这样展示首屏的时候,就可以解决内容转菊花的问题了。
缺点是:服务器端处理耗时增加。不过现在html都会发布到cdn上,webview直接从cdn上面获取,这块耗时对用户没有造成影响。

客户端优化

  1. 降低请求量: 合并资源、减少HTTP请求。minify/gzip压缩、webp、lazyload。
  2. 加快请求速度: 预解析dns,减少域名数、并行加载、cdn分发
  3. 缓存: http协议缓存请求、离线缓存mainfest、离线数据缓存localStorage
  4. 渲染: js/css优化,加载顺序

离线预推

微信图片_20170910171745.jpg

页面发布到cdn上后,webview需要发起网络请求去拉取,当用户在弱网情况下,这个加载时间就很长。于是我们通过离线预推的方式,把页面的资源提前拉取到本地。当用户加载资源的时候,相当于从本地加载,即使没有网络,也能展示首屏页面,这个也就是大家熟悉的离线包。

微信图片_20170910172013.jpg

预加载

用户收到push的时候,可以利用后台来提前获取数据

总结优化思路:

从终端优化、客户端优化、服务端渲染、离线预推、预加载等方面优化,思路从
缓存、预加载、并行方面出发考虑。缓存一切网络请求、尽量在用户打开之前就加载好所有内容,能并行做的事情不串行做。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,082评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,231评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,047评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,977评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,893评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,976评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,605评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,888评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,906评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,732评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,513评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,980评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,027评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,232评论 2 339

推荐阅读更多精彩内容