简直是神仙打架! 多端统一框架哪家强?
1.跨端框架对前端开发者来讲难度较高,如果不具备移动终端开发能力,很难上手;
2.平台差异大,相同功能甚至要为不同的平台使用不同的接口编写大量平台相关代码。
而本文主要介绍的,是国内几个大厂推出的解决方案:Hippy、Chameleon 、Taro、Weex
腾讯跨端框架- Hippy
去年2月20日,腾讯QQ浏览器部门发起的开源跨端框架 Hippy。在腾讯内部,Hippy 已运行3年之久,跨 BG 共有 18 款线上业务正在使用 Hippy,日均 PV 过亿,且已建立一套完整生态。相较于其他跨端框架,Hippy 对前端开发者更友好:紧贴 W3C 标准,遵从网页开发各项规则,使用 JavaScript 为开发语言,同时支持 React 和 Vue 两种前端主流框架。
Hippy 实现了类似 Flutter 的引擎直通架构(在 React Native 中的 Fabric 架构),通过 C++ 开发的模块直接插入 JS 引擎中运行,绕过了前终端通讯编解码的开销,有效提升了 JS 前端代码和终端的通讯性能。在此基础之上,Hippy 正在实现高性能自绘,以提供更强的性能和更好的用户体验。
hippy-react 从语法上更加接近终端底层,某种程度上语法接近 React Native,同时通过官方提供了 hippy-react-web 组件库,也可以方便地生成 Web 版网页。
特征:
为传统 Web 前端设计,官方支持 React 和 Vue 两种主流前端框架。
不同的平台保持了相同的接口。
通过 JS 引擎 binding 模式实现的前终端通讯。
提供了高性能的可复用列表。
皆可平滑迁移到 Web 浏览器。
完整支持 Flex 的布局引擎。
滴滴跨端框架 - Chameleon
API 接口协议(Library):定义基础接口能力标准。 内置组件协议(Library):定义基础 Ui 组件标准。 框架协议(Framework):定义生命周期、事件、路由等框架标准。 DSL 协议(Language):定义视图和逻辑层的语法标准。 多态实现协议(Interface):定义允许用户使用差异化能力标准。
<template>
<view>
<text>{{title}}</text><text>{{reversedTitle}}</text>
</view>
</template>
<script>
class Index {
data = {
title: "chameleon"
}
computed = {
reversedTitle: function () {
return this.title.split('').reverse().join('')
}
}
mounted() {}
destroyed() {}
}
export default new Index();
</script>
网页编程采用的是 HTML + CSS + JS 这样的组合,同样道理,chameleon 中采用的是 CML + CMSS + JS。
JS 语法用于处理页面的逻辑层,与普通网页编程相比,本项目目标定义标准 MVVM 框架,拥有完整的生命周期,watch,computed,数据双向绑定等优秀的特性,能够快速提高开发速度、降低维护成本。
CML(Chameleon Markup Language)用于描述页面的结构,我们知道 HTML 是有一套标准的语义化标签,例如文本是<span>
按钮是<button>
。CML 同样具有一套标准的标签,我们将标签定义为组件
,CML 为用户提供了一系列组件。同时 CML 中还支持模板语法,例如条件渲染、列表渲染,数据绑定等等。同时,CML 支持使用类 VUE 语法,让你更快入手。
CMSS (Chameleon Style Sheets)用于描述 CML 页面结构的样式语言,其具有大部分 CSS 的特性,并且还可以支持各种 css 的预处语言less stylus
。
特点:
1. 多端高度一致
深入到编程语言维度保障一致性,包括框架、生命周期、内置组件、事件通信、路由、界面布局、界面单位、组件作用域、组件通信等高度统一
在用 CML 写页面时,chameleon 提供了丰富的组件供开发者使用,内置的有
button
switch radio checkbox
等组件,扩展的有c-picker c-dialog c-loading
等等,覆盖了开发工作中常用的组件。3. API
为了方便开发者的高效开发,chameleon 提供了丰富的 API 库,发布为 npm 包chameleon-api,里面包括了网络请求、数据存储、地理位置、系统信息、动画等方法。
4. 自由定制
基于多态协议,可自由扩展任意 API 和组件,不强依赖框架的更新。各端原始项目中已积累大量组件,也能直接引入到跨端项目中使用,可充分隔离各端差异化实现。
5. 智能规范校验
代码规范校验,当出现不符合规范要求的代码时,编辑器会展示智能提示,不用挨个调试各端代码,同时命令行启动窗口也会提示代码的错误位置
6. 渐进式跨端
不仅可以用 cml 开发页面,也可以将多端重用组件用 cml 开发,直接在原有项目里面调用。
京东跨端框架 - Taro
NPM 包管理系统
ES6+ 语法
自由的资源引用
CSS 预处理器和后处理器(SCSS、Less、PostCSS)
import Taro, { Component } from '@tarojs/taro'
import { View, Button } from '@tarojs/components'
export default class Homeextends Component{
constructor (props) {
super(props)
this.state = {
title: '首页',
list: [1, 2, 3]
}
}
componentWillMount () {}
componentDidMount () {}
componentWillUpdate (nextProps, nextState) {}
componentDidUpdate (prevProps, prevState) {}
shouldComponentUpdate (nextProps, nextState) {
return true
}
add = (e) => {
// dosth
}
render () {
const { list, title } = this.state
return (
<ViewclassName='index'>
<ViewclassName='title'>{title}</View>
<ViewclassName='content'>
{list.map(item => {
return (
<ViewclassName='item'>{item}</View>
)
})}
<ButtonclassName='add'onClick={this.add}>添加</Button>
</View>
</View>
)
}
}
阿里无线前端 - Weex
<template>
<div class="wrapper">
<div class="login">
<div class="input-wrapper">
<input οnchange="onchangeUserNumber" class="input" type="text" placeholder="手机号" autofocus="true" value=""/>
<image class="input-img" src="resources/img/login_input_user_img.png"></image>
</div>
//......
</div>
<toast id="toast"></toast>
</div>
</template>
<script>
module.exports = {
data:{
userNumber:'',
userPassword:''
},
methods:{
onchangeUserNumber:function (event) {
this.userNumber = event.value;
},
onchangeUserPassword:function (event) {
this.userPassword = event.value;
},
//......
}
}
</script>
<style>
......
</style>
如果你有不错的项目 可以加我们投稿