【译】Vue实用笔记(十五):Vue组件的‘动态加载’

今天我们要介绍的是Paul Melero,一个牛掰的web开发者,一个喜欢把自己会的内容传授给其他人的盆友。

你可知道他是 Testing Vue.js Components with Jest Spanish translation的作者,所以不要小瞧了他哦。

让我们看下他给我们分享的小技巧!


我假设你已经熟读并背诵“code splitting”“lazy loading”
让我们看一下Webpack’s docs中的定义:

懒加载,后者是“按需加载”, 是一个非常好的优化网站和App的方式。这个方法的本质就是按照逻辑模块切割代码,当用户请求这个模块的时候呢再进行加载。这种方式的加载速度要高于直接在初始化的时候加载整个应用,并且比完整加载所有模块要轻量。因为有的模块,甚至从来就没有用到过。

这种特色应该被我们使用的框架天然支持才对,因为已经有人建议,甚至是在React ecosystem)中。

The meat:

任何时候我都会建议使用动态引入的方式来加载组件。这些组件都会通过webpack实现按需加载。

// 常规的import加载
import MyComponent from "~/components/MyComponent.js";

// import*函数*动态加载
const MyComponent = () => import("~/components/MyComponent.js");

释义:

当使用webpack打包我们的应用时,我们会用不同的方式去模块化(ES Modules, CJS, AMD等等),如果我们选在ES6的模块化方式(推荐用法),你会用到下面的语法:

import MyComponent from "~/components/MyComponent.js";

要知道,很多场景下我们都希望使用异步组件。正如Alex Jover在这篇文章中提到的:

  • 导入组件
  • Vue Router中,使用组件
  • Vuex的模块

让我们看一下这个语法然后聚焦到import部分。

如果你正在用的Webpack (或者 Parcel!),这个语法会在 编译时进行转换,并且这些工具会用Promise语法异步加载assets/modules/components。

你或许会疑惑为什么需要一个箭头函数,正Axle解释的我们需要把import函数包裹起来,只有当真正需要执行的时候我们才调用它。

为了展示他们是如何懒加载的,我们准备了一个使用Nuxt.js的代码库,一共两个页面,并且都加载了组件A和组件B,但是他们的区别就是使用不使用动态加载技术。

我们看到的现象是,当导航加载后,使用动态加载时webpack加载2个分割的文件。但是,使用常规的import加载的页面组件(/without),就会加载的文件比较大,因为它一次性加载了所有内容。

image

Image showing network waterfall when navigating to both pages. And the differences between both techniques (with and without dynamic imports)

Yes, by using this technique, Webpack will create separate files (“chunks”) to load them when needed (lazily). Custom chunk naming can be done with Magic comments but that will be the subject of another article 😉.

image

上图展示了nuxt的编译后的结果。我们可以看到使用动态的加载方式,就会为组件A和组件B打包成两个不同的文件。

以上就是所有内容

更多有关代码分割技术的解释请参考:

*PS: 这个例子建议使用webpack的4.29.6,Nuxt的2.4.0和Vue的2.5.22版本。

Remember you can read this tip online (with copy/pasteable code), and don’t forget to share VueDose with your colleagues, so they also know about these tips as well!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    小姜先森o0O阅读 9,479评论 0 72
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    王喂马_阅读 6,454评论 1 77
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    流觞小菜鸟阅读 1,760评论 2 8
  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,150评论 0 1
  • 写文章[https://www.jianshu.com/writer#/]注册[https://www.jians...
    过场_ab79阅读 316评论 1 1