- Published on
性能优化篇(三) : 动态导入
翻译至: Dynamic Import
此系列文章:
目录
假设我们有一个聊天应用,有四个关键组件: <UserInfo> 、 <ChatList> 、 <ChatInput> 和 <EmojiPicker> 。但是,在初始页面加载时仅需使用其中三个组件: <UserInfo> 、 <ChatList> 和 <ChatInput> 。 <EmojiPicker> 并不是直接可见的,如果用户不与之交互的话。
我们可以动态导入 <EmojiPicker> 组件。我们不使用静态导入,而是仅在想要显示 <EmojiPicker> 时导入它。在 React 中动态导入组件的一种简单方法是使用 React Suspense。 React.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> 。