返回介绍

程式码分离

发布于 2019-05-26 15:36:14 字数 2081 浏览 983 评论 0 收藏 0

Parcel 预设支援免设定的程式码分离 (Code Splitting),可将你的程式分割为多个 bundle 并按需载入,这意味着初始化的 bundle 更小,且载入速度更快。

当使用者浏览你的网页时,Parcel 将会依照需求自动载入子 bundle。

程式码分离由动态的 import() 语法控制,它就像一般的 import 语法或 require 函式一样,差别在于其回传一个 Promise,这意味着模组可被动态地载入。

使用动态载入

下列的範例展示了如何在你的程式中动态载入子页面。

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

使用 async/await 动态载入

import() 回传 Promise,你也可以使用 async/await 语法,但在浏览器普遍支援以前,你可能需要设定 Babel 来转译语法。

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

在 Parcel 中,动态的 import 会被延迟载入 (Lazy Load),所以你还是能将所有的 import() 放在档案顶部,只有用到子 bundle 时才会载入。

下列的範例展示了如何在程式中动态地延迟子页面的载入。

// 设定页面名称与动态 import 之间的对应关係
// 只有在它们被用到时才会被载入
const pages = {
  about: import('./pages/about'),
  blog: import('./pages/blog')
}

async function renderPage(name) {
  // 延迟载入请求的页面
  const page = await pages[name]
  return page.render()
}

请注意:如你你想在尚未支援的浏览器中使用 async/await 语法,记得在你的 app 使用 babel-polyfill,或在你的函式库引入 babel-runtimebabel-plugin-transform-runtime

yarn add babel-polyfill
import 'babel-polyfill'
import './app'

请参阅 babel-polyfillbabel-runtime 的文件。

Bundle 解析

Parcel 会利用 bundle-url 模组来自动侦测 bundle 的位置,并使用堆叠追蹤(Stack Trace)来决定初始化 bundle 的载入路径。这表示你不需要亲自设定 bundle 要从何载入,但你必须将所有 bundle 放置于同一位置。

Parcel 目前可解析的协定有:httphttpsfileftpchrome-extensionmoz-extension

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文