程式碼拆封(Code Splitting)


程式碼拆封(Code Splitting)

#Parcel 支援零設定碼拆分,開箱即用。這使您可以將你的應用程式程式碼拆分為可以按需載入的獨立包,這意味著更小的初始包大小和更快的載入時間。當使用者在應用程式中瀏覽模組並需要載入時,Parcel 會自動負責按需載入子包。
程式碼拆分是透過使用動態的import() 函數的 語法提案 來控制的,它的運作方式與普通的 import 語句或 require 函數類似,但傳回一個 Promise 。這意味著模組是異步加載的。
以下範例顯示如何使用動態導入來按需載入應用程式的子頁面。

// pages/about.js
export function render() {
  // 渲染页面
}
import('./pages/about').then(function (page) {
  // 渲染页面
  page.render();
});

由於 import() 回傳一個 Promise ,你也可以使用 async/await 語法。你可能需要設定 Babel 來傳輸語法,直到瀏覽器得到更廣泛的支援。

const page = await import('./pages/about');
// 渲染页面
page.default();

動態導入也會在Parcel 中延遲加載,所以你仍然可以將所有的import() 呼叫放在檔案的頂部,並且在使用子包之前,它們將不會被加載。以下範例顯示如何動態地延遲載入應用程式的子頁面。

// 设置页面名称到动态导入映射。
// 这些页面都不会被加载,直到使用前。
const pages = {
  about: import('./pages/about'),
  blog: import('./pages/blog')
};
async function renderPage(name) {
  // 延迟加载请求页面。
  const page = await pages[name];
  return page.default();
}

注意: 如果你想在本機不支援的瀏覽器中使用async/await ,請記得在你的應用程式中引入babel-polyfill 或在庫中引入babel-runtime

babel-plugin-transform-runtime 。
yarn add babel-polyfill
import "babel-polyfill";
import "./app";

請閱讀babel-polyfill 和babel-runtime 的文件。