小程序分包

1.簡介

  • 我們在開發(fā)小程序的時候划咐,經(jīng)呈焓罚回遇到一個情況就是箱熬,當小程序比較完整类垦、功能比較完全的時候狈邑,會造成小程序包大小太大不能上傳(小程序包大小限制在2M以內)。
  • 當我們使用一些第三方組件或者大量images的時候蚤认,包的大小米苹,很容易就會超過的,這個時候我們就可以使用分包的技術來實現(xiàn)包大小的限制
  • 分包:
    • 小程序將包分為砰琢,主包蘸嘶、分包獨立分包三種
      • 主包:在app.json-->pages里面包含的page就是主包陪汽,以及包含app.js亏较、app.wxss等公共文件
      • 分包:在app.json-->subpackages里面包含的page就是分包
      • 獨立分包:在app.json-->subpackages里面包含的page就是分包,屬性independenttrue的分包
    • 分包也遵循小程序包的限制的掩缓,每個分包也是不能超過2M的,但是整個小程序是不可以超過16M的遵岩,是不是也有點淡淡的憂傷你辣,但是比較與2M會好很多
  • 使用分包以后,我們就可以將不同的模塊使用一個分包尘执,將公共的一些配置方式以及請求什么的寫入主包舍哄,從而來釋放主包的大小
  • 缺點:
    • 分包用戶第一次從主包跳進分包時候才開始下載,此時會有一定的延遲
      • 但也是可以使用分包預下載來避免誊锭,但是預下載也是有大小限制的2M表悬,后面會詳細介紹
    • 分包對主包依賴比較大,如果你需要打開分包丧靡,那么就會先下載主包蟆沫,再下載分包,從而顯示界面
      • 但是可以使用獨立主包解決温治,但是獨立主包實獲取不到app實例,饭庞,因為此時主包并沒有下載
  • 微信分包文檔

2.使用分包

我們可以在項目任意的路徑下面創(chuàng)建我們的分包文件夾以及對應的page

  • 當我們使用分包的時候,我們需要在app.json文件下面使用subpackages設置我們的分包信息

  • "subpackages": [
      # 每個對象表示一個分包
        {
          "name": "packagesA",# 表示此分包的名稱
          "root": "pages1/",# 分包的路徑
          "pages": [# 分包里面包含的頁面熬荆,
            "cat/index"
          ]
        },
        {
          "root": "pages2/",
          "pages": [
            "dog/index"
          ],
          "independent": true # 表示此包是否實獨立分包
        }
      ]
    

    注意:root路徑加上pages里面的頁面路徑剛好就是分包頁面的路徑不要寫錯

3.獨立分包

當我們在分包的對象里面舟山。將independent設置為true的分包,將是個主包

分包 獨立分包
不可以單獨發(fā)包卤恳,需要依賴與主包 可以單獨累盗,發(fā)包,不需要依賴與主包
可以在頁面內突琳,getApp() 會獲取到app對象 不可以在頁面內若债,獲取到app對象,只有跳轉到主包后本今,主包下載完成時拆座,才能獲取到app對象
可以引入主包的wxss樣式 不可以使用主包的wxss樣式
  • 關于getApp

    • 因為獨立主包不依賴于主包主巍,所以我們通過getApp獲取不到app對象,但是我們可以通過allowDefault = true設置一個默認值挪凑,當主包下載完成后孕索,會將我們設置的數(shù)據(jù)同步到app對象里面

    • 獨立分包

      const app = getApp({allowDefault : true})
      app.token = "123"
      
    • 主包

      const app = getApp()
      console.log(app.token) // 123
      
  • 生命周期

    • 我們不可能在app.js,里面使用onLaunch躏碳、onShow方法監(jiān)聽小程序 的生命周期搞旭,但是我們可以使用wx.onAppHidewx.onAppShow來監(jiān)聽

4.分包預加載

當我們使用分包來發(fā)布應用的時候菇绵,默認情況當?shù)谝淮螐闹靼D到分包頁面時候肄渗,才會開始下載,這樣就會給用戶造成一個卡頓的現(xiàn)象咬最。

如果想解決這樣的問題翎嫡,我們可以使用預加載,當用戶加載到A界面的時候永乌,我們可以再此時預下載分包的頁面B惑申,那么等用戶跳轉到頁面B的時候會流暢很多

  • 默認情況

    graph TD;
    主包A界面 --> Button --> 下載分包頁面A --> 顯示分包頁面A
    
  • 預加載

    graph TD;
    主包界面B --> 下載分包頁面A
    主包界面B --> button按鈕點擊 --> 顯示分包頁面A
    
  • 預加載使用,我們需要在app.js下面使用preloadRule配置預加載規(guī)則翅雏,預加載規(guī)則只支持配置的原則圈驼,不支持api調用配置

    "preloadRule": {
      # 當加載到pages/index/index頁面的時候,在網(wǎng)絡實wifi時會預加載packagesA包
        "pages/index/index": {
              "network": "wifi", # 網(wǎng)絡環(huán)境時wifi時才會加載包packagesA
          "packages": ["packagesA"] # packages 預下載那個包望几,那個界面
        },
        "pages2/dog/index": {
          "packages": ["__APP__"] # __APP__ 表示主包
        }
      },
    

    注意:以上所有獨立分包通過getApp獲取app對象獲取不到的前提為:沒有加載過主包的情況下

  • Demo app.json配置

{
  "pages": [
    "pages/index/index"
  ],
  "subpackages": [
    {
      "name": "packagesA",
      "root": "pages1/",
      "pages": [
        "cat/index"
      ]
    },
    {
      "root": "pages2/",
      "pages": [
        "dog/index"
      ],
      "independent": true
    }
  ],
  "preloadRule": {
    "pages/index/index": {
      "packages": ["packagesA"]
    },
    "pages2/dog/index": {
      "packages": ["__APP__"]
    }
  },
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle": "black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}
  • demo目錄情況:
image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末绩脆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子橄抹,更是在濱河造成了極大的恐慌靴迫,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件害碾,死亡現(xiàn)場離奇詭異矢劲,居然都是意外死亡,警方通過查閱死者的電腦和手機慌随,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門芬沉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阁猜,你說我怎么就攤上這事丸逸。” “怎么了剃袍?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵黄刚,是天一觀的道長。 經(jīng)常有香客問我民效,道長憔维,這世上最難降的妖魔是什么涛救? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮业扒,結果婚禮上检吆,老公的妹妹穿的比我還像新娘。我一直安慰自己程储,他們只是感情好蹭沛,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著章鲤,像睡著了一般摊灭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上败徊,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天帚呼,我揣著相機與錄音,去河邊找鬼皱蹦。 笑死萝挤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的根欧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼端蛆,長吁一口氣:“原來是場噩夢啊……” “哼凤粗!你這毒婦竟也來了?” 一聲冷哼從身側響起今豆,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嫌拣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呆躲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體异逐,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年插掂,在試婚紗的時候發(fā)現(xiàn)自己被綠了灰瞻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辅甥,死狀恐怖酝润,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情璃弄,我是刑警寧澤要销,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站夏块,受9級特大地震影響疏咐,放射性物質發(fā)生泄漏纤掸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一浑塞、第九天 我趴在偏房一處隱蔽的房頂上張望借跪。 院中可真熱鬧,春花似錦缩举、人聲如沸垦梆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽托猩。三九已至,卻和暖如春辽慕,著一層夾襖步出監(jiān)牢的瞬間京腥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工溅蛉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留公浪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓船侧,卻偏偏與公主長得像欠气,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子镜撩,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354