成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

最全的weex踩坑攻略-出自大量實(shí)踐與沉淀

qc1iu / 3261人閱讀

摘要:如果你對(duì)微應(yīng)用感興趣,也在開發(fā)著微信小程序,不妨來看看為了讓你減少顧慮而準(zhǔn)備的技術(shù)對(duì)比表格,是的,開發(fā)釘釘?shù)奈?yīng)用是如此的簡(jiǎn)單。訪問這個(gè)鏈接閱讀釘釘微應(yīng)用與微信小程序技術(shù)對(duì)比表格。與內(nèi)存管理由于運(yùn)行在中,此與有較大差異。

在自己的業(yè)務(wù)環(huán)境中使用,并開放給第三方isv,企業(yè)開發(fā)者使用,這是一篇有內(nèi)涵有故事的文章。

如果你對(duì)weex微應(yīng)用感興趣,也在開發(fā)著微信小程序,不妨來看看為了讓你減少顧慮而準(zhǔn)備的技術(shù)對(duì)比表格,是的,開發(fā)釘釘?shù)膚eex微應(yīng)用是如此的簡(jiǎn)單。

訪問這個(gè)鏈接閱讀: 釘釘Weex微應(yīng)用與微信小程序技術(shù)對(duì)比表格 。

技術(shù)概述

weex是阿里開源的一套構(gòu)建高性能移動(dòng)界面的原生跨平臺(tái)技術(shù)框架,它的上層由Vue,Rax(非常類似React的開發(fā)框架)實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),底層由iOS,Android實(shí)現(xiàn)render engine來驅(qū)動(dòng)界面的最終落地。類比React Native它的優(yōu)勢(shì)在于難得的一次編寫,多端運(yùn)行,是的,它也很好的支持著移動(dòng)Web端。

構(gòu)建-build

Native使用weex-loader,Web則需要使用vue-loader,在Web端上vue-loader目前僅支持^11.3.3版本,以及weex-vue-render需要>= 0.11.50,并且vue-loader的配置做如下修改:

webpack 1.x

module: {
  loaders: [
    {
      test: /.vue(?[^?]+)?$/,
      loaders: ["vue-loader"]
    }
  ]
},
vue: {
  /**
   * important! should use postTransformNode to add $processStyle for
   * inline style normalization.
   */
  compilerModules: [
    {
      postTransformNode: el => {
        el.staticStyle = `$processStyle(${el.staticStyle})`
        el.styleBinding = `$processStyle(${el.styleBinding})`
      }
    }
  ]
}

webpack 2.x

module: {
    rules: [
      {
        test: /.vue$/,
        loader: "vue-loader",
        options: {
          compilerModules: [
            {
              postTransformNode: el => {
                el.staticStyle = `$processStyle(${el.staticStyle})`
                el.styleBinding = `$processStyle(${el.styleBinding})`
              }
            }
          ]
        }
      }
    ]
}

最佳的實(shí)踐是推薦你使用目前為止我們內(nèi)部評(píng)價(jià)最高的一份腳手架工程(支持三端一致,意味著處理了降級(jí)。):dingtalk-templates/webpack,你可以直接下載它,自行修改package.json文件中的{{}} 配置,或者安裝 open-dingtalk/weex-dingtalk-cli 這個(gè)命令行工具來玩轉(zhuǎn)腳手架,這個(gè)命令行工具就像你使用vue-cli一樣的簡(jiǎn)單:

$ npm install -g weex-dingtalk-cli
樣式-style

weex支持的樣式屬于css子集

必須寫完整,如background:#000需要寫成background-color:#000

樣式不允許提取文件,必須寫在Vue的單組件中

原則上不推薦使用預(yù)處理器,因?yàn)闊o法預(yù)期轉(zhuǎn)譯出來的樣式符合weex的css子集

布局只能使用Flexbox

如果要顯示文本必須使用text組件,并且你想改變字體大小必須寫在text組件上

只支持class,不允許繼承

單位只支持px

不支持背景圖片

基于750px進(jìn)行縮放,會(huì)有浮點(diǎn)級(jí)別的誤差

樣式需要聲明 scoped 屬性

Android上處理圓角,必須在外層div中設(shè)置border-radius

如果你想動(dòng)態(tài)的替換class,只能使用數(shù)組表達(dá)式,

如果你想使用預(yù)處理器(只是不推薦),可以如下配置:

{
    test: /.vue$/,
    loader: "vue-loader",
    options: {
        loaders: {
          scss: "vue-style-loader!css-loader!sass-loader"
        }
    }
}

如果你想使用更精準(zhǔn)的適配(無法忍受浮點(diǎn)級(jí)別的誤差),可以獲取scale,deviceWidth自行進(jìn)行適配,推薦在loader階段去處理(自行開發(fā)轉(zhuǎn)換工具)。

JavaScript與內(nèi)存管理-JavaScript and memory manage

由于JS運(yùn)行在JavaScriptCore/V8中,此與Web有較大差異。

如下:

jquery,axios 之類的原來Web開發(fā)領(lǐng)域的庫都不可以使用

不支持DOM操作

雖然提供了Native DOM可以操作界面的渲染,原則上不推薦使用,方法與DOM操作類似

既然不支持DOM操作,更改界面的方式應(yīng)該使用數(shù)據(jù)驅(qū)動(dòng)

僅支持部分事件

weex SDK >= 0.10.0 的才支持事件冒泡

沒有window,document,location,history等對(duì)象

runtime是一個(gè)“全局環(huán)境”,不允許往全局環(huán)境中掛載對(duì)象,因?yàn)闊o法釋放且所有weex頁面共享

只有scroller和list組件可以滾動(dòng)

不允許在Vue中操作style,遍歷是很耗性能的

Vue中的v-show等原來操作Dom的指令或Api都不可以使用

vue-router 只允許使用 abstract 模式

vuex必須在初始化之前使用Vue.use注入

native端只能使用網(wǎng)絡(luò)圖片,解決的方式是在最后上線時(shí)統(tǒng)一替換成CDN

熱更新以及增量更新的方式都可以參考React Native目前成熟的方案

iOS由于使用了同一套URL System,UIWebView的cookie是會(huì)共享到weex中的,同理weex中的cookie也是會(huì)共享的,只有WKWebView不會(huì)。原則上,你不應(yīng)該使用cookie來處理用戶體系的問題

weex native 與 weex web 之間的差異較大,那么怎么辦?

我們提供了一套抹平一些常見差異的庫,你也可以在weex環(huán)境中使用,https://github.com/open-dingtalk/weex-dingtalk-journey。

在說內(nèi)存(memory)之前,大家先來看一副圖,weex的內(nèi)存分布:

正常情況下,Native memory 業(yè)務(wù)開發(fā)人員是無法處理的,而運(yùn)行在js core 中的內(nèi)存,我們知道如果不斷開引用,js是無法回收釋放內(nèi)存的。

不允許往 runtime 里去掛載對(duì)象

業(yè)務(wù)代碼中的一些引用在beforeDestroy 中斷開設(shè)置為null

學(xué)會(huì)使用工具分析內(nèi)存泄漏的問題,https://webkit.org/downloads/

不要隨意的使用函數(shù)遞歸,縮短對(duì)象方法的執(zhí)行路徑(傳統(tǒng)JS領(lǐng)域的內(nèi)存管理最佳實(shí)踐也適用一部分)

由于界面的渲染需要依賴createInstance(id, code, config, data),sendTasks(id, tasks),receiveTasks(id, tasks)發(fā)送指令的方式進(jìn)行通信,你應(yīng)該減少通信的次數(shù),在更新界面時(shí),合并不必要的通信指令的發(fā)送。

如果你使用vue-router的方式,盡量減少組件之間的共享。

轉(zhuǎn)場(chǎng)方式-navigator

由于weex的特殊性,它的轉(zhuǎn)場(chǎng)方式有幾種構(gòu)成。

weex to weex,如果你需要支持釘釘js-api,那么你應(yīng)該使用openLink。(如果是你自己實(shí)現(xiàn),使用weex自帶的navigator模塊)

weex to h5 依然使用openLink,(如果是你自己實(shí)現(xiàn),那么可以通過module的方式來打開一個(gè)WebViewController| UIWebView or WKWebView)

native to weex 直接alloc weex 容器的Controller傳入U(xiǎn)rl即可

如果你使用vue-router,那么配置好你的路由path,使用pushgo方法即可,唯一可惜的是使用vue-router的方式較為生硬。

頁面級(jí)別的數(shù)據(jù)傳輸-Page level data transfer

頁面級(jí)別的數(shù)據(jù)傳輸基本很少會(huì)發(fā)生,釘釘?shù)拈_發(fā)者推薦統(tǒng)一使用domainStorage方案。

weex to weex 通過URL傳參數(shù)(攜帶的數(shù)據(jù)量有限),通過weex storage module

weex to h5h5 to weex 通過URL傳參數(shù)

native to weex 通過alloc weex 容器中的option或者data傳入,前者可以在weex.config中獲取,后者可以在vm上下文中獲取

weex to native 定義一個(gè)跳轉(zhuǎn)native的module,使用native的屬性或者init時(shí)傳入

調(diào)試工具-Debug Kit used

weex的調(diào)試工具需要額外安裝weex-toolkit,weex-devtool,以及在你的Native工程中集成對(duì)應(yīng)的WXDevtool(iOS)。

如果你運(yùn)行weex debug遇到如下的錯(cuò)誤:

Error: EACCES: permission denied, open "/Users/xxx/.xtoolkit/node_modules/weex-devtool/frontend/weex/weex-bundle.js"
    at Error (native)

(非Windows用戶)使用sudo即可。

不集成 WXDevtool SDK

首先,你需要安裝Weex Playground,可自行在各大市場(chǎng)中下載安裝。

不需要指明文件路徑,在終端輸入:

$ weex debug

先使用 Weex Playground 掃碼(啟動(dòng)成功后會(huì)彈出一個(gè)界面),然后將你的業(yè)務(wù)代碼貼到 這里,注意:

不允許出現(xiàn)import等導(dǎo)入模塊的語法

安裝了Weex Playground的設(shè)備和你的電腦必須在同一局域網(wǎng)內(nèi)

最后用安裝了Weex Playground的設(shè)備掃碼(業(yè)務(wù)代碼貼過去那里的右側(cè)會(huì)出現(xiàn)的二維碼)。

集成 WXDevtool SDK

[WXDevTool setDebug:YES];
[WXDevTool launchDevToolDebugWithUrl:@"ws://192.168.1.108:8088/debugProxy/native"];

ws:// xxx.xx..x 這個(gè)地址是在用weex debug 在終端里給你輸出出來的,如果setDebug為YES會(huì)開啟debugger模式,反之亦然。

注意setDebug設(shè)置為YES

原生開發(fā)-Native

請(qǐng)直接閱讀 技術(shù) | Weex入坑之旅 ,這是用iOS視角寫的一篇文章,大概在半年之前。

寫在最后

希望大家可以用一個(gè)開放的心態(tài)來看待weex,它的設(shè)計(jì),實(shí)現(xiàn)有很多是值得學(xué)習(xí)的地方,比如多framework支持,共享runtime,module,component,handler等等,非常的自由領(lǐng)域,相當(dāng)于它設(shè)計(jì)好了一個(gè)render engine,理論上你可以學(xué)習(xí)它的幾個(gè)關(guān)鍵接口,知道Native DOM指令后,也能開發(fā)出替代Vue的上層框架,不信?你看看Rax即明白了。

weex也有一些不足的地方,開發(fā)者數(shù)量少,社區(qū)活躍度不高,很多問題并不一定能被google搜錄到。文檔確實(shí)有一點(diǎn)不完善,native的實(shí)現(xiàn)也有一定的bug數(shù)量,你看react這么多年了,依然有bug,只要在逐步改進(jìn)迭代修復(fù),我覺得它就是非常棒的,萬事沒有十全十美,美中不足的一點(diǎn)瑕疵,說不定才是完美呢。

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

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

相關(guān)文章

  • 踩坑--- 基于釘釘Weex微應(yīng)用開發(fā)起手式(其實(shí)寫完發(fā)現(xiàn)變成Weex相關(guān)資料匯總了)

    摘要:?jiǎn)栴},你可以在中文討論板塊提交問題,地址。文字展現(xiàn)必須使用標(biāo)簽關(guān)于端的點(diǎn)透事件需要在上層視圖上加上,如果上層視圖有事件,多加一個(gè)中間層,把加在空事件視圖上關(guān)于事件注意僅支持和,暫不支持。事件會(huì)在頁面就要關(guān)閉時(shí)被觸發(fā)。 好吧,我知道你來看這個(gè)文章,一定是遇到坑了,所以,把這幾個(gè)放在最開始吧 現(xiàn)在,如果你的團(tuán)隊(duì)的技術(shù)棧是react,請(qǐng)嘗試這個(gè)吧,跟react很像,如果你的團(tuán)隊(duì)一直使用rea...

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

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

0條評(píng)論

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