Published on

性能优化篇(三) : 动态导入

翻译至: Dynamic Import

此系列文章:

性能优化篇(一) : 分包

性能优化篇(二) : 压缩Javascript

性能优化篇(四) : Prefetch

性能优化篇(五) : Preload

性能优化篇(六) : PRPL模式

性能优化篇(七) : Tree Shaking

目录

假设我们有一个聊天应用,有四个关键组件: <UserInfo><ChatList><ChatInput><EmojiPicker> 。但是,在初始页面加载时仅需使用其中三个组件: <UserInfo><ChatList><ChatInput><EmojiPicker> 并不是直接可见的,如果用户不与之交互的话。

我们可以动态导入 <EmojiPicker> 组件。我们不使用静态导入,而是仅在想要显示 <EmojiPicker> 时导入它。在 React 中动态导入组件的一种简单方法是使用 React SuspenseReact.Suspense 组件接收动态加载的组件,这使得 <App>根组件可以通过暂停 <EmojiPicker> 的导入来更快地渲染其内容模块。

当用户单击表情符号时, <EmojiPicker> 组件将首次进行渲染。 <EmojiPicker> 组件呈现一个 <Suspense> 组件,该组件接收延迟导入的模块:(在本例中为 <EmojiPicker>)。 Suspense 组件接受 fallback 属性,该属性可以传递一个在加载期间需要显示的组件(如加载进度svg等)。

较小的初始包大小意味着更快的初始加载性能:用户不必长时间盯着空白加载屏幕。 fallback 组件让用户知道我们的应用程序还在响应:他们只需要等待一段时间处理和执行。

Asset                             Size         Chunks            Chunk Names
emoji-picker.bundle.js           1.48 KiB      1    [emitted]    emoji-picker
main.bundle.js                   1.33 MiB      main [emitted]    main
vendors~emoji-picker.bundle.js   171 KiB       2    [emitted]    vendors~emoji-picker

之前的初始包是 1.5MiB ,我们通过延缓 <EmojiPicker> 组件的导入将其减少到 1.33 MiB

通过动态导入 <EmojiPicker> 组件,我们成功地将初始包大小从 1.5MiB 减小到 1.33 MiB。尽管用户可能仍需要等待一段时间才能完全加载 <EmojiPicker>