京东小程序的三生三世

内容来源:2017年3月11日,周伟鹏在“H5梦工厂”进行《京东小程序的三生三世》演讲分享。IT大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。

嘉宾演讲视频地址:http://t.cn/R9Vtevu

前世

之前京东购物入口的首页还是比较复杂的,现在首页简化到只有搜索和领券的功能。

初见

1、小程序产品定位
用完即走,触手可及。

轻量、突出重点,快速直达用户的核心需求。

优秀的操作体验。

2、小程序组成

作为开发者来说,小程序需要WXML、WXSS和JS三部分。WXML和WXSS组成了view层,负责view层的渲染。JS组成了manager层,JS负责整个小程序的逻辑部分。

3、小程序架构

WXML和WXSS负责配置部分,小程序的view层其实还是Web view的形式。Manger是在app service的部分。

页面可以通过JSbridge和app service进行交互,也可以调用一些native组件。

Manager也是通过JSbridge,额外有一个单独封装的API,就可以直接通过API调用native组件。

4、小程序native组件

小程序的实现方式是通过小程序JSbridge的API,获取原来Web组件的信息,在Webview上盖了一层native的组件。

小程序里具有native能力的组件大概有canvas、video、input、textarea、map和picker。这几个组件在小程序里是以native的形式展现出来。

5、与Web端的区别

优点:

小程序具有native的能力,有扫码、离线、地图之类的功能。

它接近原生应用的用户体验。

它是类似Web的开发语言,入门门槛低。

提供大量常用组件,开发成本低。

自带ES6支持。

限制:

无法访问到真实的DOM节点。

无法绑定原生事件。

更新需要发版本,微信审核。

6、京东购物小程序

技术预研:前期我们做了大量的技术预研。阅读一些官方文档、事例代码,动手编写demo,也让一些同事组织了内部技术分享。

组件开发团队:我们的开发团队前端是四个人,“后台”开发有六个人。

确定结构及分工:

我们把小程序分为page和models、API两部分。

前端主要负责page部分,包括页面重构、数据渲染、用户交互逻辑等等。

Models和API这层是“后台”开发负责的,它们主要负责数据的获取、加工,提供公共的API。

制定开发规范:我们制定了命名规范、接口规范、样式规范、文档规范、文件目录规范和git分支规范。

渡劫

1、手动实现cookie

我们在开发小程序的时候遇到的第一个问题就是运行环境里没有cookie,导致后台接口无法验证登录态。

利用本地存储的能力,在获得网络请求的时候拿到cookie,存到local storage里。下次发网络请求的时候,再从storage里拿出cookie,手动添加到header里,实现了手动cookie的过程。

2、用Nginx进行转发

第二个问题是wx.request的合法域名最多为10个,导致其他域名下的业务请求失败。

因为京东业务分散,域名很多,一个页面需要调用大量API接口,这些API都散落在不同的域名下面。

我们配置了一台nginx,培植了一个新域名专门供小程序进行域名的转发,把需要用到的域名全都映射到新域名的路径里,这样就可以把大量域名合并到一个或几个很小的域名里,成功绕过了限制。

3、使用Websocket

wx.request的并发数不能超过5个,导致并发能力受限,超出限制时请求失败。

传统方式是通过page直接和Server进行交互。有了小程序限制之后,我们在中间加入了WS Server,就可以把请求包装到Websocket里,Websocket再通过转发到Server,Server返回数据后再通过Websocket的形式回到前面的小程序。

因为微信原生支持Websocket,并发数也比较高,基本满足了并发的需求。

4、提前梳理好页面层级关系

微信小程序页面层级最多为5个,这就会导致像京东购物这样比较复杂的页面层级达到上限时页面跳转无响应。

提前做好页面层级关系的梳理,保证页面逻辑在5层之内。

5、组件开发模式

小程序只能通过page对象来进行页面内容的修改,加大了UI组件的开发难度。

京东的小程序开发是把组件完全独立出来,每个组件都拥有自己的JS、WXML和WXSS。利用组件自己的JS,setData到WXML,WXML通过事件回调的方式回调到自己的JS。

组件开发完之后WXML通过import+template的方式引用到页面的WXML里。JS通过require的方式引入页面。

6、代码动态下发?

小程序的程序包大小不能超过1MB,使很多功能受限。对于电商应用,1MB确实不太够。

我们当时有想过将JS脚本内容通过接口请求,然后用eval执行,或是把模版文件内容通过接口获取后,动态插入到页面中。但是微信在这方面有许多限制,eval等能动态执行JS语句的函数被禁用,模版文件内容无法动态添加。

飞升

1、关于性能优化

“Getthe hardest part done first.”这里的the hardest part我们当时首先想到的是图片。

2、基础支持

京东有一套比较好的图片系统,它是基于京东分布式文件系统JFS和CDN系统的一个包括存储、图片的在线处理、缓存分发的图片系统。

3、图片优化

利用CDN域名来分散请求,从而扩大并行下载数;

按需加载不同尺寸的图片;

使用Webp图片格式;

根据当前网络状况请求不同压缩质量的图片。

4、0ms呈现首屏

小程序本地存储的文件是像HTML、CSS、IMG和JS这类静态资源。

利用小程序的能力,通过上一个页面直接把首屏需要展现的页面传到下一个页面。在打开新页面的时候,静态资源和接口数据都已经有了,就可以直接展现出来。

5、页面滑动优化

搜索列表页通过回收屏幕外的节点来保持滑动的流畅性。

6、Page间的通信

我们用事件的方式做了一个page间的通信,支付成功后会触发一个事件,通知到前面需要订阅它的页面去更新自己的状态。

7、网络容灾

Page是通过Websocket的方式和Server进行交互的,但因为用户的网络情况是不确定的,导致有时候小程序会连不到Websocket。这时我们会在小程序里自动切到备份的HTTPS的服务器,通过HTTPS服务器和Server正常地进行交互,保证了小程序的稳定性。

8、异常监控

在一些不确定的情况下,小程序有可能出现报错之类的情况。微信给我们提供了onError的API,通过这个API可以捕获到小程序的一些错误,然后我们就能把这些错误信息提交到monitor上,根据监控平台反馈的数据对这些错误进行不断优化和迭代。

9、一次开发,多次复用

把基础类服务打包,给其它小程序做引用。

我的分享到此结束,谢谢大家!

相关推荐
移动端SDK优化的特点与经验分享
Shall we begin?

时间: 2024-10-26 13:55:06

京东小程序的三生三世的相关文章

微信小程序第一手实践分享

本文讲的是微信小程序第一手实践分享,今天是微信小程序正式上线的第一天,从小程序公布.内测到今天,市面上对于小程序众说纷纭,小程序的到来给我们(微信开发)带来了什么,仅仅是又多了一种推广渠道吗?又或者是真的像外界说的那样它将取代APP?今天就和大家分享我个人对小程序的理解以及开发过程中的一些体会. 一.如何理解小程序 张小龙是基于他对未来服务场景--所见即所得的信息交互过程提出的小程序,他认为微信新形式的服务不应当只是停留在原有公众号订阅.推送的基础上:而应当更类似于APP支持一些扩展开发的能力但

小程序技术方案探讨

微信小程序上线大半年,大部分技术原理也有文章介绍了,本文尝试从需求出发探讨微信小程序技术方案的来源,以及最近公测的支付宝小程序技术方案上的考量. 微信小程序 微信小程序的需求是让第三方开发者可以接入,可以使用微信的提供的接口去开发应用嵌入在微信里.对于这个需求,最简单的实现方案是:让外部开发者开发纯H5应用,在微信的 H5 容器里打开,容器提供微信 native 接口,就行了.在有小程序之前,已经有很多这样的业务接入,像京东购物,钱包里的各种友商大众点评/滴滴出行等,都可以认为是一个"小程序&q

出书了!实战微信小程序

真正用心写完一本书,才知道写书真的很不容易. 我热衷喜欢分享一些技术,也喜欢钻研一些新东西,去年微信小程序刚内测的时候,我和我的同事四个人就一起研究,恰好公司有小程序相关的项目,做项目的同时,越发感觉到小程序很有意思. 在App越来越难装到手机里的今天,小程序这款产品真的特别棒! 我们四个人都非常认同小程序,开始决定写个系列教程,用于给公司其它员工参考.我们都非常认真的写,越写越详细,越透彻. 后来我们4个人一拍大腿,干脆出本书吧. 于是我们进坑了 我们把每个点都尽量的描述清楚,怎么合理组织代码

我心中的微信小程序 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 最近几个月一直热火朝天张小龙最近要把应用折叠到微信里,这些应用被他称为:小程序. #什么是小程序?张小龙原话描述如下: #小程序尝鲜 每日更新关注:http://weibo.com/hanjunqiang  新浪微博!iOS开发者交流QQ群: 446310206 1.小程序 VS APP 微信小程序有些类似于上面寄生在支付宝里的各类服务.他们具有业务简单.明确,使用频

为什么你搜不到想要的小程序?【附带最全小程序名单】

想必各位的朋友圈已经被微信小程序刷屏了,然而细心的观众可能发现了一些问题: 1.小程序名字怎么都奇奇怪怪的? 2.怎么也搜不到自己想要的小程序? 比如下面,简直惨不忍睹,如果不是提前知道完整全名,几乎搜不出来. 于是,犀利的网友开始吐槽: 对于一个APP重度使用者来说,小程序意味着一早上起来就解英格玛密码 然而雷锋网(公众号:雷锋网)发现,有的小程序只有通过全文才能搜索出来,然而搜索「京东」却能出来「京东购物」.搜索「滴滴」也能出来「滴滴出行DiDi」.搜索「携程」也能出来「携程酒店机票火车票」

微信小程序引起热议,但谁还记得企业微信呢?

这几天,微信小程序再次刷爆了朋友圈并收获众多好评,很多人期待着微信小程序将带来一场革命,有人说有了小程序手机上很多APP都能卸载了.难以否认的是,腾讯确实非常擅长产品,张小龙也是顶级的产品经理,但是产品的成功必然是站在战略正确之上的,而微信小程序就是一款战略产品. 但是,我认为目前来看,微信小程序并没有发挥微信的优势,有可能是雷声大雨点小.目前的乐观只是对腾讯产品能力的信任,而可能只是一时新鲜,就像之前也引起热议的企业微信一样. 微信想成为什么样的工具?技术工具 很明显,按照张小龙的说法:"微信

程序员测试微信小程序后,发现这群人才能赚到钱

11月4日晚,小程序开放公测消息刷爆开发者的朋友圈,众多程序猿摩拳擦掌准备搭上小程序红利之车,圈里圈外喊着小程序创业的比比皆是,甚至有美女加入程序猿微信群求男友. 为何会有这么大吸引力?小程序是什么?它推出目的是什么?主要影响哪些领域?又会有哪些人将从中获利?小程序会成功吗? 我是一名程序员,也申请了小程序的开发,有一些心得感受.与磐石之心一起讨论小程序,并把心得写出来提供给各位读者. 1.小程序是什么? 官方说法:"微信之父"张小龙描述:"小程序是一个不需要下载安装就可使用

小程序为何刚上线就遭冷落,部分已停止更新

2016年初,小程序概念被提出:2017年初,小程序正式上线.小程序无需下载,不占内存,用完即走,对一些内存小.只需使用基本功能的用户来说是利好.不过上线不久后,小程序的话题就遭到冷落.一些用户表示,小程序的使用场景和使用频率都不高,小程序能否替代APP从而一统江湖,目前还是一个疑问. 现象 部分小程序已停止更新 小程序于今年1月9日上线,小程序的上线在当时引起一阵晒小程序的热潮,众多网友在网上分享自己使用小程序的体验.不过,时至今日,不论是在微信群还是朋友圈中分享小程序使用体验的网友已经不多.

从程序员的角度分析微信小程序

昨天朋友圈被微信小程序刷爆了. 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先吐槽 微信小程序只发了200个邀请号,和我预想的一样,张小龙并没有翻我牌,难道就不能雨露均沾吗? 先来了解下什么是微信小程序. 转自知乎 微信也许重申了"我们是一款约炮软件" 微信还提供了一大堆接口和组件(不好意思,说了句废话). 下面是禅叔的观点: 小程序原理就是用JS调用底层native组件,和React Nat