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

2020-08-10 10:59 更新

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

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

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

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

其次運行時,快應(yīng)用將優(yōu)先加載基礎(chǔ)包和頁面所在分包,其余分包會自動在后臺進行預(yù)加載。

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

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

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

為達到最佳的分包效果,可以參考以下建議進行分包配置:

  • 首頁建議保留在基礎(chǔ)包中
  • 業(yè)務(wù)邏輯上密切相關(guān)的頁面配置在同一個分包中
  • 基礎(chǔ)包放置公共資源,單個分包獨有的資源放置到分包中,以減小基礎(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 字段中聲明項目分包結(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 配置的資源路徑進行打包, subpackages 配置路徑以外的目錄將被打包到基礎(chǔ)包中
  • 基礎(chǔ)包也能包含自己的 pages ,打包時會依據(jù)路徑的規(guī)則將 pages 內(nèi)的頁面劃分到對應(yīng)的分包中,subpackages 配置路徑以外的頁面將保留在基礎(chǔ)包中
  • 分包的根目錄不能是另外一個分包的子目錄

引用原則

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

低版本兼容

兼容性考慮包括兩方面:編譯時兼容與運行時兼容

編譯時兼容

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

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

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

運行時兼容

如果快用平臺不支持分包,線上運行時只會下載 rpk 文件,保持原有的運作方式。

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號