年4月的qcon上,阿里巴巴高级总监、淘宝移动平台和新业务事业部负责人阿里百川庄卓然(花名南天)表示,阿里移动终端跨平台开发框架weex将于6月开始内部测试和开源 qcon次日,阿里技术专家徐凯(简称桂岛)和阿里前端开发专家赵锦江(简称毕达哥拉斯)向与会者发表了“weex柔性移动端高性能动态化计划”的演讲,详细分解了该技术方案。

“weex详解 灵活的移动端高性能动态化方案”

昨天南天宣布weex将开始开源内部测试。 截至今天中午,据我们统计,申请内部测试的顾客人数超过1400人,大家的热情远远超出了我们的预期。 非常感谢大家的支持

在考虑移动开发最佳实践时,我们认为移动开发的未来是一个更平衡的过程,需要性能和动态性。 第二,必须开放互联,pc端一直如此,状态非常好。 我们相信,未来的移动网络将建立在平台之间没有障碍、简单、直接、易于使用、更加普及的技术系统之上。 基于这些假设,我们有了weex方案。

“weex详解 灵活的移动端高性能动态化方案”

weex是自去年双十一销售节以来首次被用于我们的官方产品,双十一销售节承载着双十一销售节主会场的员工。 weex比主会场难吗? 从去年的双11艺术节到现在,我们自己贡献了很多文案,包括使用阿里内网尝试开源和内部测试活动。 包括昨天演示的僵尸视频、扫雷和计算机在内,各种丰富的场景在weex上制作,不仅仅是比较主会场的技术处理方案。

“weex详解 灵活的移动端高性能动态化方案”

首先谈谈对weex团队移动开发模式的理解。

目前,大多数移动应用程序都是这样的最佳实践。 首先,所有的移动接口被分成页面,中间有路由控制逻辑。 此外,还需要移动端的丰富功能,并作为api提供给开发者。 在我们看来,这是理想的快速发展模式。

关于开发模式,我们倾向于用html、css、js等稍微标准化的东西作为开发体验提供给开发者。 这些东西在前端非常快,非常简单。 这里需要强调的是,语法设计尊重互联网标准,包括来自非常好的mvvm前端框架的核心源代码。 我们的开源内部测试在海外展开,得到了非常热烈的回答。 短短一天,外国人的关心和热情出乎我们的意料。 有些人很兴奋,想知道什么时候能看到源代码,就联系了我们。 我们觉得这也是幸福的事情。

“weex详解 灵活的移动端高性能动态化方案”

weex的页面自然支持组件化。 首先,我们的接口可以组成,一个很多复杂的接口可以分成各个组成部分。 刚才演示的组件都是简单的组件,每个组件都被视为一个组件放入模型中,对应于接口的结构、格式细节、行为的定义。 视图倾向于将数据绑定到视图中需要显示和动态更改的部分。 如果希望在绑定后更改接口,可以通过更改数据来实现。 它从视图上看是一种非常流畅的控制逻辑和代码模式,也是weex上层语法设计的基础。 如果你的界面多而复杂,可能会有更多的细节和更多的分解。 必须将整个接口分解为模块,并定义每个模块。 如果接口足够多且复杂,可以将其分解为组件,然后定义每个组件的具体副本。 定义方法从结构、风格、行为的角度进行定义,将这些组件有机结合完成页面开发。

“weex详解 灵活的移动端高性能动态化方案”

重要语法概要。 首先有几个要素。 首先由virtualdomtree演示。 这包括事件绑定、组件和子元素的嵌套。 这是整个模板结构。 下面是风格。 虽然可以采样一般的格式,但是也可以更明确模板结构而不陷入整个特定的格式描述中。 在这里收敛一点。 我们只支持一个类的选择器创建。 首先,从表演的立场出发。 以前传递的css可以理解为n对n的数据库。 匹配过程多而复杂,性能得不到很好的保证。 为了保证性能,在一个班里约定了选择器。 性能可以保证。

“weex详解 灵活的移动端高性能动态化方案”

另外,我们的样式缺省情况下具有范围,因此可以安全地定义各种类名,而不必担心与其他组件发生冲突。 全球冲突是css的七宗罪之一,我们非常重视,所以我们在实践中明确了其范围。

此外,如先前演示中所述,还可以控制if和repeat等的显示。 刚才没有演示很特别,我要加一个。 在安卓上,性能并不是很好的地方,客户可以看到接口的加载过程,并不是一瞬间就能完成的。 可以通过添加此值来细化显示界面的粒度。 如果上层把append等于树,里面的一系列东西就会被加载一次,从性能优化的角度来看是特殊的设计。 然后是id。 我们可以通过向其中写入id得到这个值,作为参数传播到api上来解决。

“weex详解 灵活的移动端高性能动态化方案”

除了前面展示的p空白色容器、照片和副本之外,还支持提高了性能的slider组件和list。 这样可以提高性能,自动执行内存管理和资源管理组件,从而提高性能和帧速率。 另外,输入框,我们最近刚做,刚支持,实验阶段可能有小东西。 在这个范围之外,业务可以在高层横向扩展,稍后我会详细说明。 这是模板和格式部分的介绍。

“weex详解 灵活的移动端高性能动态化方案”

格式部分支持flexbox,非常灵活和方便。 如果使用flexbox,界面可以分割成豆腐块的话,

正如前面的例子中提到的,脚本的一部分是viewmodel设计,data和methods是最重要的,如果值发生变化,对应的数据绑定的值也会发生变化。 除此之外,我们提供了生命周期的做法。 创建时、数据拦截完成时、渲染完成时,请在data和methods下写入这三种方法。 还有原生api,刚才演示的时候也出来了。 这里不多做介绍。

“weex详解 灵活的移动端高性能动态化方案”

组件化通过构建许多复杂的东西,定义子组件(如在我上面有foo组件),可以通过foo标签将foo嵌入到另一个组件中,如果数据被传播,则在foo组件中写入a和b 它既是组件之间的通信,也是事件机制。 每个组件都可以关闭,可以拦截自定义事件,也可以解除绑定。 想触发事件也有三种方法。 只有我自己,dispatch会向上移动到所有父组件,$broadcast会传播到所有子组件,并且这些设计和vue非常接近,组件之间进行通信。

“weex详解 灵活的移动端高性能动态化方案”

除了刚才介绍的这些特征之外,我们相信未来会更丰富,开发者需要的,会提供平时开发中遇到的场景、更丰富的形式、更好的动画展示(包括很多复杂的手势场景)。 在这方面,性能、开发体验和最终效果都很好。 这是团队为了将来提供给大家而努力的事情。 并且希望收集和共享越来越多的相关素材,制作更多的工具,提供更好的开发者体验。

“weex详解 灵活的移动端高性能动态化方案”

包括刚才演示的playgroundapp在内的很多副本都可以在我们的官网上找到。 现在处于开源内部测量阶段。 大家可以提交申请,稍后访问仓库,了解更具体的复印件。

这张图谁也不知道,但正如前面提到的,钩子说的是一层叫dsl的。 再下到virtualdom和render阶层h5,我有意用不同的颜色表示它,从我们设计一开始就想用三个边缘来表示,所以这个地方有点亮。

我们把刚才的图再展开一点。 最上面是我们的dsl。 我们通常称为weex文件,通过transformer这一层部署到服务器上,服务器端就完成了。 不用担心我们的转换是否有性能问题。 因为这在服务端已经完成了。 到了客户端,第一层是我们的JS -框架,最后去renderrengine,往下看,左边是我们的dsl文件,右边是转换后的jsbundle,dsl的template是我们的类型和次诺特。 最后是脚本。 脚本基本上是直译。 输入为virtualdom输出为native或h5view,恢复为内存中的树形数据结构,创建view,将事情绑定到view,设定view基本属性。 虚线相当于native经过一个过程,h5将此事件传递给webkitlayoutengine,以重新调整所有元素的大小和位置。 这张图整体基本上明确了weexrender流程,我们分为三个线程,不同的线程负责不同的事件,js线程优先保障我们的流动性,未来我们会有越来越多的技术文档,比较详细的解释。

“weex详解 灵活的移动端高性能动态化方案”

以下是当前最受关注的weex体系结构的关键点,包括性能、可扩展性和可用性。

首先是性能。 我们内部有这样的压力测量网页。 我们同学把benchmark放在playground上,大家下载就可以看了。 在我们内部做压力测量的时候调到000个节点,大概10个画面,一个画面有3个卡,一个卡有100个节点左右。 让我们看看数据。 第一次表演是我们的加载时间。 同一页1300、1600也不太大。 20%左右,帧频差异很大。 scroller差不多一样。 内存有点好,因为这边用的是recycleview。 其次是cpu、静默cpu的消耗,以及运行中的cpu的峰值。 由于静默cpu接近0点,所以不进行16毫秒的回合。 如果进行16毫秒的回合,cpu会更高。

“weex详解 灵活的移动端高性能动态化方案”

这是实际的商业数据。 3月页面上线后,我们看到这一页是活动,是3月新风尚的活动。 这个事件页面不使用list,特别是不使用内存。 这两个设备被定义为低端,帧率差异比较明显,无论是数据还是实际体验,流动性大致都有这样的差异。 性能经常提及帧率、加载时间,但经常忽略一个事件。 在本机ui开发中,js资源一般不加载到服务器端。 weex等动态化方案有副作用。 必须从服务器端下载js。 将js内置于客户端,避免下载问题。 这里包含了一系列的战略。 我们内部有一系列的机制,然后将这个机制作为独立的技术产品开放。

“weex详解 灵活的移动端高性能动态化方案”

接下来是我们的兼容性。 兼容性不仅是weex有问题,偏内核型项目也有问题。 举个weex的例子,第一排是我们的商业代码,从下面看,上面的两次变迁,到客户端,整个场景都是n的立方体。 列举具体的数字,我的商业代码变更为3个版本,(英语) 3个版本,最后有3个立方体27的场景。 兼容性是我们一直重视的问题。 我们进行了一些事件。 首先,进行包括js和h5单测在内的单测保证,保证最基础的ut本身带来的意义。 第二个是js单测环境,我们通常在跑(英语) (虽然是在英语环境下,但和js的安全不同。 接下来是自动化事业,这个事业的细分也可以分为两块。 一个是我们的比较截图对照。 例如,我们的同学会说我们设定了各种各样的详细属性。 你怎么渲染的是你实际想要的,在api水平上效果不太好。 所以,这样的我们可以通过截图,将最终生成的结果和我们意想不到的结果进行图形比对,在比较古老成熟的核心上比较成熟,有点参考价值。 另外,layoutresults在包括model在内的相当一部分中,包括其他布局类,但实际上我们完全可以通过元素,最终其宽度很高,左上角的点,通过基本新闻,通过测试的过程 所以我们经过这两个事业,成熟后,会尽快放在上面。

“weex详解 灵活的移动端高性能动态化方案”

关于可扩展性,让我们先回顾一下这张图。 如上所述,现在的weex给人一种可以用weex写很多页面的直观感觉,为了构成weex大家看到的结构,提供了连接路由机制、内部导航和页面的帮助。 详细来看,component,如果要扩展特定的点,请使用anotation来识别输入输出参数。 这是一个模块,在dsl中看到的是api,它下面有一个模块。 如果扩展module也一样的话,这是一个简单的跳转,基本新闻上去了,实现了业务功能,一个module完成了,很简单。

“weex详解 灵活的移动端高性能动态化方案”

这是路线。 因为整个路由是app框架的一部分,所以下一个计划还需要多个。 单独看组件,包括前面两个,下面的生命周期思考,有动画和手势。 我认为这都是最基础的东西。 其次,它包括全球多个weex容器之间的通信机制、数据存储、互联网、一大堆传感器,包括基础的fs、商务舱,整体上是同步进行的,但目前的业务集中在这一点上 回到刚才的老问题,如果我们打开module,给上层提供api,中间提供adapter,提供自由实现,就去掉默认的盖子。 例如,用手取出里面( tbxxx )、覆盖默认页面( wxxxx ),对大家来说是能力已经增强了、增加了新的组件还是新的模块? 现在

“weex详解 灵活的移动端高性能动态化方案”

最后是我们的可用性。 之前说的很多。 这场表演要是有几张图就好了。 这是我们的工具链,红色代表完成,黄色在5月、6月完成,在6月正式开源之前。 剩下的一个是我们内部正在讨论的东西,以及决定时间逐步完成的东西,这些都是工具。 我们先给大家提供播放组。 扫描代码,也有自己的examples。 第二个是调试工具,位于chromedevtools常见的功能中。 又是立足之地。 如果只是大家在玩的话,playground就可以了。 如果要自己制作独立的app,如果要用weex制作,我们也会为你提供立足之地。 我们计划中的独立项目不是最终的名字,而是最终有像apphub这样的工具。 包括新闻在内,在界面上展示结构。 这是前面提到的例子,这是playground中的东西。 虽然截图和iphone的效果和安卓完全一样,但是利用weex现有的功能建立了一个比较有趣的组件库。 然后是我们的文档,包括《项目指南》、《参考》、《工具链》。 详细情况我就不多说了,大家可以去看。

“weex详解 灵活的移动端高性能动态化方案”

目前,weex有三种集成方法。

所有页面模式

o目前支持单页采用,或者整个app采用weex开发(还不完善,需要开发路由器和生命周期管理),这是可以与rn媲美的主要模式。

采用weex作为IOs /安卓组件,并将其比喻为imageview。 首页、主搜索结果、交易组件化等,这些诉求虽然商业级信息表达这样的native页面主体稳定,但局部动态诉求旺盛且频繁出版,处理这类问题也是weex的重点。

关于让native先生快速上手准web开发的方法和有趣的话题,也提出了很多建议。

oh5种产品采用weex、模拟wvc。 猫超、互动页面、一点多、噪声通道页面等一点多、特殊的h5页面在短期内不可能完全进入weex全页面模式(或rn )。 对比这一痛点,启动wvc项目,在现有h5页面进行微调,通过实际业务验证了引入native处理长列表内存激增、滚动不顺畅、动画/手势体验差等问题的想法。

“weex详解 灵活的移动端高性能动态化方案”

owvc将嵌入到weex中,并进入weex的H5组件模式。

这三种模式几乎涵盖了淘类业务中的动态诉求(与native比较)或体验提升诉求(与h5比较)。 更令人感兴趣的是,这三种模式的技术基础是一致的,这意味着商务端可以使用本机或h5component模式处理实际业务痛点,并顺利过渡到weex全页面模式。 期待着weex成长为app框架的一天。

“weex详解 灵活的移动端高性能动态化方案”

最后,是我们从过去11次的销售节到现在5个多月间做的一点点事件。 首先创建原型版本,然后使原型版本独立于独立客户端可用的sdk,扩展格式和布局,扩展基础组件,在这两个月内专注于工具。

标题:“weex详解 灵活的移动端高性能动态化方案”

地址:http://www.hongyupm.com/gnyw/2868.html