關于前端:小程序分包的一些思考及Uiniapp-分包優化邏輯的驗證

有幻想,有干貨,微信搜尋 【大遷世界】 關注這個在凌晨還在刷碗的刷碗智。愛掏網 - it200.com

本文 GitHub https://github.com/qq449245884/xiaozhi 已收錄,有一線大廠面試殘缺考點、材料以及我的系列文章。愛掏網 - it200.com

分包

什么是分包

分包指的是把一個殘缺的小程序我的項目,依照需要劃分為不同的子包,在構建時打包成不同的分包,用戶在應用時按需進行加載。愛掏網 - it200.com

分包的益處

對小程序進行分包的益處次要有以下兩點:

  • 能夠優化小程序首次啟動的下載工夫
  • 在多團隊共同開發時能夠更好的解耦合作

uniapp 分包配置

按官網,假如反對分包的 uni-app 目錄構造如下:

┌─pages               
│  ├─index
│  │  └─index.vue    
│  └─login
│     └─login.vue    
├─pagesA   
│  ├─static
│  └─list
│     └─list.vue 
├─pagesB    
│  ├─static
│  └─detail
│     └─detail.vue  
├─static             
├─main.js       
├─App.vue          
├─manifest.json  
└─pages.json            

則須要在 pages.json 中填寫:

{
    "pages": [{
        "path": "pages/index/index",
        "style": { ...}
    }, {
        "path": "pages/login/login",
        "style": { ...}
    }],
    "subPackages": [{
        "root": "pagesA",
        "name": "分包的別名"
        "pages": [{
            "path": "list/list",
            "style": { ...}
        }]
    }, {
        "root": "pagesB",
        "pages": [{
            "path": "detail/detail",
            "style": { ...}
        }]
    }],
}

入手實際:https://github.com/qq44924588…

運行后,能夠在開發者詳情里查看分包信息:

這樣配置的目錄構造真的好?

按官網的事例,如果咱們要分兩個包,則對在 pages 同級下建設兩個目錄 pagesApagesB,這樣劃分真的好嗎?假如咱們有一個流動的業務模板,對應 的流動詳情地址是 /pages/activity/detail愛掏網 - it200.compages.json 配置如下:

    "pages": [
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "首頁"
            }
        },
        {
            "path": "pages/activity/detail",
            "style": {
                "navigationBarTitleText": "流動詳情"
            }
        }
    ],

隨著業務的倒退,該模塊的性能也越來越多。愛掏網 - it200.com哪天,咱們要對該包進行分包的時候,如果依照后面的分包形式,咱們如果在 pages 同級下建設一個子包的目錄,假如咱們這里叫 pagesA,而后把對應的流動模塊的文件都移動到該目錄下,對應的 pages.json配置如下:

"subPackages": [{
  "root": "pagesA",
  "pages": [{
    "path": "activity/detail"
   }]
}]

此時,對應的 流動詳情地址是 /pagesA/activity/detail,這樣就會引發一個問題,此時流動詳情門路曾經變動了,所以分包要能失常工作,之前的門路都要改過來,如果有其它小程序有跳到該詳情頁面也得改,顯然這種分包構造是很不靠譜的,為了一個分包得改多個文件,甚至多個小程序。愛掏網 - it200.com

那要怎么解決這個問題了?顯然,只有門路不變動,但能正確分包不就能夠解決這個問題了。愛掏網 - it200.com

在細想一下分包,無非就是在 subPackages 中指定一個分包名,分包頁面對應該分包名下的文件。愛掏網 - it200.com所以,咱們能夠指定原有 pages 下的模塊作為一個子分包,這樣配置就能夠解決分包后門路不統一的問題,改寫后的構造如下:

  "subPackages": [
    {
      "root": "pages/activity",
      "pages": [
        {
          "path": "detail"
        }
      ]
    }
  ],

事例地址:https://github.com/qq44924588…

分包預加載

分包預載配置。愛掏網 - it200.com配置 preloadRule 后,在進入小程序某個頁面時,由框架主動預下載可能須要的分包,晉升進入后續分包頁面時的啟動速度。愛掏網 - it200.com

假如,咱們兩個分包 pagesApagesB ,當咱們進入詳情頁面,想事后加 pagesA ,對應的配置如下:

{
    "pages": [ //pages數組中第一項示意利用啟動頁,參考:https://uniapp.dcloud.io/collocation/pages
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "首頁"
            }
        },
        {
            "path": "pages/detail/index",
            "style": {
                "navigationBarTitleText": "詳情"
            }
        }
    ],
    "subPackages": [{
        "root": "pagesA",
        "pages": [{
            "path": "detail/index"
        }]
    }, {
        "root": "pagesB",
        "pages": [{
            "path": "detail/index"
        }]
    }],
    "preloadRule": {
        "pages/detail/index": {
            "network": "wifi",
            "packages": ["pagesA", "pagesB"]
        }
    }
}

preloadRule 中,key 是頁面門路,value 是進入此頁面的預下載配置, packages 是進入頁面后預下載分包的 。愛掏網 - it200.comnetwork 在指定網絡下預下載,可選值為:all(不限網絡)、wifi(僅wifi下預下載)。愛掏網 - it200.com

事例地址:

https://github.com/qq44924588…

分包的加載規定

分包須要留神一點是:tabBar 頁面須要放在主包中,假如咱們如兩個 tabBar,配置如下:

{
    "pages": [
        {
      "path": "pages/channel/index",
      "style": {
        "disableScroll": true
      }
    },
    {
      "path": "pages/member/index",
      "style": {
        "disableScroll": true
        }
      }
    ],
    "tabBar": {
    "color": "#BBBBBD",
    "selectedColor": "#1C1C1C",
    "borderStyle": "white",
    "backgroundColor": "#ffffff",
    "list": [
      {
        "pagePath": "pages/channel/index",
        "iconPath": "static/tabbar_icon_channel.png",
        "selectedIconPath": "static/tabbar_icon_channel_active.png",
        "text": "會員專屬"
      },
      {
        "pagePath": "pages/member/index",
        "iconPath": "static/tabbar_icon_member.png",
        "selectedIconPath": "static/tabbar_icon_member_active.png",
        "text": "掌通會員"
      }
    ]
  }
}

如果咱們把 tabBar 頁面配置到 subPackages,則會出錯:

事例地址:https://github.com/qq44924588…

分包優化

在對應平臺的配置下增加"optimization":{"subPackages":true}開啟分包優化。愛掏網 - it200.com

分包優化具體邏輯

  • 動態文件:分包下反對 static 等動態資源拷貝,即分包目錄內擱置的動態資源不會被打包到主包中,也不可在主包中應用
  • js文件:當某個 js 僅被一個分包援用時,該 js 會被打包到該分包內,否則仍打到主包(即被主包援用,或被超過 1 個分包援用)
  • 自定義組件:若某個自定義組件僅被一個分包援用時,且未放入到分包內,編譯時會輸入提示信息

首先,咱們來化驗一下第一條規定,首頁建設對應的配置:

{
    "pages": [
        {
            "path": "pages/index/index",
        }
    ],
    "subPackages": [{
        "root": "pagesA",
        "pages": [{
            "path": "detail/index"
        }]
    }],
}

這里,咱們有一個分包 pagesA 對應一個詳情頁面,詳情頁面應用一張圖片,該圖片擱置以后包下 static 文件下,內容如下:

  

而后,咱們開始打包,而后點擊開發者工具的 詳情,點擊 本地代碼-> 依賴剖析,就能夠查看打包的詳細信息,如下圖所示:

能夠看到,咱們點擊 主包 下的 static 是沒有咱們的在分包中用的 test.png 圖片,相同,它被打包本人的分包上面。愛掏網 - it200.com即分包目錄內擱置的動態資源不會被打包到主包中,成立愛掏網 - it200.com

接下來,在來驗證一下,如果在主包中應用分包的 test.png 圖片會怎么樣?改寫一上咱們主包的 index 文件的內容:

運行后,控制臺會給出謬誤:

所以,分包下反對 static 等動態資源拷貝,即分包目錄內擱置的動態資源不會被打包到主包中,也不可在主包中應用 成立。愛掏網 - it200.com

事例地址:https://github.com/qq44924588…

而后,咱們來驗證一下第二條規定:js文件:當某個 js 僅被一個分包援用時,該 js 會被打包到該分包內,否則仍打到主包(即被主包援用,或被超過 1 個分包援用)愛掏網 - it200.com

首先,咱們在主包中的 src/utils中建設一個 common.ts,內容如下:

export const add = (a: number, b:number) => {
  return a + b
}

而后,咱們在子包 pagesA 中導入應用:

同樣,打包,而后點擊開發者工具的 詳情,點擊 本地代碼-> 依賴剖析

從上圖能夠看到,咱們在 主包 中的的 vender.js 沒有找到 src/utils/common.ts 中的 add 辦法,但在分包 pagesA 找到了。愛掏網 - it200.com

那如果某個 js被多個分包所援用呢?

咱們再建設一個分包 pagesB,與同樣的形式在子包 pagesB 中導入common.ts

同樣,打包,而后點擊開發者工具的 詳情,點擊 本地代碼-> 依賴剖析

從圖能夠看到,咱們在主包中的 vendor.js 能夠找到咱們應用的 add 辦法,在分包中沒有找到對應的 vendor.js,所以當某個 js 僅被多個分包援用時,該 js 會被打包到主包愛掏網 - it200.com

事例地址:https://github.com/qq44924588…

最初,咱們來驗證一下第三條規定:自定義組件:若某個自定義組件僅被一個分包援用時,且未放入到分包內,編譯時會輸入提示信息

首先,咱們在主包中的 src/components 建設一個自定義組件 SayHello,內容如下:

而后,以同樣的形式建個分包(步驟跟下面的例子一樣),在分包的中援用咱們的組件 SayHello

而后,編譯能夠在控制臺看到提醒的信息:

那如果自定義組件被多個分包援用呢?提醒應該會隱沒,為了嚴謹性,咱們再建個分包 pagesB 以同樣姿態援用組件,而后編譯,再查看控制臺:

能夠看到,提示信息隱沒了。愛掏網 - it200.com

至此,UniApp 官網提到分包優化具體邏輯咱們都驗證過,Nice。愛掏網 - it200.com

事例地址:https://github.com/qq44924588…


代碼部署后可能存在的BUG沒法實時曉得,預先為了解決這些BUG,花了大量的工夫進行log 調試,這邊順便給大家舉薦一個好用的BUG監控工具 Fundebug。愛掏網 - it200.com

交換

有幻想,有干貨,微信搜尋 【大遷世界】 關注這個在凌晨還在刷碗的刷碗智。愛掏網 - it200.com

本文 GitHub https://github.com/qq44924588… 已收錄,有一線大廠面試殘缺考點、材料以及我的系列文章。愛掏網 - it200.com


聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 暖暖免费高清日本中文| 国产99精华液| 亚洲精品无码人妻无码| 中文乱码字字幕在线第5页 | 亚洲色成人WWW永久在线观看| 草草浮力影院第一页入口| 猫咪www免费人成网站| 成人国产永久福利看片| 国产午夜福利精品一区二区三区| 亚洲成人高清在线观看| 中文字幕在线免费看线人| 99re最新地址精品视频| 狠狠热精品免费观看| 男人一边吃奶一边做边爱| 差差漫画页面登录在线看| 四虎影院最新域名| 中文字幕亚洲色图| 精品国产一区二区三区久久影院| 精品免费一区二区三区| 新疆女人啪啪毛片| 好男人www视频| 国产性生活大片| 亚洲AV无一区二区三区久久| 亚洲www视频| 欧美亚洲国产精品久久高清| 国产精品亚洲综合一区在线观看 | xxxx性开放xxxx| 玖玖爱zh综合伊人久久| 在线观看免费宅男视频| 亚洲电影中文字幕| 娇喘午夜啪啪五分钟娇喘| 星空无限传媒xk8046| 国产亚洲精品2021自在线| 亚洲日本中文字幕天天更新| 1024香蕉视频| 日韩a在线观看免费观看| 国产乱妇无码大黄aa片| 中国一级毛片免费看视频| 青青青国产成人久久111网站| 日韩欧美一区二区三区免费观看| 国产精品久久国产精品99|