首页 > 其他分享 >Vite为什么这么快?

Vite为什么这么快?

时间:2024-03-13 17:36:11浏览次数:19  
标签:ES 为什么 这么 打包 module webpack Vite hello vite

1.前言

对比之前,我们先要搞懂,vite与webpack的定位以及关系才可以。

那前端社区中常谈到的这些工具webpack、rollup、parcel、esbuild、vite、vue-cli、create-react-app、umi他们之间的关系:

  • webpack、rollup、parcel、esbuild都是打包工具,代码写好之后,我们需要对代码进行压缩、合并、转换、分割、打包等操作,这些工作需要打包工具去完成。
  • vue-cli、create-react-app、umi 是基于webpack的上层封装,通过简单的配置就可以快速创建出一个项目,把更多的时间放在业务开发上。
  • vite开发环境依赖esbuild进行预构建,生产环境则依赖rollup进行打包,并且充分利用了现代浏览器的特性,比如http2、ES module,vite是站在众多巨人肩膀上的一个产物, 类似webpack + webpack-dev-server的结合体,是一个非常棒的前端项目的构建工具。

2.webpack运行原理

Webpack 通过分析js中的 require 语句,分析出当前 js 文件所有的依赖文件,通过递归的方式层层分析后,得到整个项目的依赖关系图,对图中不同的文件执行不同的 loader,比如使用 css-loader 解析css代码,最后基于这个依赖关系图读取到整个项目中的所有文件代码,进行打包处理之后交给浏览器执行。这样就会带来一个问题,项目越大,需要打包的东西越多,启动时间越长。
image

3.ES module

在讲vite运行原理之前,我们先说一下ES module
目前,绝大多数现代浏览器都已经支持ES module了, 我们只需要在《script》标签中添加type="module",就可以使用ES module了。
下面这段代码是可以直接在浏览器中运行的。

// test.js
export default function hello() {
  console.log('hello world');
}

// index.html
<script type="module">
  import hello from './test.js';

  hello(); // hello world
</scirpt>

标签:ES,为什么,这么,打包,module,webpack,Vite,hello,vite
From: https://www.cnblogs.com/never404/p/18071125

相关文章

  • 新建vite + bootstrap 5 项目
    1.新建vite项目,直接按照官方教程,新建一个vite+typescript的项目就可,它默认就是vue的; 2.项目创建好之后,开始添加bootstrap的相关模块:其实bootstrap的官网上面也有关于vite的集成:Bootstrap&Vite·Bootstrapv5.2(getbootstrap.com)在之前的步骤都已经完成的前提......
  • 震惊!css居然可以这么用!
       如果说html是盖房子,那么css就是装修房子,它可以决定外观、样式、和位置等网页元素。一、css的几种使用方式    1、行内样式    所有标签都自带有style属性,因此给标签加一个style=“样式1:样式1的值;样式2:样式2的值”,如果有多个样式,样式和样式之间......
  • 为什么defineProps宏函数不需要从vue中import导入?
    前言我们每天写vue代码时都在用defineProps,但是你有没有思考过下面这些问题。为什么defineProps不需要import导入?为什么不能在非setup顶层使用defineProps?defineProps是如何将声明的props自动暴露给模板?举几个例子我们来看几个例子,分别对应上面的几个问题。先来看一个正常的......
  • 为什么要有包装类?
    1、典型回答在Java中,所有的基本类型都会对应一个包装类,如下所示:之所以要有包装类型的主要原因有以下几个:面向对象要求:Java是一门面向对象的编程语言,要求所有的数据都应该是对象。但是,基本数据类型(如int、char、double等)并不是对象,它们没有成员方法和其他面向对象的特性......
  • etcd每个节点都存储了完整的键值对数据集,为什么扩容etcd集群仍可分散存储压力?
    etcd每个节点都存储了完整的键值对数据集,这主要是为了确保数据的一致性和高可用性。在这种设计下,任何一个节点都可以处理读取请求,并在本地提供数据,从而无需跨节点通信。这种冗余的数据存储方式也增加了系统的容错性,因为即使部分节点发生故障,其他节点仍然可以提供完整的数据集。然......
  • RocketMQ为什么这么快?我从源码中扒出了10大原因!
    大家好,我是三友~~RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快那么,问题来了,RocketMQ为什么这么快呢?接下来,我将从以下10个方面来探讨一下RocketMQ这么快的背后原因如果你对RocketMQ还不了解,可以从公众......
  • RocketMQ为什么这么快?我从源码中扒出了10个原因!
    大家好,我是三友~~RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快那么,问题来了,RocketMQ为什么这么快呢?接下来,我将从以下10个方面来探讨一下RocketMQ这么快的背后原因如果你对RocketMQ还不了解,可以从公众......
  • 创建Vue3+Vite+TypeScript项目
    一、安装node环境,安装18.0或更高版本的Node.js  推荐使用nvm管理node版本:一看就会使用nvm实现多个版本的node自由切换-始是逍遥人-博客园(cnblogs.com)二、创建项目  1、选择一个工作路径,如:E:\webproject  2、打开cmd命令窗口进入到当前目录    快捷方式:直接......
  • matlab还可以这么升级
    由于之前安装的matlab2023a是u5的版本的,今天提示有升级,上次升级的matlab挂了,这次抱着试试看看的心态升级,居然成功了。记录如下:1.不要用普通用户启动matlab,使用root启动matlab,我的matlab安装在/usr/local目录下,普通用户不具备写入该目录的权限,容易浪费感情2.cd  /usr/l......
  • Angular 我在点击了上一页或者下一页方法之后,重新加载渲染数据。为什么还需要再点击一
    在你的TypeScript代码中,当调用nextPage_TopSelling()或prevPage_TopSelling()方法时,虽然你更新了currentPage_TopSelling的值并调用了reloadTopSelling()方法,但是Angular并不会自动检测到这些变化并重新渲染页面。这是因为Angular的变化检测机制是基于异步的,在一些......