当前位置: 首页 > news >正文

【js】export default也在影响项目性能呢

这里写目录标题

  • 介绍
  • 先说结论
  • 分析
  • 解决


介绍

无意间看到一个关于exportexprot default对比的话题,

于是对二者关于性能方面,有了想法,二者的区别,仅仅是在于写法吗?

于是,有了下面的测试。


先说结论

太长不看版

在导出时,对于包含多个变量的文件,尽量使用export分开导出,

而不是使用export default一股脑儿的放对象里导出来。

good✔:

export const str = 'hello export';export const sum = (a, b) => a + b;export const count = 1;

bad❌:

const str = 'hello export default';
const sum = (a, b) => a + b;
const count = 1;export default {str,sum,count
}

但是,这并不是最终的方案,在项目中,可以通过代码分割的方式,

对引用文件进行单独打包。


分析

下面从打包的Tree Shaking方面,分析这么写的原因。

测试目录:

- src- index.js- counter.js
- webpack.config.js

先来看export下的文件内容:

// counter.js
export const str = 'hello export';
export const sum = (a, b) => a + b;
export const count = 1;
// index.js
// 只使用了其中的str变量import { str } from './counter';console.log(str);
// webpack.config.jsconst path = require('path');module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'index.js',clean: true},optimization: {usedExports: true}
}

执行命令npx webpack,查看打包结果:
在这里插入图片描述
这里给出了注释:
/* unused harmony exports count, sum */,表示对未使用到的

导出内容count sum进行了标记,在上线打包时,这些将被去除。


再来看export default的内容:

// counter.jsexport default {str: 'hello export default',sum: (a, b) => a + b,counter: 1
}
// index.jsimport counter from './counter.js';console.log(counter.str);
// webpack.config.jsconst path = require('path');module.exports = {mode: 'development',entry: './src/index.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'index.js',clean: true}
}

从打包结果来看,webpack无法识别到其中有哪些被未被使用,

所以在实际打包中,并不能触发Tree Shaking功能,无法将未使用代码去除。
在这里插入图片描述


解决

根据以上结论,在实际使用时,应该多使用export做导出。

但是,必须如此吗?

也并不是。

在实际开发中,可以通过Code Split的方式,将counter.js文件

单独打包,形成独立文件。有什么文件要使用其中的方法,

就直接去调用即可。

这里使用的是webpack5内置的SplitChunksPlugin分割插件。

文档:

https://www.webpackjs.com/guides/code-splitting/

配置:

https://www.webpackjs.com/plugins/split-chunks-plugin/
// webpack.config.jsmodule.exports = {// ...optimization: {splitChunks: 'all' }
}

http://www.lryc.cn/news/12486.html

相关文章:

  • 《软件安全》 彭国军 阅读总结
  • 深入讲解Kubernetes架构-节点与控制面之间的通信
  • 120个IT冷知识,看完就不愁做选择题了
  • Java之动态规划之机器人移动
  • seata源码-全局事务提交 服务端源码
  • C++ 模板
  • JWT安全漏洞以及常见攻击方式
  • 华为OD机试题 - 最小施肥机能效(JavaScript)
  • Python(1)变量的命名规则
  • Shiro1.9学习笔记
  • 2.5|iot|嵌入式Linux系统开发与应用|第4章:Linux外壳shell脚本程序编程
  • 九龙证券|连续七周获加仓,四大行业成“香饽饽”!
  • 210天从外包踏进华为跳动那一刻,我泪目了
  • CMake 引入第三方库
  • 软考中级-面向对象
  • Linux 系统构成:bootloader、kernel、rootfs
  • SpringCloud - Eureka注册发现
  • WampServer安装教程
  • Go语言泛型基础
  • 基于android的中医养生app
  • 2023美赛C代码思路结果【全部更新完毕】注释详尽
  • 实现8086虚拟机(二)——模拟CPU和内存
  • Windows7下使用VMware11.1.1安装ubuntu-16.04.7
  • 基于SSM框架的CMS内容管理系统的设计与实现
  • 华为OD机试 - 运动会 | 机试题算法思路 【2023】
  • (C语言篇)扫雷的实现
  • 华为手表开发:WATCH 3 Pro(8)获取位置服务
  • AnLogicFPGA设计的时序约束及时序收敛
  • ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)
  • 基于微信小程序的生活日用品交易平台 的设计与实现