微信小程序分包加载,以及分包预加载

本文讲解了微信小程序通过分包处理减少主包体积的方法,介绍了如何配置preloadRule自动预下载可能需要的分包,以提升用户体验。注意基础库版本低于2.3.0不支持预加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信小程序的项目随着不断地迭代,功能越来越多,代码包相应越来越大,主包体积过大,就会影响用户进入小程序时候的体验,所以要尽可能的减少主包的大小,对代码包进行分包处理,需要的时候再去加载,也可以在进入某些页面之后再去预加载分包数据

export default class extends wepy.app {
  config = {
    pages: [
      'pages/loading',
      'pages/index',
      'pages/mine',
      'pages/indexInvoice',
      'pages/indexForwarder',
      'pages/userInfo',
      'pages/integral',
      'pages/shareShip',
      'pages/shareInvoice',
      'pages/help',
      'pages/vip'
    ],
    subPackages: [
      {
        root: 'ship',
        name: 'ship',
        pages: [
          'search',
          'invoiceDetails',
          'myship',
          'intention',
          'customer',
          'customerDetails',
          'freightList',
          'bindShip'
        ]
      },
      {
        root: 'freight',
        name: 'freight',
        pages: [
          'fleet',
          'myInvoice',
          'msg',
          'newInvoice',
          'shipDetails',
          'selectInvoice',
          'fleetDetails',
          'send',
          'rechargeHistory',
          'msgConfirm',
          'bindFreight',
          'myInvoiceDetails'
        ]
      }
    ],
    preloadRule: {
      'pages/indexInvoice': {
        network: 'all',
        packages: ['ship']
      },
      'pages/indexForwarder': {
        network: 'all',
        packages: ['freight']
      }
    },
    window: {
      backgroundTextStyle: 'light',
      navigationBarBackgroundColor: '#1270e1',
      navigationBarTitleText: '标题',
      navigationBarTextStyle: '#ffffff'
    },
    networkTimeout: {
      uploadFile: 300000
    }
  };
  globalData = {
    
  };
  constructor() {
    super();
    this.use('requestfix');
    this.use('promisify');
  }
  onLaunch(options) {
    let that = this;
    wx.setStorageSync(wepy.$appConfig.baseUrl + 'scene', options.scene);
    //  await this.Load();
  }
  onShow() {
    this.update();
  }
  onHide() {

  }
  unload() {
    
  }
  


}
</script>

preloadRule里面的配置,在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度。

在进入‘pages/indexInvoice’时会预加载 分包ship;

在进入‘pages/indexForwarder’时会预加载 分包freight;

packages可以设置为进入页面后预下载分包的 root 或 name__APP__ 表示主包

network可以设置为 all: 不限网络 ,wifi: 仅wifi下预下载

需要注意的是基础库版本低于2.3.0是不支持预加载的,当你进入分包的页面时,才会去加载分包

### 微信小程序分包预加载的实现方式与优化性能 #### 一、分包预加载的概念 微信小程序通过分包机制将整个应用划分为多个独立的小型代码包,每个子包可以在需要时按需加载。为了进一步提升用户体验,可以通过 **分包预加载** 提前下载某些可能被使用的子包,从而减少用户的等待时间[^1]。 --- #### 二、分包预加载的实现方法 ##### 1. 配置 `preloadRule` 参数 在小程序项目的 `project.config.json` 文件中配置 `preloadRule` 参数,指定哪些分包需要提前加载以及触发条件。例如: ```json { "miniprogramRoot": "./", "setting": { "urlCheck": true, "es6": true, "postcss": true }, "predefineAppPages": [], "packOptions": { "ignoreCompilerWarning": false }, "condition": {}, "appid": "", "qcloud": { "envId": "" }, "subpackagesPreload": { "rule": [ { "package": "subpackageA", // 子包名称 "triggerPage": ["pages/index/index"], // 触发页面路径 "mode": "onShow" // 加载时机 (onLoad 或 onShow) } ] } } ``` 上述配置表示当用户进入 `pages/index/index` 页面时,会自动启动对 `subpackageA` 的预加载操作[^2]。 --- ##### 2. 使用场景分析 - 如果某个分包的内容可能会很快被访问到,则可以将其设置为预加载目标。 - 对于一些高频次切换的功能模块(如商品详情页),建议优先考虑加入预加载列表。 --- #### 三、优化技巧 ##### 1. 控制主包大小 尽管分包能够有效降低单个文件夹内的数据量,但如果主包过大仍然会影响整体表现效果。因此应严格遵循官方规定——即总容量不得超过20MB的同时保持核心部分小于等于2MB[^3]。 ##### 2. 合理划分逻辑单元 按照业务需求合理规划各个组件之间的关系并分配至不同目录下形成单独打包单位;这样既能满足即时响应又能兼顾长期维护便利性。 ##### 3. 动态调整策略 随着版本迭代更新频率加快,原先设定好的规则也许不再适用当前情况,所以定期审视现有架构并对相应参数做出适当修改就显得尤为重要. --- ### 总结 通过对微信小程序实施有效的分包管理措施加上适时运用预取技术手段不仅可以显著改善初次打开耗时较长这一痛点问题还能极大程度上提高后续交互流畅度给最终用户提供更加满意的体验感受[^2]. ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值