亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【重磅】Chameleon 開放跨端擴(kuò)展標(biāo)準(zhǔn)協(xié)議

shuibo / 2729人閱讀

摘要:但是從年微信推出小程序,到至今各大廠商都推出自己的小程序,跨端開發(fā)就不僅僅是技術(shù)的問題了。實(shí)現(xiàn)了微信端的基本擴(kuò)展,用戶可以以此為模板進(jìn)行開發(fā)。

新框架太多?學(xué)不動(dòng)啦?有這一套跨端標(biāo)準(zhǔn),今后再也不用學(xué)習(xí)新框架了。

各個(gè)小程序按自己喜好“各自為政”?有了這套標(biāo)準(zhǔn),再也不用重復(fù)開發(fā)各種新平臺(tái)啦。

如今前端比較流行的 React Native、Weex、Flutter 等跨平臺(tái)開發(fā)框架,對(duì)于開發(fā)來(lái)說屬于技術(shù)方案的選擇,比如,我們會(huì)考慮用這個(gè)技術(shù)開發(fā),性能會(huì)不會(huì)超過 h5,開發(fā)效率會(huì)不會(huì)超過原生開發(fā)等等。

但是從 2017 年微信推出小程序,到至今各大廠商都推出自己的小程序,跨端開發(fā)就不僅僅是技術(shù)的問題了。已經(jīng)變成了必爭(zhēng)的流量入口?,F(xiàn)在的小程序大戰(zhàn)像極了當(dāng)前的瀏覽器大戰(zhàn)。大戰(zhàn)中受苦的是我們一線開發(fā)者,同樣的應(yīng)用要開發(fā) N 次,面對(duì)了前所未有的挑戰(zhàn),所以跨端框架的產(chǎn)生是大趨勢(shì)下的必然產(chǎn)物。

chameleon 基于對(duì)跨端工作的積累, 規(guī)范了一套跨端標(biāo)準(zhǔn),稱之為 MVVM+協(xié)議;開發(fā)者只需要按照標(biāo)準(zhǔn)擴(kuò)展流程,即可快速擴(kuò)展任意 MVVM 架構(gòu)模式的終端。并讓已有項(xiàng)目無(wú)縫運(yùn)行新端。所以如果你希望讓 chameleon 快速支持淘寶小程序、React Native?只需按標(biāo)準(zhǔn)實(shí)現(xiàn)即可擴(kuò)展。

最終讓開發(fā)者只需要用 chameleon 開發(fā),就可以在任意端運(yùn)行,再也不用學(xué)習(xí)新平臺(tái)框架啦。

新端接入情況

滴滴、芒果 TV、阿里的同學(xué)合作,正在按照跨端協(xié)議流程進(jìn)行字節(jié)跳動(dòng)小程序的共建開發(fā)。

分工排期如下:https://github.com/didi/chame...

倉(cāng)庫(kù)地址: https://github.com/chameleon-...

快應(yīng)用官方研發(fā)團(tuán)隊(duì)也正在接入中

分工排期如下:https://github.com/didi/chame...

倉(cāng)庫(kù)地址: https://github.com/quickappcn...

跨端原理

跨端框架最核心的工作是統(tǒng)一,chameleon 定義了標(biāo)準(zhǔn)的跨端協(xié)議,通過編譯時(shí)+運(yùn)行時(shí)的手段去實(shí)現(xiàn)各端的代碼和功能,其實(shí)現(xiàn)原理如下圖所示。

其中運(yùn)行時(shí)和基礎(chǔ)庫(kù)部分利用多態(tài)協(xié)議實(shí)現(xiàn)各端的獨(dú)立性與框架的統(tǒng)一性。chameleon 目前支持的端都是采用這種方式,我們定義了擴(kuò)展一個(gè)新端所需要實(shí)現(xiàn)的所有標(biāo)準(zhǔn),用戶只需要按照這些標(biāo)準(zhǔn)實(shí)現(xiàn)即可完成一個(gè)新端的擴(kuò)展。

跨端標(biāo)準(zhǔn)協(xié)議

我們?cè)賮?lái)看一張 chameleon 的設(shè)計(jì)圖,能夠?qū)崿F(xiàn)標(biāo)準(zhǔn)化的擴(kuò)展新端,得益于多態(tài)協(xié)議中對(duì)各層代碼進(jìn)行了接口的定義,各端代碼按照接口定義進(jìn)行實(shí)現(xiàn),向用戶代碼提供統(tǒng)一調(diào)用,同時(shí)還提供”多態(tài)協(xié)議“讓用戶代碼保障可維護(hù)性的前提下,直接觸達(dá)各端原生能力的方式。

API 接口協(xié)議:定義基礎(chǔ)接口能力標(biāo)準(zhǔn)。

內(nèi)置組件協(xié)議:定義基礎(chǔ) UI 組件標(biāo)準(zhǔn)。

框架協(xié)議:定義生命周期、路由等框架標(biāo)準(zhǔn)。

DSL 協(xié)議:定義視圖和邏輯層的語(yǔ)法標(biāo)準(zhǔn)。

多態(tài)實(shí)現(xiàn)協(xié)議:定義允許用戶使用差異化能力標(biāo)準(zhǔn)。

如何擴(kuò)展新端?

簡(jiǎn)單來(lái)說只需要實(shí)現(xiàn) 6 個(gè) npm 包。

實(shí)現(xiàn) API 接口協(xié)議

chameleon-api提供了網(wǎng)絡(luò)請(qǐng)求,數(shù)據(jù)存儲(chǔ),獲取系統(tǒng)信息,交互反饋等方法,用戶需要?jiǎng)?chuàng)建一個(gè) npm 包,結(jié)構(gòu)參考cml-demo-api。將chameleon-api中提供的每個(gè)方法利用多態(tài)接口擴(kuò)展語(yǔ)法擴(kuò)展新端的實(shí)現(xiàn)。
以擴(kuò)展一個(gè)alert方法為例,chameleon-apialert方法的接口定義文件為chameleon-api/src/interfaces/alert.interface,其中的接口定義內(nèi)容如下:

  

用戶實(shí)現(xiàn)的interface文件中采用語(yǔ)法引入chameleon-apialert方法的 interface 文件, 實(shí)現(xiàn)uiInterface。

// 引入官方標(biāo)準(zhǔn)interface文件

// 擴(kuò)展實(shí)現(xiàn)新端(以頭條小程序?yàn)槔僭O(shè)端擴(kuò)展標(biāo)識(shí)為:tt)
實(shí)現(xiàn)內(nèi)置組件協(xié)議

組件分為內(nèi)置組件chameleon-ui-builtin和擴(kuò)展組件cml-ui。所以用戶需要?jiǎng)?chuàng)建兩個(gè) npm 包分別實(shí)現(xiàn)這兩個(gè)組件庫(kù),結(jié)構(gòu)參考cml-demo-ui-builtin和cml-demo-ui。利用多態(tài)組件擴(kuò)展語(yǔ)法,對(duì)原有組件庫(kù)中的每一個(gè)組件進(jìn)行新端的實(shí)現(xiàn)。

原有組件庫(kù)中的組件也分為兩種,一種為各端都有分別實(shí)現(xiàn)的多態(tài)組件,例如chameleon-ui-builtin中的button組件。實(shí)現(xiàn)起來(lái)新端基本上也是要多帶帶實(shí)現(xiàn)。另一種例如chameleon-ui-builtin中的radio組件,各端的實(shí)現(xiàn)都是用的chameleon-ui-builtin/components/radio/radio.cml。所以新端基本也可以復(fù)用這個(gè)實(shí)現(xiàn),(還需要測(cè)試情況確實(shí)是否可以復(fù)用)。

新端獨(dú)立實(shí)現(xiàn)

例如:

編寫 my-ui-builtin/components/button/button.interface

// 引入官方標(biāo)準(zhǔn)interface文件

編寫 my-ui-builtin/components/button/button.demo.cml




獨(dú)立實(shí)現(xiàn)的my-ui-builtin/components/button/button.demo.cml文件屬于多態(tài)組件的灰度層,可以調(diào)用各端底層組件和 api,具體例子參見button和scroller的實(shí)現(xiàn)。

新端復(fù)用現(xiàn)有組件

編寫 my-ui-builtin/components/radio/button.interface

// 引入官方標(biāo)準(zhǔn)interface文件

// 復(fù)用官方的實(shí)現(xiàn)
實(shí)現(xiàn) DSL 協(xié)議(編譯時(shí)插件)

chameleon 內(nèi)部會(huì)將整個(gè)項(xiàng)目文件編譯為如下編譯圖結(jié)構(gòu),節(jié)點(diǎn)中的內(nèi)容經(jīng)過了標(biāo)準(zhǔn)編譯,比如script節(jié)點(diǎn)的babel處理,style節(jié)點(diǎn)的lessstylus處理等等。

節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)如下:

class CMLNode {
  constructor(options = {}) {
    this.realPath; // 文件物理地址  會(huì)帶參數(shù)
    this.moduleType; // template/style/script/json/asset
    this.dependencies = []; // 該節(jié)點(diǎn)的直接依賴       app.cml依賴pages.cml pages.cml依賴components.cml js依賴js
    this.childrens = []; // 子模塊 cml文件才有子模塊
    this.source; // 模塊源代碼
    this.output; // 模塊輸出  各種過程操作該字段
    ......
  }
}

用戶只需要實(shí)現(xiàn)一個(gè)編譯插件類,利用鉤子方法實(shí)現(xiàn)對(duì)節(jié)點(diǎn)的編譯,所有節(jié)點(diǎn)編譯完后再進(jìn)行文件的組織。編譯類如下:

module.exports = class DemoPlugin {
  constructor(options) {
    ......
  }
  /**
   * @description 注冊(cè)插件
   * @param {compiler} 編譯對(duì)象
   * */
  register(compiler) {
    // 編譯script節(jié)點(diǎn),比如做模塊化
    compiler.hook("compile-script", function(currentNode, parentNodeType) {
    })
    // 編譯template節(jié)點(diǎn) 語(yǔ)法轉(zhuǎn)義
    compiler.hook("compile-template", function(currentNode, parentNodeType) {
    })
    // 編譯style節(jié)點(diǎn)  比如尺寸單位轉(zhuǎn)義
    compiler.hook("compile-style", function(currentNode, parentNodeType) {
    })
    // 編譯結(jié)束進(jìn)入打包階段
    compiler.hook("pack", function(projectGraph) {
      // 遍歷編譯圖的節(jié)點(diǎn),進(jìn)行各項(xiàng)目的拼接
      // 調(diào)用writeFile方法寫入文件
      // compiler.writeFile()
    })
    ......
  }
}
實(shí)現(xiàn)框架協(xié)議

運(yùn)行時(shí)主要是對(duì) cml 文件的邏輯對(duì)象進(jìn)行適配,chameleon 內(nèi)部將 cml 文件的邏輯對(duì)象分為三類 App、Page、Component。對(duì)應(yīng)會(huì)調(diào)用用戶運(yùn)行時(shí) npm 包的createApp、createPage、createComponent方法,所以對(duì)外只需要實(shí)現(xiàn)這三個(gè)方法。

例如一個(gè) Page 的邏輯對(duì)象如下:

class PageIndex {
  data = {
    name: "chameleon"
  }
  computed = {
    sayName () {
      return "Hello" + this.name;
    }
  }
  mounted() {
  }
}
export default new PageIndex();

編譯時(shí)就會(huì)自動(dòng)插入用戶的運(yùn)行時(shí)方法處理邏輯對(duì)象,例如cml-demo-runtime

class PageIndex {
  ......
}
export default new PageIndex();

// 編譯時(shí)自動(dòng)插入用戶配置的運(yùn)行時(shí)方法
import {createPage} from "cml-demo-runtime";
createPage(exports.default);

createApp、createPage、createComponent方法,參考cml-demo-runtime的結(jié)構(gòu)進(jìn)行實(shí)現(xiàn),需要include chameleon-runtime中相應(yīng)的接口進(jìn)行實(shí)現(xiàn),才能夠?qū)崿F(xiàn)對(duì)chameleon-runtime的擴(kuò)展。用戶的工作量主要在于對(duì)邏輯對(duì)象的處理,可以參考chameleon-runtime中的實(shí)現(xiàn)方式,一般需要如下方面的適配工作。

從宏觀來(lái)看,運(yùn)行時(shí)處理可分為:

輸入Options對(duì)象的適配,參考

跨端運(yùn)行時(shí)能力注入,參考

從微觀來(lái)看,有以下處理:

生命周期:映射表參考 和 實(shí)現(xiàn)參考

組件 props 屬性:適配參考 和 變化監(jiān)聽參考

數(shù)據(jù)響應(yīng):數(shù)據(jù)響應(yīng)實(shí)現(xiàn)參考

computed 計(jì)算能力:實(shí)現(xiàn)參考

watch 監(jiān)聽能力:適配參考 和 實(shí)現(xiàn)參考

methods 方法屬性:適配參考

mixins 能力:適配參考 和 合并參考

生命周期多態(tài)

例如: createPage 方法的實(shí)現(xiàn)


實(shí)現(xiàn)框架數(shù)據(jù)管理

chameleon-store提供了類似 Vuex 的數(shù)據(jù)管理解決方案,具體標(biāo)準(zhǔn)參見數(shù)據(jù)管理。同樣利用多態(tài)協(xié)議實(shí)現(xiàn)其功能。

更多

擴(kuò)展新端 demo 示例倉(cāng)庫(kù): https://github.com/chameleon-...。 實(shí)現(xiàn)了微信端的基本擴(kuò)展,用戶可以以此為模板進(jìn)行開發(fā)。

更詳細(xì)的教程參見擴(kuò)展新端操作教程。

期待更多人的加入開源。想了解更多 chameleon 信息請(qǐng)?jiān)L問官網(wǎng) cmljs.org

預(yù)告:chameleon 1.0正式版即將到來(lái)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/109726.html

相關(guān)文章

  • 重磅Chameleon 開放跨端擴(kuò)展標(biāo)準(zhǔn)協(xié)議

    摘要:基于對(duì)跨端工作的積累,規(guī)范了一套跨端標(biāo)準(zhǔn),稱之為協(xié)議開發(fā)者只需要按照標(biāo)準(zhǔn)擴(kuò)展流程,即可快速擴(kuò)展任意架構(gòu)模式的終端。實(shí)現(xiàn)了微信端的基本擴(kuò)展,用戶可以以此為模板進(jìn)行開發(fā)。新框架太多?學(xué)不動(dòng)啦?有這一套跨端標(biāo)準(zhǔn),今后再也不用學(xué)習(xí)新框架了。各個(gè)小程序按自己喜好各自為政?有了這套標(biāo)準(zhǔn),再也不用重復(fù)開發(fā)各種新平臺(tái)啦。如今前端比較流行的 React Native、Weex、Flutter 等跨平臺(tái)開發(fā)框架...

    liangdas 評(píng)論0 收藏0
  • 開源中國(guó)專訪:Chameleon原理首發(fā),其它跨多端統(tǒng)一框架都是假的?

    摘要:中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心發(fā)布的中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告顯示,截至年月,我國(guó)網(wǎng)民規(guī)模達(dá)億人,微信月活億支付寶月活億百度月活億另一方面,中國(guó)手機(jī)占智能手機(jī)整體的比例超過,月活約億。在年末正式發(fā)布了面向未來(lái)的跨端的。 開源中國(guó)專訪:Chameleon原理首發(fā),其它跨多端統(tǒng)一框架都是假的? 原創(chuàng): 嘉賓-張楠 開源中國(guó) 以往我們說某一功能跨多端,往往是指在諸如 PC、移動(dòng)等不同類型的設(shè)備之...

    GraphQuery 評(píng)論0 收藏0
  • Chameleon跨端框架——壹個(gè)理想主義團(tuán)隊(duì)的開源作品

    摘要:跨端框架壹個(gè)理想主義團(tuán)隊(duì)的開源作品歷經(jīng)近個(gè)月打磨,滴滴跨端方案終于開源了真正專注于一套代碼運(yùn)行多端。這時(shí)候我們專門成立了一個(gè)人的小項(xiàng)目組,完成一個(gè)名為的項(xiàng)目,一期目標(biāo)是不影響用戶發(fā)揮,不依賴框架方的原則性實(shí)現(xiàn)一套代碼運(yùn)行和微信小程序。 Chameleon跨端框架——壹個(gè)理想主義團(tuán)隊(duì)的開源作品 歷經(jīng)近20個(gè)月打磨,滴滴跨端方案chameleon終于開源了https://github.co...

    darkbug 評(píng)論0 收藏0
  • 編寫chameleon跨端組件的正確姿勢(shì)(上篇)

    摘要:使用語(yǔ)法統(tǒng)一實(shí)現(xiàn)跨端組件請(qǐng)關(guān)注文章編寫跨端組件的正確姿勢(shì)下篇依靠強(qiáng)大的多態(tài)協(xié)議,項(xiàng)目中可以輕松使用各端的第三方組件封裝自己的跨端組件庫(kù)。這種做法同時(shí)解決了組件命名沖突問題,例如在微信小程序端引用表示調(diào)用小程序原生的組件而不是內(nèi)置的組件。 在chameleon項(xiàng)目中我們實(shí)現(xiàn)一個(gè)跨端組件一般有兩種思路:使用第三方組件封裝與基于chameleon語(yǔ)法統(tǒng)一實(shí)現(xiàn)。本篇是編寫chameleon跨端...

    h9911 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<