通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解

先从浏览器出发, 浏览器是由浏览器内核和JS引擎组成;浏览器内核编译解析html代码和css代码,js引擎编译解析JavaScript代码;所以从本质上,浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在编写项目时,用到了less,ts等扩展语言,vue等js框架,es6等低版本浏览器不能兼容的js语法,以及为了提高项目性能做的代码压缩,图片资源压缩等,把这些源代码转换成可以执行的JavaScript、CSS、HTML 代码称之为项目构建。 而vite和webpack是两种不同的项目构建打包工具。

项目构建包括以下内容:
代码转换:将 TypeScript编译成JavaScript 、将Less编译成css等。
文件优化:压缩JavaScript、 CSS、HTML 代码,压缩合并图片等。
代码分割: 提取多个页面的公共代码,提取首屏不需要执行部分代码让其异步加载。
模块合并:在采用模块化的项目里会有很多个模块和文件,需要通过构建功能将模块分类合并成一个文件。
热更新:监听本地源代码变化,自动重新构建、刷新浏览器。
代码校验:在代码被提交到仓库前需要校验代码是否符合规范,以及单元测试是否通过。
自动发布:更新代码后,自动构建出线上发布代码并传输给发布系统。

2、Vite和Webpack对比

  • 构建速度(项目启动速度)和热更新速度

    Vite 的构建速度和热更新速度更快,在大型项目中, Vite 甚至要比Webpack的构建速度快几十倍。

    原因分析:
    webpack: 分析依赖=> 编译打包=> 交给本地服务器进行渲染;
    		 随着模块的增多,打包出的bundle文件会越来越大,造成启动速度和热更新速度越来越慢;
    		 webpack用js代码编写。
    Vite   : 启动服务器=> 请求模块时按需动态编译显示。通过在一开始将应用中的模块区分为依赖和源码两类,
    		 请求某个模块时再对该模块进行实时编译,因为现代游览器本身支持ES-Module,所以会自动向依赖的Module发出请求;
    	     使用esbuild预构建依赖(esbuild也是一种js构建工具,不过是用go纯机器码语言编写),以原生的ES Modules向浏览器提供源码;
    

    构建原理图如下(vite官网抄的):
    在这里插入图片描述
    在这里插入图片描述

  • 上手度简易程度
    vite的配置相对来说更加简单,具体的配置方法请见官网:webpack中文官网 vite官网

  • 生态丰富度
    vite是尤大大在2021年时推出的新一代前端构建工具,相对于webpack来说,推出时间距今非常的短,缺少很多扩展功能,Webpack 的生态环境更加成熟,在社区中拥有广泛的支持和丰富的插件库。可以处理多种类型的文件和资源。

  • 浏览器兼容性
    Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本)。webpack 的 import() 和 require.ensure() 需要 Promise。如果你想要支持旧版本浏览器,在使用这些表达式之前,还需要 提前加载 polyfill。
    默认情况下,Vite 的目标浏览器是指能够 支持原生 ESM script 标签 和 支持原生 ESM 动态导入 的。所以vite很多低版本的浏览器并不兼容,vite也可以对这个问题进行配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403894.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker:Haoop集群

系列文章目录 docker:环境安装 docker:Web迁移 docker:Haoop集群 文章目录 系列文章目录前言一、宿主机选择二、环境准备1.前置技术2.网络环境1. docker网卡2. 分配IP 三、容器互联三、Jdk和Hadoop安装四、分发脚本五、启动Hadoop总结 前言 年前学习了docker的相关…

Aigtek电压放大器的应用场合有哪些

电压放大器是一种主要用于信号处理的重要电子设备,它可以将输入的低电压信号放大到较高的输出电压水平。在各个应用领域中,电压放大器发挥着重要的作用。下面西安安泰点击将介绍电压放大器的应用场合。 通信系统:电压放大器在通信系统中具有重…

【FPGA】高云FPGA之数字钟实验->HC595驱动数码管

高云FPGA之IP核的使用 1、设计定义2、设计输入2.1 数码管译码显示2.2 74HC595驱动2.3 主模块设计 3、分析和综合4、功能仿真6.1 hex8模块仿真6.2 HC595模块 5、布局布线6、时序仿真7、IO分配以及配置文件(bit流文件)的生成8、配置(烧录&#…

开源LLMs导览:工作原理、顶级LLM列表对比

目录 一、开源 LLM 是什么意思?二、开源LLM如何工作?2.1 预训练2.2 代币化2.3 开源LLM的微调2.4 输入编码2.5 训练与优化2.6 推理 三、开源LLM对组织的好处3.1 增强的数据安全和隐私3.2 节约成本3.3 减少供应商依赖性3.4 代码透明度 四、哪种LLM模式最好…

2024年,香港云服务器哪家好?(五大厂商推荐)

选择哪家厂商的香港云服务器最适合您取决于您的具体需求和预算。以下是一些常见的香港云服务器提供商以及它们的一些特点,这些信息可以帮助您做出更好的决定: 阿里云(Alibaba Cloud): 阿里云在全球范围内都有很好的口碑,提供多种云…

数据湖Iceberg、Hudi和Paimon比较

1.社区发展现状 项目Apache IcebergApache HudiApache Paimon开源时间2018/11/62019/1/172023/3/12LicenseApache-2.0Apache-2.0Apache-2.0Github Watch1481.2k70Github Star5.3k4.9k 1.7k Github Fork1.9k2.3k702Github issue(Open)898481263Github issue(closed)20542410488…

基于Springboot实现课程评分系统设计和实现

基于java Springboot实现课程评分系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

数据仓库【指标体系】

指标体系是将零散单点的具有相互联系的指标,系统化的组织起来,通过单点看全局,通过全局解决单点的问题。它主要是由指标和体系两部分组成。 指标是指将业务单元细化后量化的度量值,它使得业务目标可描述、可度量、可拆解&#xff…

LeetCode2.两数相加

题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会…

Project_Euler-14 题解

Project_Euler-14 题解 题目 思路 从暴力枚举出发&#xff0c;枚举100万以内的所有数字&#xff0c;对于每一个数&#xff0c;维护一个长度&#xff0c;每根据公式执行一次运算就加一。 最后取最大值。 暴力枚举代码 #include <stdio.h> #include <stdlib.h> #…

跳格子3 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 小明和朋友们一起玩跳格子游戏&#xff0c;每个格子上有特定的分数&#xff0c;score[] [1 -1 -6 7 -17 7]&#xff0c; 从起点score[0]开始&#xff0c;每次最…

petalinux_zynq7 驱动DAC以及ADC模块之四:python实现http_api

前文&#xff1a; petalinux_zynq7 C语言驱动DAC以及ADC模块之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

MongoDB学习笔记

1. 写在前面 最近工作用到了Mongodb&#xff0c;虽然有了gpt&#xff0c;对于这种数据库操作的代码基本上不用自己费多大功夫&#xff0c;但对于知识本身&#xff0c;还是想借机会系统学习下Mongodb的&#xff0c;原因是之前接触数据库一直都是mysql&#xff0c;oracle等关系型…

【鸿蒙 HarmonyOS 4.0】状态管理

一、介绍 资料来自官网&#xff1a;文档中心 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状…

Linux java查看内存消耗 linux查看java程序内存(转载)

Linux java查看内存消耗 linux查看java程序内存 目录 一、jps命令。 二、ps命令。 三、top命令。 四、free命令。 五、df命令。 查看应用的CPU、内存使用情况&#xff0c;使用jps、ps、top、free、df命令查看。 一、jps命令。 可以列出本机所有java应用程序的进程pid。…

浏览器显示「SSL 证书无效」应该如何解决?

作为保护网站传输数据安全的重要工具&#xff0c;SSL证书经常被部署于网站服务器上以实现HTTPS加密。但部分网站部署SSL证书后&#xff0c;访问时有时候会出现SSL 证书无效警示。那么SSL证书无效怎么办&#xff1f;导致SSL证书无效的情况可能是SSL证书本身的原因&#xff0c;也…

轻松掌握opencv的8种图像变换

文章目录 opencv的8种图像变换1. 图像放大、缩小2. 图像平移3. 图像旋转4. 图像仿射变换5. 图像裁剪6. 图像的位运算&#xff08;AND, OR, XOR&#xff09;7. 图像的分离和融合8. 图像的颜色空间 opencv的8种图像变换 1. 图像放大、缩小 我们先看下原图 import cv2 import ma…

【论文精读】IBOT

摘要 掩码语言建模(MLM)是一种流行的语言模型预训练范式&#xff0c;在nlp领域取得了巨大的成功。然而&#xff0c;它对视觉Transformer (ViT)的潜力尚未得到充分开发。为在视觉领域延续MLM的成功&#xff0c;故而探索掩码图像建模(MIM)&#xff0c;以训练更好的视觉transforme…

mysql 自定义函数create function

方便后续查询&#xff0c;做以下记录&#xff1b; 自定义函数是一种与存储过程十分相似的过程式数据库对象&#xff0c; 它与存储过程一样&#xff0c;都是由 SQL 语句和过程式语句组成的代码片段&#xff0c;并且可以被应用程序和其他 SQL 语句调用。 自定义函数与存储过程之间…

Day17_集合与数据结构(链表,栈和队列,Map,Collections工具类,二叉树,哈希表)

文章目录 Day17 集合与数据结构学习目标1 数据结构2 动态数组2.1 动态数组的特点2.2 自定义动态数组2.3 ArrayList与Vector的区别&#xff1f;2.4 ArrayList部分源码分析1、JDK1.6构造器2、JDK1.7构造器3、JDK1.8构造器4、添加与扩容5、删除元素6、get/set元素7、查询元素8、迭…