目前移动端越多越多的网页开始H5化,一方面可以减少安装包体积,另一方面也方便运营。但是相对于原生界面而言,H5的慢速问题一定被大家所诟病,针对这个问题,目前手Q存在几种方案,最常见的便是离线包方案,但离线包存在几个问题:

  • 滞后性,内容显示不及时;
  • 覆盖率,很难达到100%;
  • 校验耗时,由于离线包的素材较多,加载时安全性校验非常多;

除了上面的缺陷外,对于一些UGC架构的业务,离线包的支持也不是特别好。针对这些问题,业界存在一种基于TCP长连接的新方案(WebSo),专注于提高首屏的加载速度。WebSo的思路来源主要是由于android端在初始化webview和http拉取资源串行执行时都很耗时,如下图:

WebSo基于这一前提,把串行变并行,并利用tcp长连接替换掉http,另外一个突破是针对html内容的动态性,增加了模板和数据分离,变化频率较多的数据定义为data,变化频率较少的定义为template,基本实现流程如下图:

手机QQ针对个别页面最开始采用的也是WebSo这种方案,不过在灰度过程中发现数据不理想,尤其是首次加载及模板变更时数据非常糟糕,仔细分析发现主要的原因包括下面几点:

  • tcp长连接信令拉取资源时要经历跨进程、服务器中转、信令排队、加解密,导致时间过长;
  • tcp长连接信令需要下载完整个html才能塞给内核渲染,不能利用内核的边下载变渲染;
  • 数据、模板变更时会引起整个页面重刷,导致体验很差。
  • 异常时url不会智能切换

针对这几点问题,为了让用户的体验达到更好,增值产品部提出了sonic方案,第二部分我们来介绍一下具体的sonic实现细节。

一.实现细节

我们从两个场景来介绍具体实现。

第一种场景是用户首次或者缓存失效时加载页面,与WebSo一样,sonic在初始化webview的同时也会并行发起http连接,在webview初始化好之后会在内核与http流之间建立桥接,桥接流在不同机型不同网速情况下可能有三种不同状态:全内存流、内存流 网络流、网络流。在桥接流关闭时,我们会在终端根据模板数据拆分规则对html进行内容分割,并记录模板和数据的tags信息,利用这些tags信息,可以在下次与服务器通信时进行数据校验和更新。具体实现思路如下:

第二种场景是用户二次进入页面,通过手Q灰度测试的观察这种场景的占比较高,普遍情况下会在七成以上。这种场景我们会优先加载缓存,并且根据http(s)返回码的同步状态,进行不同的处理。sonic首先会根据cacheoffline做不同的智能开关处理;然后根据本地的缓存状态做不同的状态转换:如果完全命中缓存,则不作任何处理;如果发生模板变更,处理逻辑会有点复杂,sonic会根据不同机型和网络环境做智能切换处理,速度较快时会拉取完html流交给内核渲染,速度不快时仍然会建立桥接流,并且会对内容进行拆分;如果发生数据变更,sonic会对数据进行diff处理,和页面通过js进行通信进行刷新,这样做的好处一方面可以不影响用户的体验,另一方面速度也更快。具体实现思路如下:

为了达到更好的效果,后续我们可能还会加入dns的优化,这样做的好处是减少域名劫持,不过目前的方案已经能达到非常不错的效果了。

二.数据对比

下面我们分别针对vip中心首页在四个场景的实验数据来进行对比(android端外网灰度数据基本一致,ios速度很快暂时没有采用此方案),图中每行的意义如下:

  • webviewStart-clickStart:点击url到activity的oncreate首行时间;
  • loadUrl-clickStart:点击url到loadurl的时间;
  • head-clickStart:点击url到页面首行的执行时间;
  • domready-clickStart:点击url到dom准备好的时间;
  • active-clickStart:点击url到页面交互的时间。

其中active-clickStart一般用来衡量页面加载时的总时间。

第一种场景是首次启动web进程、无缓存时的数据,可以发现首次启动sonic比WebSo加载耗时减少53%:

第二种场景是非首次启动web进程、模板更新时的数据,可以发现sonic比WebSo减少22%:

第三种场景是非首次启动web进程、模板不变数据更新的数据,sonic比WebSo减少60%:

第四种场景是非首次启动web进程、完全命中缓存的数据,sonic和WebSo的数据差不太多:

从实验和手Q灰度的情况看,整体而言,sonic在绝大部分场景下已经能够达到非常好的体验,后续我们也会继续进行进一步的优化,争取达到更好的体验效果。

作者:腾讯QQ会员技术团队(代号:小时光茶社)


相关推荐

关于Android图片资源瘦身的奇思妙想

H5页面性能监测 & 优化,让你的H5快如闪电!

OBS 源码分析第一篇--踏石留印


此文已由作者授权腾讯云技术社区发布,转载请注明文章出处

获取更多云计算技术干货,可请前往腾讯云技术社区

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~

更多专业前端知识,请上 【猿2048】www.mk2048.com

腾讯QQ会员技术团队:以手机QQ会员H5加速为例,为你揭开sonic技术内幕相关推荐

  1. 手机QQ浏览器如何支持html5,手机QQ浏览器五大策略打造HTML5平台

    [IT168厂商动态]6月27日消息,腾讯举办的手机QQ浏览器HTML5创新大赛沙龙分享会第二场在北京举行,HTML5开发者.技术专家等众多行业人士将齐聚一堂共同探讨HTML5技术发展趋势以及Web ...

  2. 手机qq和电脑qq怎么同步消息_手机QQ接入华为HMS!停止运行也能接收消息

    腾讯昨日发布了安卓手机QQ 8.4.10正式版,带来了视频包厢.图片提取文字即时翻译.同时扫描多个二维码等新玩法.新功能. 据网友@皮蛋棒棒糖发现,新版手机QQ已经悄然接入了华为HMS移动服务框架,基 ...

  3. android qq屏幕提醒如何关闭,手机QQ微视怎么彻底取消弹窗提醒 屏蔽不跳广告方法...

    更新后的手机qq,总是会有各种的消息和新闻推送,不少人都想要全部关掉.手机QQ怎么彻底取消微视弹窗?下文教大家方法. 手机QQ如何彻底取消微视弹窗 手机QQ自从更新了之后,每天是不是推送微视的内容,好 ...

  4. QQ支持微信登录,手机QQ与微信联手!

    手机QQ支持微信登录了,今天看到有网友说,QQ现在可以用微信登录了,立马登录QQ去看看,果不其然,在登录方式那里选择添加账号,选择微信登录,就可以了. 记得最早的时候,微信是可以用QQ号登录的,目的也 ...

  5. android qq底部菜单栏,怎么关闭手机QQ底部导航栏的“看点”?

    怎么关闭手机QQ底部导航栏的"看点"? 手机QQ的"看点"导航栏很影响用户体验,有没有什么方法能将底部的导航栏关闭呢?跟着小编一起来看看吧. 方法如下: 一.在 ...

  6. 【腾讯敏捷转型No.8】你爱上手机QQ了么?

    上一篇文章<QQ邮箱如何利用敏捷做到中国第一>,"QQ邮箱之母"马化腾带领QQ邮箱团队,从流量思维向产品思维转变,"QQ邮箱之父"张小龙也是在这个敏 ...

  7. android qq 7.0,手机QQ安卓v7.7.0正式版更新:腾讯文档上线

    IT之家7月18日消息 今天,腾讯向手机QQ安卓版用户推送了全新的v7.7.0版本更新,版本号升级至v7.7.0.3640,"我的文档"新增腾讯文档,支持多人在线编辑,云端实时保存 ...

  8. android手机功能创新,Android手机QQ浏览器1.1发布多项创新功能

    在2010北京国际通信展上,Android手机平台被各大手机厂商公认为下阶段研发的热点.与此同时,针对Android平台开发的各种应用也越来越注重用户体验,腾讯刚刚发布的Android平台手机QQ浏览 ...

  9. qq手机浏览器不支持HTML5,手机QQ浏览器:响应HTML5未来 着眼当下

    [中关村在线软件资讯]10月20日消息:由CSDN和创新工场联合举办的"移动开发者大会·中国 2012"今天在北京国家会议中心继续进行,在上午的HTML5与Web App主题论坛上 ...

最新文章

  1. python学习07
  2. android ndk怎样加载o文件_JNI初探之NDK 开发环境配置
  3. MATLAB 添加自定义的模块到simulink库浏览器
  4. display:flex 多栏多列布局
  5. maven命令行创建project
  6. C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
  7. python高性能写法_py 高性能低级,高级写法思考
  8. vs 启动调用的目标发生异常_协程中的取消和异常 | 取消操作详解
  9. String方法(一)
  10. SpringCloud集成Seata精简入门教程
  11. 爬虫框架Scrapy之Spider
  12. MySQL基本数据操作
  13. JAVA商城系统源码
  14. MSP430使用wifi模块发送数据(上,测试连接)
  15. 【服务器】服务器运维必备软件;服务器安装环境、运维教程
  16. “每个人的商学院”系列丛书
  17. 思科模拟器企业网站服务器配置,cisco模拟器配置域名web服务器
  18. 泛微OA流程中如何引用自开发的JS
  19. 袁腾飞讲述西方古代哲学思想
  20. 有关老年计算机培训的报道,深晚报道|教老年人使用智能手机 南澳开展“智能时代,乐享生活”培训活动...

热门文章

  1. 彩虹表原理详解及工具介绍
  2. 植物大战僵尸2010版
  3. 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第2课2.9节使用污点修复画笔工具...
  4. RIoT控制:了解和管理风险和物联网
  5. 装系统后U盘缩水严重
  6. 健身房管理系统的设计与实现
  7. Springcloud----SkyWalking链路追踪
  8. qq可以上,上不了网
  9. 用QT导出Excel表格
  10. 微信隐藏功能系列:动态的微信状态是怎样设置的