“Write once,Run Everywhere” 一次编写,多端运行。
React
迁移到MIT
协议,惋惜React Native
依然没改,没有RN
的日子,还好有Weex
这位哥们顶着。虽然没有RN那么牛逼,但也算是一个不错的小兄弟。前端
不少人可能要问我搞了这么久的RN如今转Weex干什么?提及来,真是一个悲伤的故事react
RN
Facebook
并无像React
那样把ReactNative
也迁移到MIT
协议,因此使用ReactNative
开发对外产品,依然有专利风险。通常的公司其实没什么影响,但我厂状况比较特殊,有好几个核心的专利技术,老板不想冒这个险。加之隔壁的阿里Weex
推得很火,那就用用看吧!git
React
专利许可证具体细节欢迎出门左转看我以前的文章:《React专利许可证研究》npm
Weex
较RN
的优点说老实话,和ReactNative
打交道这么久,忽然换一个小兄弟上,一时还真的难以适应,甚至一脸嫌弃。Weex
和ReactNative
的设计理念也彻底不一样。RN
重点在Native
,以React
的方式开发跨平台App
,它注重Native
细腻的用户体验和强大的原生功能,运用 ReactNative
甚至不须要Native
工程师就能独立开发一款功能完善的App
。浏览器
Web
开发体验独立开发App
对Weex
来讲比较困难,由于它的Native
能力没有RN
那般强大而全面。它更注重 Web开发体验
,顾名思义就是像开发Web
网页同样开发跨平台App
页面,注意了是以Web
为主导,因此它的设计理念提倡 轻量 + 可拓展(至于“高性能”较RN
并没什么太大的体现),官方也推荐用Weex
和Native
混合的方式开发App
,也就是把Weex
做为一个组件融入到Native App
,替换传统的 Hybrid
模式。weex
Weex
已经加入ASF
,没有ReactNative
的专利协议限制,能够放心大胆地使用。固然有童鞋会反问 Weex
目前还在使用 FaceBook
的 Yoga
引擎,会不会有隐患?这个短时间内不须要咱们操心,首先这个问题自己边缘就很模糊,其次 像阿里这样的大厂早晚会开发一套相似的引擎来替代,时间问题。前端工程师
Weex
既保留了H5
的灵活性,也赋予了其Native
能力,经过JavaSriptCore
+JSbridge
直接和Native
进行通讯,较之 Hybrid
的WebView
+ URLScheme
方式性能好了不少。甚至能够实现传说中的 “三端融合”——也就是 Web
、iOS
、Android
端的前端部分共用一套代码,省去了独立建站和维护的麻烦。架构
固然有得必有失,三端兼容的坑也很多,Android
各机型 hack
就不提了,Web端其实就是个WebApp
,要利用浏览器的BOM
与三方的JS-SDK
来完成 DOM
和HTTP
之外的功能。不过使用Weex
内建的标签和样式能够很容易实现三端布局样式和基本行为的一致,仍是大大地减小了工做量。工具
值得一提 Weex的布局单位有且只有
px
,默认的显示宽度 (viewport
) 是750px
,组件都会以750px
做为满屏宽度,但能够经过meta.setViewport()
手动指定页面的显示宽度布局
Type | iPhone4 | iPhoneSE | iPhone8 | iPhone8P | iPhoneX |
---|---|---|---|---|---|
物理像素 | 640x960 | 640x1136 | 750x1334 | 1080x1920 | 1125x2436 |
显示像素 | 750x1125 | 750x1331 | 750x1334 | 750x1333 | 750x1624 |
像素比 | @0.85x | @0.85x | @1x | @1.44x | @1.5x |
CSS3
的支持Weex虽然也对CSS
作了必定的阉割,但比较 ReactNative
,它保留得更多,甚至支持大量的CSS3
特性,这一点值得赞叹。CSS3
做为Web开发的利器,放着不用不免惋惜。下面列举Weex 和标准Web
的样式差别:
CSS3
特性包括:FlexBox、2D转换、过渡、线性渐变、阴影(仅Web
和iOS
)、伪类、自定义字体(iconFront
图标也能用哦)Web
和Native
的一致,须要 <style scoped>
声明做用域CSS3
动画(动画请使用Weex内建animation
模块)和3D转换display: none
,用模板语法 v-if
替代,不建议用 opacity: 0
(Native
里有点透问题)RN
,为了提升解析效率,Weex样式属性不支持简写,好比 font
、border
、transfrom
不能简写本节的最后,仍是想吐槽几个Weex
的不足之处,但愿官方能尽快升级和改进:
这应该是最要命的,Weex
社区从去年开源到今天仍是这般冷清难免使人神伤,虽然我知道阿里内部推广力度很大,可是既然选择开源,就应该跳出阿里的圈子,一些成功案例、成熟解决方案、优秀架构设计等就不该该藏着掖着,否则真的很难推广起来。我不但愿遇到坑点 Google 几圈都找不到有价值的方案,GitHub上提问半天都等不到一个满意的答案(哈哈,说得有点激动啊,很感谢 mario 上次回答个人提问,但愿能尽快反应到官方文档里)
若是不提升Native能力,Weex
的 全页模式 价值其实不大。不要求面面俱到,但但愿能再添加一些经常使用的,好比:statusBar
控制、位置信息、Android
动态权限分配等
Weex
提倡Web
开发体验,因此开发和调试都以Web
为主,作静态页面还好,但我要调试Native
端的特有逻辑,就须要在Native端集成weex-devtool
。这个方案的确另辟蹊径,不过每次改完代码须要手动刷新会不会太麻烦,能不能搞个相似RN的 热替换 或 LiveReload
功能呢?
在Mac端Shell工具进入Weex
的目录,不管npm
相关命令,仍是git
操做都须要sudo
权限,好麻烦。我很懒的,Weex
在建立文件的时候能不能帮我把写权限的事也作了?
哈哈,是否是我太蠢没能领悟到技巧,不对的地方欢迎留言指正哈。不过前端工程师都是挑剔的,但愿Weex
能不断改进和完善!