最近,有人,问我,Webpack 4配置,和,Rust语言初探,到底,该选,哪个?
说实话,这个,问题,和,之前,有人,问,Terraform vs ZooKeeper,一样,让我,有点,懵。因为,这两个,完全,不是,一个,领域的,东西。
Webpack 4,是,前端,模块,打包工具,用来,打包,JavaScript,CSS,图片,等,前端,资源。
Rust,是,系统编程语言,用来,写,高性能的,系统级,软件,比如,操作系统,浏览器引擎,游戏引擎,命令行工具,等等。
一个,是,前端,构建工具,一个,是,系统编程语言。两者,完全,不冲突,甚至,经常,一起,出现——比如,现在,很多,前端工具,都,开始,用,Rust,重写了,比如,SWC,Turbopack,等等。
但是,既然,有人,问,说明,大家,可能,对,这两个,的,定位,还,不太,清楚,或者,在,学习,路径上,有,困惑。那,我,就,详细,对比一下,这两个,包括,它们,的,定位,功能,适用场景,优缺点,以及,如何,选择。
希望,这篇,文章,能,帮,大家,搞懂,这两个,以后,不再,纠结。
一、Webpack 4是什么?
先,说说,Webpack 4,是什么。
Webpack,是,一个,现代,JavaScript,应用,的,静态,模块,打包工具。当,Webpack,处理,应用,的时候,它,会,递归地,构建,一个,依赖图,包含,应用,需要的,每个,模块,然后,把,所有,这些,模块,打包成,一个,或,多个,bundle。
简单来说,Webpack,能,把,你的,前端,项目,的,各种,文件,比如,JavaScript,TypeScript,CSS,SCSS,图片,字体,等等,都,处理,和,打包,成,浏览器,能,直接,运行的,静态资源。
Webpack 4,是,Webpack,的,第四个,大版本,在,2018年,发布。它,带来了,很多,改进,比如:
- 零配置:Webpack 4,引入了,模式(mode),的,概念,有,development,和,production,两种,模式。不需要,写,复杂的,配置,就能,用,默认,配置,打包。
- 性能提升:Webpack 4,的,打包,速度,比,之前的,版本,快了,很多。特别是,production,模式,下,优化,更好。
- 内置优化:Webpack 4,内置了,很多,优化,比如,tree shaking,scope hoisting,代码分割,等等。不需要,额外,配置,就能,享受,这些,优化。
- 更好的默认值:Webpack 4,的,默认,入口,是,
./src/index.js,默认,输出,是,./dist/main.js。不需要,配置,就能,直接,用。
一个,最简单的,Webpack 4,配置,例子:
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader'],
},
],
},
};这个,配置,定义了,入口,输出,以及,如何,处理,CSS,和,图片,文件。
二、Rust语言是什么?
再,说说,Rust语言,是什么。
Rust,是,一种,系统编程语言,由,Mozilla,研究院,开发,在,2010年,首次,发布。它,的,设计,目标,是,安全,并发,和,性能。
Rust,的,最大,特点,是,内存安全,而,不需要,垃圾回收(GC)。它,通过,所有权(ownership),借用(borrowing),和,生命周期(lifetime),的,概念,在,编译时,保证,内存安全,避免,空指针,悬垂指针,数据竞争,等,问题。
这,让,Rust,既有,C/C++,一样的,性能,又,有,比,C/C++,更高的,安全性。
Rust,的,应用,场景,很,广,包括:
- 系统编程:写,操作系统,驱动,嵌入式,软件,等等。
- WebAssembly:Rust,是,WebAssembly,的,一等公民,能,把,Rust,代码,编译成,WebAssembly,在,浏览器里,运行,高性能的,代码。
- 命令行工具:Rust,编译,出的,二进制,体积小,启动快,性能好,很,适合,写,命令行工具。比如,ripgrep,fd,exa,等等,都是,用,Rust,写的。
- 网络服务:Rust,的,异步,生态,越来越,成熟,很,适合,写,高性能的,网络服务。
- 游戏引擎:Rust,的,性能,和,安全性,很,适合,写,游戏引擎。
一个,简单的,Rust,程序,例子:
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
let sum: i32 = numbers.iter().sum();
println!("The sum is: {}", sum);
}这个,程序,计算,一个,数组,的,和,然后,打印出来。
三、两者的核心区别
介绍完了,Webpack 4,和,Rust,各自,是,什么,再,说说,两者,的,核心,区别。
1. 定位不同
Webpack 4,的,定位,是,前端,模块,打包工具。它,是,一个,工具,用来,构建,前端,项目。
Rust,的,定位,是,系统编程语言。它,是,一门,语言,用来,写,各种,软件。
一个,是,工具,一个,是,语言。
2. 领域不同
Webpack 4,属于,前端,开发,的,领域。做,前端,开发,的,人,需要,用,Webpack,来,打包,项目。
Rust,属于,系统编程,的,领域。做,系统编程,底层,开发,高性能,工具,的,人,需要,用,Rust。
3. 学习目的不同
学,Webpack 4配置,的,目的,是,为了,能,配置,和,使用,Webpack,来,打包,前端,项目。这,是,一个,工具,的,使用,技能。
学,Rust语言,的,目的,是,为了,能,用,Rust,写,程序。这,是,一门,编程语言,的,掌握。
4. 难度不同
Webpack 4配置,的,难度,相对,低一些。虽然,Webpack,的,配置,选项,很多,但是,核心,概念,不多,理解了,入口,输出,loader,plugin,这,几个,概念,基本,就,能,用了。
Rust语言,的,难度,相对,高一些。特别是,所有权,借用,生命周期,这些,概念,和,其他,语言,很,不一样,需要,花,一定的,时间,来,理解,和,掌握。
5. 两者不冲突,可以一起学
最重要的,一点,是,Webpack 4,和,Rust,完全,不冲突,甚至,可以,一起学,一起用。
比如,你,是,前端,开发者,你,需要,用,Webpack 4,来,打包,你的,前端,项目。同时,你,也,可以,学,Rust,用,Rust,写,WebAssembly,模块,来,优化,你,前端,项目,的,性能。
或者,你,对,前端工具,感兴趣,你,可以,用,Rust,写,一个,Webpack,的,loader,或者,plugin,来,扩展,Webpack,的,功能。
所以,根本,不存在,"该选哪个",的,问题。两个,都,可以,学,都,可以,用。
四、Webpack 4的优缺点
Webpack 4的优点:
- 功能强大:Webpack,能,处理,几乎,所有的,前端,资源,JavaScript,TypeScript,CSS,SCSS,Less,图片,字体,等等,都,能,处理。
- 生态丰富:Webpack,有,海量的,loader,和,plugin,几乎,你,能,想到的,功能,都,有,对应的,loader,或,plugin。
- 社区活跃:Webpack,的,社区,非常,活跃,遇到,问题,很,容易,找到,答案。
- 零配置起步:Webpack 4,的,零配置,让,初学者,能,很快,上手,不需要,写,复杂的,配置。
- 代码分割:Webpack,支持,代码分割,能,把,代码,拆成,多个,bundle,按需加载,优化,首屏,加载,速度。
- 热模块替换:Webpack,支持,热模块替换(HMR),开发的时候,修改,代码,不用,刷新,页面,就能,看到,效果,开发,体验,好。
Webpack 4的缺点:
- 配置复杂:虽然,Webpack 4,有,零配置,但是,真正,做,项目,的时候,还是,需要,写,不少,配置。配置,选项,很多,初学者,容易,晕。
- 打包速度:虽然,Webpack 4,比,之前的,版本,快了,很多,但是,对于,大项目,打包,速度,还是,有点,慢。特别是,production,模式,下,需要,做,各种,优化,打包,时间,更长。
- 文档不够友好:Webpack,的,文档,虽然,内容,全,但是,组织,得,不太,好,初学者,不容易,找到,需要的,信息。
- 版本升级痛苦:Webpack,的,大版本,升级,经常,有,breaking changes,配置,需要,改,很多,plugin,和,loader,也,可能,不兼容,升级,比较,痛苦。
五、Rust的优缺点
Rust的优点:
- 性能高:Rust,的,性能,和,C/C++,相当,没有,垃圾回收,的,开销,运行时,很小。
- 内存安全:Rust,在,编译时,保证,内存安全,避免,空指针,悬垂指针,缓冲区溢出,等,常见的,内存,问题。
- 并发安全:Rust,的,类型系统,和,所有权,机制,能,在,编译时,避免,数据竞争,写,并发,程序,更,安全。
- 现代的语言特性:Rust,有,很多,现代的,语言特性,比如,模式匹配,泛型,trait,闭包,迭代器,等等,表达力,强。
- 工具链完善:Rust,有,很好的,工具链,cargo,包管理,和,构建工具,很好用。rustup,版本管理,很方便。rustfmt,代码格式化,clippy,代码检查,都,内置了。
- 生态快速发展:Rust,的,生态,虽然,还,不如,C/C++,Java,等,老牌语言,成熟,但是,发展,很快,很多,领域,都,有,不错的,库。
- WebAssembly支持好:Rust,和,WebAssembly,的,集成,非常,好,是,WebAssembly,的,首选,语言。
Rust的缺点:
- 学习曲线陡峭:Rust,的,所有权,借用,生命周期,这些,概念,和,其他,语言,很,不一样,初学者,需要,花,很多,时间,来,理解,和,掌握。
- 编译时间长:Rust,的,编译,时间,相对,长一些,特别是,大项目,编译,可能,需要,比较,久。
- 生态还不够成熟:虽然,Rust,的,生态,发展,很快,但是,在,很多,领域,还是,不如,老牌语言,成熟。比如,GUI,机器学习,等,领域,的,库,还,不够,丰富。
- 动态语言特性少:Rust,是,静态类型,语言,没有,反射,动态类型,等,特性,某些,场景,下,开发,效率,不如,动态语言。
- 招聘难:Rust,的,使用者,相对,少,招聘,Rust,开发者,比较,难。如果,公司,要用,Rust,可能,需要,自己,培养。
六、到底该怎么选?
最后,回到,最初的,问题:Webpack 4配置,和,Rust语言初探,到底,该选,哪个?
我的,回答,是:看你的,需求,和,目标。
如果你是前端开发者,或者,正在做前端项目:
那,Webpack 4配置,是,你,必须,掌握的,技能。因为,现在,前端,项目,基本,都,用,Webpack,来,打包。你,需要,懂,Webpack,的,配置,才能,构建,和,优化,你的,前端,项目。
这,时候,Webpack 4,是,刚需,先,学,它。
如果你对系统编程,底层开发,高性能工具感兴趣:
那,Rust,是,一个,很好的,选择。它,能,让你,写出,高性能,高安全的,系统级,软件。
这,时候,Rust,是,你,想,探索的,方向,学,它。
如果你两者都需要,或者,都感兴趣:
那就,都,学。两者,完全,不冲突,甚至,可以,相辅相成。
比如,你,先,学,Webpack 4,把,前端,构建,搞定,然后,再,学,Rust,用,Rust,写,WebAssembly,优化,前端,性能,或者,写,前端工具。
学习,从来,都,不是,二选一的,事情。技多不压身,多学,一门,技能,总是,好的。
如果你是初学者,不知道该学什么:
那,建议,先,想清楚,你,的,目标,是什么。你,想,做,前端,开发?还是,想,做,系统,编程?还是,想,做,其他,什么?
根据,你的,目标,来,决定,学什么。不要,盲目,跟风,看,什么,火,就,学什么。
而且,学习,要,专注,不要,同时,学,太多,东西,结果,什么,都,学不精。先,把,一个,东西,学好,学精,再,学,其他的。
七、写在最后
以上,就是,Webpack 4配置,和,Rust语言初探,的,详细,对比。
总结,一下:
- Webpack 4,是,前端,模块,打包工具,用来,构建,前端,项目。
- Rust,是,系统编程语言,用来,写,高性能的,系统级,软件。
- 两者,完全,不是,一个,领域的,不存在,"该选哪个",的,问题。
- 根据,你的,需求,和,目标,来,决定,学什么。需要,哪个,就学,哪个,都,需要,就,都,学。
希望,这篇,文章,能,帮,大家,搞懂,这两个,以后,不再,纠结。
如果,有,什么,问题,或者,不同的,看法,欢迎,在,评论区,留言,我们,一起,交流。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录