Weex 簡介

最近項目在改造,嘗試使用Weex代替原有的H5 和原生頁面,提高系統運行效率。期間遇到了很多坑,後面會仔細講講,先來看下Weex的基本信息。

一、什麼是weex

"Weex是一個可以使用現代化的 Web 技術開發高性能原生應用的框架",這是Weex官網對其的一句很簡介明瞭的定義。Weex是一個可以利用web 前端開發技術來實現Android/ios 原生引用的框架,使用 Vue 作爲上層框架,並遵循 W3C 標準實現了統一的 JSEngine 和 DOM API。

二、整體架構

本地開發的web 頁面,構建形成 Weex 的一個 JS bundle(native);在雲端,開發者可以把生成的 JS bundle 部署上去,然後通過網絡請求或預下發的方式傳遞到用戶的移動應用客戶端;在移動應用客戶端裏,WeexSDK 會準備好一個 JavaScript 引擎,並且在用戶打開一個 Weex 頁面時執行相應的 JS bundle,並在執行過程中產生各種命令發送到 native 端進行的界面渲染或數據存儲、網絡通信、調用設備功能、用戶交互響應等移動應用的場景實踐。

1、Weex 的 iOS 和 Android 客戶端中都會運行一個 JavaScript 引擎,來執行 JS bundle。

2、Weex向各端的渲染層發送規範化的指令,調度客戶端的native渲染和其它各種能力。

3、我們在 iOS 下選擇了 JavaScriptCore 內核,而在 Android 下選擇了 UC 提供的 v8 內核。

原理:
1、將XML+CSS+JavaScript代碼轉換爲JSBundle
2、JSBundle傳給JS Framework解析爲Json格式的Virtual DOM
3、客戶端通過接收Virtual DOM渲染界面

 

 

三、技術特點

1、一次實現,多端適用

    使用Weex框架+ web開發語言和開發經驗開發應用,可構建 Android、iOS 和 Web 應用三端統一的應用。

2、支持的前端框架

    Weex並不強依賴在特定的框架上使用,但官方推薦使用的是vue.jsRax 前端框架,這倆種框架也是Weex 目前功能最全、最穩定的方案。在 WeexSDK v0.10.0 (發佈於 2016 年 2 月 17 日)以及後續的版本中,集成了 v2 版本的 Vue.js。

 

Vue 和 Rax

  •  Vue.js 是一個不斷進化中的前端框架。
  • Rax 是提供類 React 語法和兼容性的前端框架。

3、調試工具

  •  官方推薦使用Playground 來調試,預覽weex頁面,在 Playground 裏,你可以打開各種示例。
  •  訪問 Weex online playground. 在這個網站上,你可以瀏覽、修改、新建各種基於 Vue.js 的單頁面例子,並用 WeexPlayground 應用掃碼查看實時效果。
  • 同時weex 也提供了weex debug ,需要APP集成 weex sdk。weex debug 啓動步驟如下:

       1、執行 weex debug 指令;   執行成功後會提示訪問URL、端口等。   

    2、訪問URL,會有一個debug 二維碼

    3、使用繼承了weex sdk 的APP引用掃碼,鏈接APP和網頁,就可以在調試網頁。

   4、weex debug 支持對單個文件進行調試, 通過 weex debug [folder | file]  命令進行編譯。

 

四、weex和 web的平臺差異

    雖然使用weex框架可以實現web , android 、ios 三端統一,但是它與純web 開發有幾點很明顯的區別。

1、weex環境中沒有 DOM    

     weex的運行環境以原生應用爲主,在 Android 和 iOS 環境中渲染出來的是原生的組件,不是 DOM Element。

  • 不支持 DOM 操作

    原生環境中不支持 Web API,沒有 Element 、Event 、File 等對象。不支持選中元素,如 document.getElementById 、 document.querySelector 等;當然也不支持基於 DOM API 的程序庫(如 jQuery)。

  • 有限的事件類型

    Weex支持在標籤上綁定事件,和在瀏覽器中的寫法一樣,但是Weex 中的事件是由原生組件捕獲並觸發的,行爲和瀏覽器中有所不同,事件中的屬性也和 Web 中有差異。支持 Web 中的事件類型,詳情請參考《通用事件》。同時,不區分事件的捕獲階段和冒泡階段,相當於 DOM 0 級事件。

 2、Weex環境中沒有BOM

     BOM(Browser Object Model),即瀏覽器對象模型,是瀏覽器環境爲 javascript 提供的接口。Weex 在原生端並不基於瀏覽器運行,不支持瀏覽器提供的 BOM 接口。

  • 沒有 window 、screen 對象

     因爲沒有BOM ,所以不支持供瀏覽器中的window, screen對象,獲取設備的屏幕或環境信息,可以使用 WXEnvironment 變量。

WXEnvironment 備註
weexVersion WeexSDK 的版本
appName 應用的名稱
appVersion 應用的版本
platform 運行平臺,可能的值是 Web 、Android 、iOS 之一
osName 系統的名稱
osVersion 系統版本
deviceWidth 設備寬度
deviceHeight 設備高度
  // 獲取屏幕高度
  this.scrollHeight = (750 / weex.config.env.deviceWidth * weex.config.env.deviceHeight-140) ; 
  • 沒有doucment 對象

    在瀏覽器中 document 表示了當前活動的文檔模型,在 Android 和 iOS 環境中並沒有這個對象,也不支持與其相關的 DOM 操作

  • 沒有location,history,navigator 對象

    Weex 也提供了 navigator 模塊來操作頁面的跳轉,使用方法參考《navigator 導航控制

3、能夠調用移動設備原生 API

    Weex 提供了clipboard navigator storage等模塊來調用移動設備原生 API。同時,提供了橫向擴展的能力,可以擴展原生模塊,具體的擴展方法請參考《iOS 擴展》 和《Android 擴展

 

參考資料

weex 官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章