热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

理想主义团队的开源作品之Chameleon跨端框架

历经近20个月打磨,滴滴跨端方案chameleon终于开源了https:github.comdidichameleon,真正专注于一套代码运行多端。微信月活10亿月活(超过网民数量,用户多个账号?)、支付宝4亿月活、百度3.3亿月活;2018Q3中国Android手机占智能手机市场超过80%;无论BAT还是Android快应用都是中国互联网用户的真正用户入口,作为小型互联网公司都希望能搭上小程序的风口,从而蹭一波流量。计算机技术历史发展告诉我们,每一种新技术出现都会经历
  • 背景

  • 解决方案

  • 原理

  • 久经考验

  • 生产应用举例

  • 易用性好

  • 多态协议

  • 学习成本低

  • 渐进式接入

  • 业内对比

  • 后期规划

  • 理想主义

历经近20个月打磨,滴滴跨端方案chameleon终于开源了https://github.com/didi/chameleon, 真正专注于一套代码运行多端。

背景

微信月活 10 亿月活(超过网民数量,用户多个账号?)、支付宝 4 亿月活、百度3.3 亿月活;2018 Q3 中国 Android 手机占智能手机市场超过 80%;无论 BAT 还是 Android 快应用都是中国互联网用户的真正用户入口,作为小型互联网公司都希望能搭上小程序的风口,从而蹭一波流量。

计算机技术历史发展告诉我们,每一种新技术出现都会经历"各自为政"的阶段,小程序技术也不例外。微信小程序作为首创者,虽然其他小程序都在技术实现原理、接口设计刻意模仿,但是作为一线开发者面对同样的应用实现往往需要重复开发、测试,从前1单位的工作量变成了 N 单位的工作量。

滴滴的研发工程师是其中最显著的"受害者"之一,滴滴出行在微信钱包、支付宝、Android 快应用都有相关入口,用户流量占比不低。

各类小程序已经能覆盖中国所有网民,从 Facebook 在2013年开源 React,这个项目本身越滚越大。从最早的WebUI引擎衍生的 ReactNative 项目,目标更是宏伟。

Vue.js于2014年左右发布,逆流而上占据了大量用户群体,2016 年阿里巴巴也基于 Vue 发布了 Weex 项目,可以用 Vue 编写 NativeAPP

Google 在 2018 年末正式发布了面向未来的跨 Andoid、IOS 端 Flutter1.0.0,作为面向未来的跨端框架,前景一片光明。

解决方案

虽然不同各端框架环境千变万化,无论各类小程序、Weex、React-Native、Flutter、快应用,它们万变不离其宗的是 MVVM 架构设计思想。Chameleon 希望既能用一套代码完成所有端需求,将相同的业务逻辑完成收敛到同一层系统里面,又不会因为项目的抽象一致导致可维护性变差。

理想主义团队的开源作品之 Chameleon 跨端框架

让 MVVM 跨端环境大统一:以各个跨端技术(Weex、React-Native、WebView/浏览器、Flutter)和产品业务(微信小程序、快应用、支付宝小程序、百度智能小程序、今日头条小程序、其他各类小程序)的共同技术特点—— MVVM 架构设计, 以统一 MVVM 跨端架构平台为目标的程序语言框架 Chameleon  (任意使用MVVM架构设计的终端,都能以 Chameleon 开发并运行)。

View:

ChameleonSDK 包括各类小程序、Web 端、客户端(React-Native、Weex、Flutter),目前支持微信小程序、Web、Weex三类,后续支持更多 MVVM 为标准的端。

View Model:

CML(Chameleon MarkupLanguage) 是框架设计的一套标签语言,结合基础组件、事件系统、数据绑定,可以构建出页面的结构。同时为了降低学习成本支持类 VueTemplate

原理

理想主义团队的开源作品之 Chameleon 跨端框架

久经考验

2017 年时微信小程序发布,滴滴作为白名单用户首先开始尝试接入。这时候我们专门成立了一个 1、2 人的小项目组,完成一个名为 MPV 的项目,一期目标是“不影响用户发挥,不依赖框架方的原则性实现一套代码运行 Web 和微信小程序”。MPV 研发完成后,在多个项目实践中,确实完成了超过 90%代码重用,总体上开发效率和测试效率都有了明显提升,同时暴露出更多问题,在 MPV 的实践积累下,有了一定的底气和把握,后续的规划更加明确。

  • 可维护性问题,没有隔离公用代码和各端差异代码。

  • 方向选择错误,MPV 使用了小程序语法标准(小程序的生命周期、API 接口等),导致用户使用上无法清晰理解使用规范。

  • 各端周边小型差异点太多。

  • 模板DSL语法不规范。

  • 两端界面效果不一致。

  • 多端调试成本高。

  • 工程化建设落后。

  • 不能直接使用各端已有生态组件,即缺乏标准规范接入某个端已有开源组件。

2018 年 4 月我们把跨端项目规模进一步扩大,跨 N 端的解决方案命名为 Chameleon/kmiln/ ,简写 CML,中文名卡梅龙;中文意思变色龙,意味着就像变 色龙一样能适应不同环境的跨端整体解决方案。

Chameleon 在 MPV 的实践积累下,不仅解决了遇到的各种可维护性问题,后续的规划更加明确,目标真正专注于让一套代码运行多端,提供标准的 MVVM 模式统一各类终端。

经过一年数十位前端开发人员在上百页面中的实践经验积累, 在本周正式开源:https://github.com/didi/chameleon。

生产应用举例

理想主义团队的开源作品之 Chameleon 跨端框架

易用性好

一套代码运行多端理念,被人挑战最多的如何保证易用性。

  • 一致性,多端实现效果一致。

  • 简洁性,各端开发定制化空间大,且公用代码不会混杂某端代码。

  • 性能好,不能增加产出文件包大小。

  • 开发快,整体开发流程要高效。

理想主义团队的开源作品之 Chameleon 跨端框架

多态协议

多端合并后各端差异化实现在所难免,一开始是差异化代码和业务逻辑混杂在一起。这就尴尬了,如果你觉得以上不复杂,假设有4、5个端呢,业务逻辑掺杂跨端逻辑,产品逻辑别打断,可读性差,需求变更,牵一发动全身,每个端都要测试,跨端代码效率变得适得其反。

下图各端差异化代码也和业务逻辑混合在一起

理想主义团队的开源作品之 Chameleon 跨端框架

多态协议设计的灵感来自于Apache Thrift - 可伸缩的跨语言服务开发框架,本质上跨端也属于跨语言。它能让Chameleon开发者快速接入各个客户端底层功能或者差异化业务实现,避免可读性差、可维护性差的问题。

多态协议通过定义标准接口(interface),各端模块各自独立实现,编译时和运行时对实现的接口输入输出做检查。

主要2个目标:

  • 保障多端可维护性

  • 编译时拆分多端代码

当用户按照标准规范扩展个别产品效果多端不一致或特定底层能力多端不一致的的功能时,多态协议可以有效隔离公用代码和各端差异代码,保证”河水不犯井水“。

理想主义团队的开源作品之 Chameleon 跨端框架

举例:当你想开发一个图表功能组件时,可能用到 echarts :

1. 在项目中分别按照web版本  npm install echarts 和微信版本下载相关文件

2. 然后定义一个多态组件 charts

3. 在 charts/charts.interface 定义该组件的输入和输出

4. 分别在 charts/charts.wx.cml 和 charts/charts.web.cml 里面调用微信版本(可使用微信小程序组件文件夹)和web版本(可调用.vue后缀文件)

5. 最后就能在项目中使用该组件

产出包里面只包含该组件其中一端的代码;因输入输出的限制,该组件调用上完全一致,不用根据某端做特殊逻辑处理。你可以将该echart多态组件单独放置在一个仓库里面单独维护并发布;其他人无需关系内部细节,直接 npm install echart 即可使用。

学习成本低

VM层的CML语法是关联视图层和逻辑层的抽象DSL,其有学习成本问题是被热心很多帮助我们的同学提的最多建议,本身其CML学习成本已经非常低,无非是数据双向绑定、事件绑定、组件树、条件语句、循环遍历等等。一开始我们是拒绝的,后来综合考虑之下,还是妥协支持了类vue语法,让开发者更快上手CML。

渐进式接入

很多人已经开发小程序了,又不愿意大刀阔斧重新改造,也希望使用 CML ?当然可以,2种方式使用 CML:

说明/类型 整个项目使用CML 公用组件使用CML
关系图 理想主义团队的开源作品之 Chameleon 跨端框架 理想主义团队的开源作品之 Chameleon 跨端框架
说明

业务层需求在各端环境高度类似,

原本需要针对不同端重复开发、重复测试,

那么使用Chameleon将整个项目”从上至下“都用一套代码运行。

原本公用组件需要重复开发、重复测试,

使用一套代码开发公用组件,

各个端可以直接使用公用组件

举例 首页、详情页、订单 分享组件、支付组件、地图组件、picker组件

业内对比

业内其他框架和我们的目标不一样,我们是希望真正一套代码运行多端,而其他框架无非是“某个小程序语法增强”或者“推广某个框架写小程序 ”,但却是有重合点,列举一下功能对比:

理想主义团队的开源作品之 Chameleon 跨端框架

理想主义团队的开源作品之 Chameleon 跨端框架

后期规划

理想主义团队的开源作品之 Chameleon 跨端框架

理想主义

1. 我们忍受不了自己的时间浪费在重复劳动上。

2. 要么不做要做就到极致,一套代码运行多端本来就是理想主义,这条路很艰苦,我们却偏执的坚信一定要尽最大努力做出来,作为一个不那么自 信的人,不做到好用是不敢发布出来的。

3. CML框架各个细节都要做到极致,我们不能容忍有设计上的缺陷,所以常常CML周会上团队成员讨论6个小时直到深夜。

快速开始:https://cmljs.org/doc/quick start/quick start.html

常见问题: https://cmljs.org/doc/framework/faq.html

理想主义团队的开源作品之 Chameleon 跨端框架

喜欢我们的文章,记得关注、留言、在看、转发哟

点击下方“阅读原文”,给项目来一个 star!

↓↓↓


以上所述就是小编给大家介绍的《理想主义团队的开源作品之 Chameleon 跨端框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 必须先赞下国人npm库作品:node-images(https:github.comzhangyuanweinode-images),封装了跨平台的C++逻辑,形成nodejsAP ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • SQL Server 内存中OLTP内部机制概述(一)
    内存中OLTP(项目名为“Hekaton”)是一个新的完全集成到SQLServer中的数据库引擎组件。它专为访问内存常驻数据的OLTP工作负荷而进行优化。内存中OLTP有助于OLT ... [详细]
  • 【影评】大内密探灵灵狗
    本文是对王晶执导的电影《大内密探灵灵狗》进行的影评。文章称赞了王晶的才华和导演经验,认为演员阵容强大,笑料不少,发明新奇又好笑。然而,编剧的表现被认为是本片的最大失败,宣传言过其实,笑点不多。总体来说,本片是一部典型的王式喜剧,可看性较高,但没有突破。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • npmrunbuild后dist文件夹下面直接浏览器打开index.html,css和js的路径都不正确。放到跟目录下就正常了,iis上同样只能在根目录下。我项目的目录如下: ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
author-avatar
fan9210729
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有