H5容器技术方案

前段时间做了一个关于H5容器的项目,在此和大家分享一下其中的技术方案设计(大家有比较好的思路也可以告诉我),由于是第一次写技术博客,写得不好的地方,请大家指出和谅解,谢谢。

目标:

APP端的迭代过程中的最后一步,需要提交版本到应用市场(AppStore或安卓各市场)。APP端的需求中有一部分会有更新频繁、业务需求动态等特点,需要用户能够及时更新。该场景下,H5能够满足此类特性的需求(更快、更简便的服务,代码可高度重用,服务发布方便等优点),能够做到快速承载业务的更新,多端开发统一。因此现在越来越多的公司使用H5+Native的Hybrid模式来开发APP。

本文通过设计一种H5容器,在完成H5页面的远端载入之外,提供对H5页面访问加速、提高安全性的支持。同时设计H5的模版化,离线化完成H5页面访问加速;还有Native与H5的请求委托,将鉴权信息等部分接口委托至APP端,增加安全性。

方案概述:

1.H5页面模版化、离线化

H5页面分为静态、动态数据部分;目的是可以通过在APP端预先加载模版(静态资源通过脚本自动打包到应用,首次安装解压处理),只请求动态数据部分,减少并发的请求数量,提高速度。

2.模版打包

H5页面除了动态数据部分,其他内容包括js、css、img等静态资源预先被打包成模版包,同时APP端在合适的时机进行下载并缓存在本地。如果模版更新频繁、全包的尺寸较大,应将公共资源单独抽离,并采用增量包更新方式。

3.模版更新策略

更新时机:推送通知(客户端静默更新)、app启动、app回到前台、定时周期性检测更新、添加对象作为资源更新的监听器更新模版,提供多维度的更新策略。(后期考虑基于长连接的消息推送更新模版)

更新策略:远程模版配置和本地模版配置在模版版本和模版有效期上的比较。同时增加对模版的md5校验,防止资源的篡改。

4.资源拦截

H5容器加载模版,会加载引用的js、css、img等文件,H5容器需要对该类文件进行拦截,返回资源包中对应的文件;为了找到资源包中对应的文件,需要提供一份静态资源的映射配置表。

5.JsBridge通道

实现Native与H5页面的交互:业务协议接口的定义,管理页面切换,与服务器的数据交互,APP端通用功能等。Native与H5的请求委托,将鉴权信息等部分接口委托至APP端,增加安全性。

6.日志统计

包括H5性能指标,模版包的更新成功率,以及本地模版和远程页面访问的占比,和一些异常日志的收集,然后统计上报,提供完善的日志统计。

详细方案:

1.主流程

H5容器方案包括两个主流程:

1.模版更新流程:包括后端cms上传及app同步

2.模版访问流程:设计App识别并访问模版,H5与JS交互的流程

发布流程

模版发布流程如下图所示:

1.确定模版更新,并通知到QA

2.QA测试模版包,确认无误

3.提交发布测试人,上传CMS(上传模版包至阿里云)

4.CMS调用MobileServer接口,存入系统

5.等待APP端同步到本地

模版加载时序图

2.模版分类及识别

模版分类通过业务场景设定,并且可以通过wap

url的特定字符串设别,例如:http://host/yougouPages/Cart?xxx=111

其中yougouPages/Cart即模版识别串(detectKey),容器加载到该url后,通过detectKey确定是否加载已经存在的对应的模版。

3.配置信息管理

所有模版在MobileServer上维护一份信息

包括全量包和增量包下载地址,模版包的版本,识别字符串,模版id,模版更新时间戳,模版有效截止时间戳,模版状态(用于下线模版识别,解决突发问题)

4.APP端H5容器对离线资源的重定位

模版资源打包时,需要形成一份url->localPath的映射表

后续考虑对资源映射进行加密处理,防止被篡改。

5.H5与APP交互

考虑到H5对APP端的硬件信息、鉴权信息,请求信息等的依赖,H5Container需要为H5提供接口,提供对应的信息。

时序图

所有通过模版加载的url,带上额外参数http://host/subpath?&ish5container=1, H5页面可根据该参数确定相应的初始化工作。

6.JsBridge接口描述

JsBridge作为native与js的信息交互的通道。提供最基本的方法调用的接口。APP需要进行业务维度的封装,暴露出接口。

7.模版使用策略

模版的使用过程,在某些情况下不适合使用模版,或为了解决模版在特定场景有问题,决定停止使用。因此需要定义模版的使用条件。模版配置信息增加:vaildTs,offine,exception

8.容器性能指标

9.容器增量包方案

IOS端实现开发

思考点

1.每个界面对应一个H5页面,等效于ViewController

2.每个界面都有一个唯一的URL,通过url跳转

3.预置资源,使加载过程更快

框架结构

H5容器构成

各个类的职责:

使用NETemplateManager来管理模版的更新和自检(模版离线化管理),使用NEWebContainerURLProtocol来进行资源拦截(//www.greatytc.com/p/0244e431fb3c),使用NEWebViewLoader管理资源拦截策略,使用NEWebViewAPI管理业务协议接口,使用NEWebViewJsonRPC作为jsbridge的通道,NEWebViewContainer是整个容器的入口(web容器)。

流程图

如下用流程图表示container的大致流程(download和jsbridge,我将在之后的文章中单独去讲述),不再用太多的文字描述:

模版访问和资源加载流程:

目前已经将该项目封装成SDK,用于其它项目使用。

参考文章:

极致的Hybrid:https://yq.aliyun.com/articles/2939

Hybrid架构下的H5应用加速方案:http://itindex.net/detail/48335-hybrid-%E6%9E%B6%E6%9E%84-h5

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,761评论 25 707
  • 0. 前言 前面有被用户投诉 APP 流量消耗厉害: 于是乎考虑了流量方面的问题。暂时 APP 中涉及流量的几个方...
    zyl06阅读 23,955评论 5 62
  • 哈哈,如果你这时候才想起要准备面试,那么其实也不需要准备什么了,准备好轻松和自信的心态吧。 下面是分割线。 大多数...
    goeasyway阅读 3,807评论 1 19
  • Day28 明天要体测,好紧张啊,最怕的就是仰卧体做,不知道能做几个呀,希望明天是个有点微风的阴天。 想到体测,莫...
    小懒说Yolo阅读 195评论 1 1
  • 我不知道昨晚什么时候入的眠 只记得好心的朋友提醒说睡吧 我便开始关灯寻找香甜的美梦 然而辗转反侧浪费了很多时间 今...
    黯黯红尘一路相伴阅读 424评论 2 4