快應(yīng)用 分包加載

2020-08-10 10:59 更新

當(dāng)快應(yīng)用體積較大時(shí),可以使用快應(yīng)用的分包加載功能。

簡單來說,就是將項(xiàng)目中的所有頁面及資源通過配置規(guī)則劃分到多個(gè)單獨(dú)的分包文件中,運(yùn)行時(shí)單獨(dú)下載,加快頁面渲染。

分包加載的能力首先依賴于編譯時(shí)工具,根據(jù)開發(fā)者在 manifest.json 中配置的 subpackages 規(guī)則,將項(xiàng)目打包成多個(gè)分包。

這些分包包含一個(gè)基礎(chǔ)包和若干個(gè)分包,基礎(chǔ)包內(nèi)容包含一些公共的資源、頁面等內(nèi)容,而分包內(nèi)容則是根據(jù)開發(fā)者的配置資源目錄進(jìn)行劃分。

其次運(yùn)行時(shí),快應(yīng)用將優(yōu)先加載基礎(chǔ)包和頁面所在分包,其余分包會(huì)自動(dòng)在后臺(tái)進(jìn)行預(yù)加載。

目前快應(yīng)用分包大小有以下限制:

  • 整個(gè)快應(yīng)用的所有分包大小不超過 4M
  • 單個(gè)分包/基礎(chǔ)包大小不能超過 1M

對(duì)快應(yīng)用進(jìn)行分包,可以優(yōu)化快應(yīng)用首次啟動(dòng)的加載時(shí)間,以及更好的管理和解耦各個(gè)模塊功能。

為達(dá)到最佳的分包效果,可以參考以下建議進(jìn)行分包配置:

  • 首頁建議保留在基礎(chǔ)包中
  • 業(yè)務(wù)邏輯上密切相關(guān)的頁面配置在同一個(gè)分包中
  • 基礎(chǔ)包放置公共資源,單個(gè)分包獨(dú)有的資源放置到分包中,以減小基礎(chǔ)包大小

配置方法

假設(shè)應(yīng)用根目錄文件組織如下:

├── manifest.json
├── app.ux
├── Hello
│   ├── hello.ux
├── PackageA
│   ├── Page1
│   │   └──page1.ux
│   ├── Page2
│   │   └──page2.ux
├── PackageB
│   ├── Page3
│   │   └──page3.ux
│   ├── Page4
│   │   └──page4.ux
└── Common
    ├── ComponentA.ux
    ├── ComponentB.ux
    └── xxx.png

開發(fā)者可以在manifest.json subpackages 字段中聲明項(xiàng)目分包結(jié)構(gòu):

{
  "package": "com.company.unit",
  "name": "appName",
  "icon": "/Common/icon.png",
  "versionName": "1.0",
  "versionCode": 1,
  "minPlatformVersion": 1000,
  "features": [{ "name": "system.network" }],
  "permissions": [{ "origin": "*" }],
  "config": {
    "logLevel": "off"
  },
  "router": {
    "entry": "Hello",
    "pages": {
      "Hello": {
        "component": "hello"
      },
      "PackageA/Page1": {
        "component": "page1"
      },
      "PackageA/Page2": {
        "component": "page2"
      },
      "PackageB/Page3": {
        "component": "page3"
      },
      "PackageB/Page4": {
        "component": "page4"
      }
    }
  },
  "subpackages": [
    {
      "name": "pkgA",
      "resource": "PackageA"
    },
    {
      "name": "pkgB",
      "resource": "PackageB"
    }
  ]
}

subpackages 的具體配置,詳見 manifest 文件

打包原則

  • 聲明 subpackages 后,將按照 subpackages 配置的資源路徑進(jìn)行打包, subpackages 配置路徑以外的目錄將被打包到基礎(chǔ)包中
  • 基礎(chǔ)包也能包含自己的 pages ,打包時(shí)會(huì)依據(jù)路徑的規(guī)則將 pages 內(nèi)的頁面劃分到對(duì)應(yīng)的分包中,subpackages 配置路徑以外的頁面將保留在基礎(chǔ)包中
  • 分包的根目錄不能是另外一個(gè)分包的子目錄

引用原則

  • 分包可以依賴基礎(chǔ)包的資源,不能依賴其他分包的資源

低版本兼容

兼容性考慮包括兩方面:編譯時(shí)兼容與運(yùn)行時(shí)兼容

編譯時(shí)兼容

如果項(xiàng)目中沒有配置 subpackages,那么打包最終僅生成rpk后綴的文件,稱為整包,擁有全部的頁面與資源(即沒有啟用分包功能)。

如果項(xiàng)目中正確配置了 subpackages,并且該版本的編譯工具支持分包功能,那么打包最終會(huì)生成rpks后綴的文件,文件內(nèi)部包含一個(gè)整包,以及所有的分包。分包文件后綴名為srpk。

為了做到開發(fā)時(shí)兼容老版本調(diào)試平臺(tái),生成 rpks 文件的同時(shí),也會(huì)生成 rpk 整包文件。

運(yùn)行時(shí)兼容

如果快用平臺(tái)不支持分包,線上運(yùn)行時(shí)只會(huì)下載 rpk 文件,保持原有的運(yùn)作方式。

如果快應(yīng)用平臺(tái)支持分包,線上運(yùn)行時(shí)會(huì)優(yōu)先下載基礎(chǔ)包與頁面所在分包,其余分包會(huì)自動(dòng)在后臺(tái)進(jìn)行預(yù)加載。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)