为了账号安全,请及时绑定邮箱和手机立即绑定

按需加载实践

标签:
Html/CSS

本文提供了按需加载了几种思路,并给出了相应实践。

为了探究按需加载的本质,选择了对先前造的轮子 diana 进行实验。

实验一:全量引用

import * as _ from 'diana'

打包体积结果如下:

webp

image

测试的是 diana 0.4.1

实验二:部分引用

import { equal } from 'diana'

打包体积结果如下:

webp

image

经过测试,发现两种方式打包后的体积都为 21 k,第二种方式仍然将整个包引入项目中了。可是 lodash 就是这么玩的呀,这和说好的不一样呀,难道是忽视了什么细节么。

下文就来揭开面纱,并动手改造项目,最终目标是用第二种写法实现按需加载,减小打包体积。

按需加载的方案

按需加载的效果是最终打包的代码里没有未引入的模块,从而优化项目体积。下面给出 3 种可以按需加载的方案。

给每个函数单独发布 npm 模块

按需加载的方案一是将每个函数都单独发布一个包,可以在 npm 上查阅 lodash,这种引用方式如下:

import { isEqual } from 'lodash.isequal'

每一个函数都作为一个单一的模块导出

按需加载的方案二是将每一个函数都作为一个单一的模块导出,参照这种思路将 diana 的每个函数暴露在 lib 目录下,部分截图如下:

webp

image

这时候再来测试下打包体积:

import equal from 'diana/lib/equal'

打包体积结果如下:

webp

image

可以看到打包体积减小约为原来的 1/7 了,但是这种方案在写法上过于冗长,那要不借助下 babel ?

方案二 + babel

方案三是在方案二的基础上借助 babel 插件后,写法可以如下:

import { equal } from 'diana'

.babelrc 里进行如下配置:

// .babelrc{  "plugins": [
    ["on-demand-loading", {"library": "diana"}]
  ]
}

此时打包体积如下:

webp

image

实际上,babel 插件 的作用是将 import { equal } from 'diana' 编译成 import equal from 'diana/lib/equal'

关于 babel 插件执行机制,可以在babel执行机制中探讨,这里先不展开了。



作者:牧云云
链接:https://www.jianshu.com/p/7bd9db073633


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消