小小改动帮你减少bundle.js文件体积翻译

我已经从事过好多年的SPA开发工作,我发现很多的程序猿都从来不往 bundle.js 文件的体积上动脑筋,这让我有点懵逼。

“安心洗路,等俺把代码混淆压缩后就一切666了”,若是有人这么说,我会翻白眼。 

其实当我们压缩 bundle.js 的时候,我们可能会凭空折腾出一个庞大的应用,导致其加载时间抑或在移动端的连接时间变慢。那么问题就来了——我们是否有办法给 bundle 显著地瘦瘦身?

其实一切都很简单——使用相对文件路径即可。我们来俩个示例看看它们的区别。

示例1

首先,我们使用ES6的解构赋值(destructuring assignment)来加载一些 lodash 模块:

# src/example.js

import { concat,sortBy,map,sample } from 'lodash';

// Example: sortBy
const users = [  
  { 'user': 'fred','age': 48 },{ 'user': 'barney','age': 36 }
];
const exampleSortBy = sortBy(users,function(o) { return o.user; });  
console.log(exampleSortBy);

 Example: map
const exampleMap = map(users,'user');  
console.log(exampleMap);

 Example: concat
const array = [1];  
const exampleConcat = concat(array,2,[3],[[4]]);  
console.log(exampleConcat);

 Example: sample
const exampleSample = sample([1,3,4]);  
console.log(exampleSample);  

接着咱用 browserify 来编译和打包该应用:

browserify src/example.js -o dist/bundle.js -t [ babelify --presets [ es2015 ] ] -v -d -g uglifyify  

到目前为止感觉还不错,我们来写第二个示例,然后对比它们的文件大小~

示例2

我们来写一个完全一样的应用,不过这次我们将使用文件路径来引入所需模块,而非直接引入整个 lodash:

# src/example-2.js

import concat from 'lodash/concat';  
import sortBy from 'lodash/sortBy';  
import map from 'lodash/map';  
import sample from 'lodash/sample']);  
console.log(exampleSample);  

然后我们对其也进行编译打包:

browserify src/example-2.js -o dist/bundle-2.js -t [ babelify --presets [ es2015 ] ] -v -d -g uglifyify  

问题来了—— 这两个示例最终打包后的 bundle.js,哪一个文件更小呢?

比较

上述的俩个应用其实做了一样的事情,它们几乎写的一模一样的代码。但当我面比较这俩个打包后的文件,你会发现示例2要明显小得多

$ ls -lha dist/
bundle-2.js (84K)  
bundle.js (204K)  

原因其实在前面已经提到了——我们不再引入整个 lodash 模块,而是只引入那些我们所指定需要的模块。

这个方法也能在几乎全部的node模块中奏效。简单地把解构指派的 import 声明形式替换为本地路径的 import 声明形式,就能显而易见地减少文件体积。

资源

如果你想跑一跑本文的示例代码,可以到下面的github仓库获得资源:

https://github.com/tlackemann/minimize-bundle-js-size

 

注:原文地址 https://lacke.mn/reduce-your-bundle-js-file-size/

donate

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)