返回顶部
首页 > 资讯 > 精选 >vite和webpack的区别有哪些
  • 440
分享到

vite和webpack的区别有哪些

2023-07-04 23:07:29 440人浏览 八月长安
摘要

这篇文章主要介绍“vite和webpack的区别有哪些”,在日常操作中,相信很多人在vite和WEBpack的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vite和webpack的区别有哪些”的疑

这篇文章主要介绍“vite和webpack的区别有哪些”,在日常操作中,相信很多人在vite和WEBpack的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vite和webpack的区别有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

区别:1、webpack服务器启动速度比vite慢;由于vite启动的时候不需要打包,也就无需分析模块依赖、编译,所以启动速度非常快。2、vite热更新比webpack快;vite在HRM方面,当某个模块内容改变时,让浏览器去重新请求该模块即可。3、vite用esbuild预构建依赖,而webpack基于node。4、vite的生态不及webpack,加载器、插件不够丰富。

全方位对比vite和webpack

webpack打包过程

  • 识别入口文件

  • 通过逐层识别模块依赖。(Commonjs、amd或者es6的import,webpack都会对其进行分析。来获取代码的依赖)

  • webpack做的就是分析代码。转换代码,编译代码,输出代码

  • 最终形成打包后的代码

webpack打包原理

  • 先逐级递归识别依赖,构建依赖图谱

  • 将代码转化成AST抽象语法树

  • 在AST阶段中去处理代码

  • 把AST抽象语法树变成浏览器可以识别的代码, 然后输出

重点:这里需要递归识别依赖,构建依赖图谱。图谱对象就是类似下面这种

{ './app.js':   { dependencies: { './test1.js': './test1.js' },     code:      '"use strict";\n\nvar _test = _interopRequireDefault(require("./test1.js"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nconsole.log(test1);' },  './test1.js':   { dependencies: { './test2.js': './test2.js' },     code:      '"use strict";\n\nvar _test = _interopRequireDefault(require("./test2.js"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nconsole.log(\'this is test1.js \', _test["default"]);' },  './test2.js':   { dependencies: {},     code:      '"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n  value: true\n});\nexports["default"] = void 0;\n\nfunction test2() {\n  console.log(\'this is test2 \');\n}\n\nvar _default = test2;\nexports["default"] = _default;' } }

vite和webpack的区别有哪些

vite原理

  • 当声明一个 script 标签类型为 module 时

如:

 <script type="module" src="/src/main.js"></script>

Http://localhost:3000/src/main.js请求main.js文件:// /src/main.js:import { createApp } from 'Vue'import App from './App.vue'createApp(App).mount('#app')

  • 浏览器请求到了main.js文件,检测到内部含有import引入的包,又会对其内部的 import 引用发起 HTTP 请求获取模块的内容文件

  • 如:GET http://localhost:3000/@modules/vue.js

  • 如:GET http://localhost:3000/src/App.vue

  • Vite 的主要功能就是通过劫持浏览器的这些请求,并在后端进行相应的处理将项目中使用的文件通过简单的分解与整合,然后再返回给浏览器,vite整个过程中没有对文件进行打包编译,所以其运行速度比原始的webpack开发编译速度快出许多!

webpack缺点一。缓慢的服务器启动

  • 当冷启动开发服务器时,基于打包器的方式是在提供服务前去急切地抓取和构建你的整个应用。

vite改进

  • Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类,改进了开发服务器启动时间。

  • 依赖 大多为纯 javascript 并在开发时不会变动。一些较大的依赖(例如有上百个模块的组件库)处理的代价也很高。依赖也通常会以某些方式(例如 ESM 或者 CommonJS)被拆分到大量小模块中。

  • Vite 将会使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,并且比以 JavaScript 编写的打包器预构建依赖快 10-100 倍。

  • 源码 通常包含一些并非直接是 JavaScript 的文件,需要转换(例如 JSX,CSS 或者 Vue/Svelte 组件),时常会被编辑。同时,并不是所有的源码都需要同时被加载。(例如基于路由拆分的代码模块)。

  • Vite 以 原生 ESM 方式服务源码。这实际上是让浏览器接管了打包程序的部分工作:Vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入的代码,即只在当前屏幕上实际使用时才会被处理。

webpack缺点2.使用的是node.js去实现

vite和webpack的区别有哪些

vite改进

  • Vite 将会使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,并且比以 node.js 编写的打包器预构建依赖快 10-100 倍。

webpack致命缺点3.热更新效率低下

  • 当基于打包器启动时,编辑文件后将重新构建文件本身。显然我们不应该重新构建整个包,因为这样更新速度会随着应用体积增长而直线下降。

  • 一些打包器的开发服务器将构建内容存入内存,这样它们只需要在文件更改时使模块图的一部分失活[1],但它也仍需要整个重新构建并重载页面。这样代价很高,并且重新加载页面会消除应用的当前状态,所以打包器支持了动态模块热重载(HMR):允许一个模块 “热替换” 它自己,而对页面其余部分没有影响。这大大改进了开发体验 - 然而,在实践中我们发现,即使是 HMR 更新速度也会随着应用规模的增长而显著下降。

vite改进

  • 在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身),使 HMR 更新始终快速,无论应用的大小

  • Vite 同时利用 HTTP 头来加速整个页面的重新加载(再次让浏览器为我们做更多事情):源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

vite缺点1.生态,生态,生态不如webpack

  • wepback牛逼之处在于loader和plugin非常丰富,不过我认为生态只是时间问题,现在的vite,更像是当时刚出来的M1芯片Mac,我当时非常看好M1的Mac,毫不犹豫买了,现在也没什么问题

vite缺点2.prod环境的构建,目前用的Rollup

  • 原因在于esbuild对于css和代码分割不是很友好

vite缺点3.还没有被大规模使用,很多问题或者诉求没有真正暴露出来

  • vite真正崛起那一天,是跟vue3有关系的,当vue3广泛开始使用在生产环境的时候,vite也就大概率意味着被大家慢慢开始接受了

到此,关于“vite和webpack的区别有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: vite和webpack的区别有哪些

本文链接: https://lsjlt.com/news/348426.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vite和webpack的区别有哪些
    这篇文章主要介绍“vite和webpack的区别有哪些”,在日常操作中,相信很多人在vite和webpack的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vite和webpack的区别有哪些”的疑...
    99+
    2023-07-04
  • Webpack和Vite的区别小结
    目录前言WebpackViteVite相比于Webpack打包更快相比Webpack5中使用的MFSU技术Vite插件推荐总结前言 Webpack和Vite是现代前端开发中非常重要的...
    99+
    2023-05-18
    Webpack Vite
  • react和webpack的区别有哪些
    本文小编为大家详细介绍“react和webpack的区别有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“react和webpack的区别有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起...
    99+
    2024-04-02
  • webpack的loader和plugin有什么区别
    Webpack的loader和plugin是两个不同的概念,分别用于处理不同的任务。1. Loader(加载器):Loader用于对...
    99+
    2023-10-11
    webpack
  • php=== 和==的区别有哪些
    这篇文章主要介绍“php === 和==的区别有哪些”,在日常操作中,相信很多人在php === 和==的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php === 和==的区别有哪些”的疑惑有所...
    99+
    2023-06-25
  • c#和java的区别有哪些
    Java和C#都是编程的语言,它们是两个不同方向的两种语言。相同点:他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装、继承、多态)。区别:1.c#中的命名空间是namespace类似于Java中的package(包),在J...
    99+
    2021-05-04
    java教程 c# java 区别
  • java ==和equals的区别有哪些
    总结的来说:(1)对于==,比较的是值是否相等;如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址。(2)对于equals方法,注意:equals方法不能作用于基本数据类型...
    99+
    2020-10-25
    java入门 java == equals 区别
  • MyISAM 和 InnoDB 的区别有哪些?
    区别:1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2....
    99+
    2024-04-02
  • redis和session的区别有哪些
    这篇文章主要介绍redis和session的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!           ...
    99+
    2024-04-02
  • redis和kafka的区别有哪些
    这篇文章给大家分享的是有关redis和kafka的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。 Kafka与Redis PUB/SUB之间较大的区别在于Ka...
    99+
    2024-04-02
  • ​SSDB和Redis的区别有哪些
    这篇文章主要介绍SSDB和Redis的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SSDB是一个 C++ 开发的 NoSQL 数据库, 使用 Google 公司开源的 L...
    99+
    2024-04-02
  • mongodb和hbase的区别有哪些
    mongodb和hbase的区别有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。没什么有个h...
    99+
    2024-04-02
  • hive和mysql的区别有哪些
    这篇文章给大家分享的是有关hive和mysql的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。区别:1、Mysql采用了SQL语言,Hive采用了类SQL的查询语言HQ...
    99+
    2024-04-02
  • postgresql和mysql的区别有哪些
    这篇文章主要为大家展示了“postgresql和mysql的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“postgresql和mysql的区别有哪些...
    99+
    2024-04-02
  • mysql和oracle的区别有哪些
    本篇内容主要讲解“mysql和oracle的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql和oracle的区别有哪些”吧! ...
    99+
    2024-04-02
  • sqlite和mysql的区别有哪些
    这篇文章主要为大家展示了“sqlite和mysql的区别有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sqlite和mysql的区别有哪些”这篇文章吧。 ...
    99+
    2024-04-02
  • MongoDB和MySQL的区别有哪些
    这篇文章主要讲解了“MongoDB和MySQL的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MongoDB和MySQL的区别有哪些”吧! ...
    99+
    2024-04-02
  • oracle和mysql的区别有哪些
    小编给大家分享一下oracle和mysql的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • mysqli和mysql的区别有哪些
    这篇文章主要介绍“mysqli和mysql的区别有哪些”,在日常操作中,相信很多人在mysqli和mysql的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysq...
    99+
    2024-04-02
  • hbase和mysql的区别有哪些
    本篇内容主要讲解“hbase和mysql的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hbase和mysql的区别有哪些”吧! ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作