Web容器项目总结

背景

蘑菇街是一个专门为女性购物打造的时尚购物平台,App端承接了大量的流量,及时发布新内容成为一个挑战。在保证平台稳定性和迅速更新的前提下,我们选择了native和h5的混合开发,并对其不断的进行了优化迭代。

方案

内核选择
  • 由于安卓碎片化严重,webview 性能不一,初期我们选择编译打包 crosswalk 项目提供的容器内核进行动态加载,在 app 空闲的时候,下载此内核,并在下载完成后,动态加载到系统中。在 web 容器启动的时候判断相应的版本号以及文件完整性,选择性的加载两种内核。数据表明,在安卓4.4及以下机型上,crosswalk 的性能有很大的优势。

  • 在这个环节,比较重要的是要提高内核下载的到达率,解决用户网络连接断开,或者应用被杀死,进程中断,文件完整性的问题。我们做了大量工作,通过判断网络情况,文件下载结果的验证,防止出现下载死循环,导致用户手机内存爆炸的问题。最终到达率在95%以上。

能力扩展
  • web 天生就有动态的特性,但在 native 端也有其不足的地方。就是他的权限不足,无法访问 native 的一些系统功能,比如添加日历,访问通讯录等。这些在电商应用中都是常见的需求。由于这个问题,我们提供了统一的内核访问 api ,然后接入 Cordova 。Cordova是一个能让 JavaScript 访问原生设备功能,如摄像头、麦克风等的库。

  • Cordova原理探究:通过继承WebChromeClient类,复写 onJsPrompt 方法,在其中通过CordovaBridge类,桥接到自己的功能点,通过自己定义好的协议,实现对应的功能。Cordova的一个强大的地方,就是他有插件机制,业务方可以很容易的扩展插件,js调用native回非常方便,只要继承一下CordovaPlugin类,在execute方法中执行自己的逻辑即可。

  • 结合难点

    • 由于我们封装了自己的内核,而且是采用自己定制的一套接口,就不能直接使用Cordova官方仓库提供的已经封装好的 SystemWebview 类,所以需要深入了解他的一些逻辑,才能进行调用,否则会遇到深坑。
    • 调试需要结合js一起进行,在前端有一个 deviceready 事件会传递到native端,如果调用时机错误,Cordova 就会加载失败,从而导致传递给桥接类的秘钥错误,调用直接失败。
    • 我们自己的内核封装不完善,有一些方法实现不一致,有些方法没有。此时需要去看源码类似的地方,进行调用尝试。
数据分析

既然使用了多种内核,就要对不同的内核进行数据分析。在客户端进行对应的性能打点,在数据平台上通过 sql 语句进行数据清洗,并每天定时生成。利用 Reactjs 开发了数据展示的前端界面,每天可以查看昨日的内核分布,机型占比,性能对比等数据,为内核的性能保证提供数据支撑。

问题

  • 兼容性问题。经常会有前端同学来问在某些机型上面是好的,在另外一个机器上就不行。此类问题通常是因为各个设备不兼容导致的,各大应用厂商都会对系统进行一些定制,导致问题百出。由于各个版本的 webview 存在兼容性问题,后来我们又接入了腾讯的 x5 内核。
  • 安卓系统不断的更新演进,旧的内核越来越少,webview 性能都显著提高,我们自己的内核面临下架的问题。最终在2016年12月,将 crosswalk 的内核下载停掉。
  • crosswalk 另一个问题是存在硬件加速问题,他使用的是 surfaceview ,在低端机型上,很容易内存不够,被系统杀掉。

总结

整个项目包含的内容不只文字所能术完,在此期间,同事们和我都做了很多努力,在保证功能的前提下,不断的做优化,提升性能,最终将蘑菇街的页面加载速度提升到秒级。

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,082评论 25 707
  • 关于 android Webview 基本使用 加载html四种方式 简单使用 在AndroidManifest....
    小面包屑阅读 5,400评论 2 13
  • 爱生活的随性简单 不知道为什么会出现的一本杂志 既然是杂志更多的是被用来作为打发时间之用了 杂志这个往往具有很强的...
    更欣阅读 289评论 0 15
  • 昨天看了一篇文章,作者讲述了自己优秀的姐姐,优秀到什么程度呢,就是16岁连跳几级考进清华,毕业也就才20岁,想我...
    我是马依云阅读 230评论 0 0
  • 我不知道什么是爱情 我只知道 即使那个人一无所有 我也会 不相弃 不相离
    上官楠阅读 279评论 4 6