webpack与vite

  • 一、了解 webpack
    • 入口(entry)
    • 输出(output)
    • loader
    • 插件(plugin)
    • 模式(mode)
  • 二、项目中使用webpack
    • vue项目
    • react项目
  • 三、了解vite
    • 构建选项(build)
    • 模块解析(Resolve)
    • 模块处理(Module)
    • 服务器选项(Dev Server)
    • 依赖优化选项(Optimization)
    • 插件 (Plugins)
    • 公共路径配置(Base)
  • 四、项目中使用vite
  • 五、关于webpack与vite的面试题
    • 1.webpack 执行原理?
    • 2.为什么 Vite 速度⽐ Webpack 快?
    • 3.vite构建项目 开发环境和生成环境有什么区别?
    • 4.vite 底层原理?

一、了解 webpack

本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。

入口(entry)

入口起点(entry point) 指示 webpack 应该使用哪个模块,来作为构建其内部 依赖图(dependency graph) 的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

默认值是 ./src/index.js,但你可以通过在 webpack configuration 中配置 entry 属性,来指定一个(或多个)不同的入口起点。

	module.exports = {entry: './path/to/my/entry/file.js',};

输出(output)

output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。主要输出文件的默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中。

	const path = require('path');module.exports = {entry: './path/to/my/entry/file.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'my-first-webpack.bundle.js',},};

loader

webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。

在更高层面,在 webpack 的配置中,loader 有两个属性:

test 属性,识别出哪些文件会被转换。
use 属性,定义出在进行转换时,应该使用哪个 loader。

const path = require('path');module.exports = {output: {filename: 'my-first-webpack.bundle.js',},module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},
};

插件(plugin)

loader 用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量

想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建一个插件实例。

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 用于访问内置插件module.exports = {module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};

在上面的示例中,html-webpack-plugin 为应用程序生成一个 HTML 文件,并自动将生成的所有 bundle 注入到此文件中。

模式(mode)

通过选择 development, production 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production

module.exports = {mode: 'production',
};

参考官网webpack

二、项目中使用webpack

vue项目

在vue项目中一般会新建一个vue.config.js 进行扩展配置(当然也可以手动创建 webpack.config.js 并配置)

// vue.config.js
module.exports = {// 入口文件配置(默认是 src/main.js)pages: {index: {entry: 'src/main.js', // 主入口template: 'public/index.html',filename: 'index.html'}// 多页面配置:可添加其他页面入口// subpage: { entry: 'src/subpage/main.js', ... }},// 其他常用配置outputDir: 'dist', // 打包输出目录publicPath: process.env.NODE_ENV === 'production' ? '/prod-path/' : '/', // 公共路径devServer: {port: 8080, // 开发服务器端口open: true, // 自动打开浏览器proxy: { // 接口代理(解决跨域)'/api': {target: 'http://api.example.com',changeOrigin: true,pathRewrite: { '^/api': '' }}},// 链式修改 Webpack 配置(通过 webpack-chain)chainWebpack: config => {// 添加别名config.resolve.alias.set('@', path.resolve(__dirname, 'src')).set('components', path.resolve(__dirname, 'src/components'));// 修改图片加载规则config.module.rule('images').use('url-loader').tap(options => ({limit: 10240, // 小于10kb的图片转为base64name: 'img/[name].[hash:8].[ext]'}));},// 直接修改 Webpack 配置(合并方式)configureWebpack: {plugins: [// 添加自定义插件],optimization: {// 配置代码分割等}}}
};

react项目

创建 webpack.config.js 并配置
修改 package.json

"scripts": {"start": "webpack serve --mode development","build": "webpack --mode production"
}

三、了解vite

Vite 凭借基于原生 ESM 的开发服务器实现极速启动与热更新,同时通过 Rollup 优化生产构建,兼具简洁配置与强大扩展性,为前端开发提供高效流畅的体验。

构建选项(build)

通过 build 配置项控制生产环境打包输入与输出

export default {build: {outDir: 'dist',          // 输出目录assetsDir: 'assets',     // 静态资源存放目录assetsInlineLimit: 4096, // 小于此值的资源将内联为 base64//sourcemap: false,        // 是否生成 sourcemapminify: env.VITE_APP_ENV == 'prod' ? 'terser' : 'esbuild',       //开发、测试环境使用esbuild,它比 terser 快 20-40 倍,压缩率只差 1%-2%;生产环境使用terserrollupOptions: {         // 传递给 Rollup 的输出配置output: {chunkFileNames: 'js/[name]-[hash].js', // 用于命名代码拆分时创建的共享块的输出命名entryFileNames: 'js/[name]-[hash].js',  // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值assetFileNames: "[ext]/[name].[hash].[ext]", // 用于输出静态资源的命名,[ext]表示文件扩展名}},lib: {    //打包为库文件entry: 'src/index.js',name: 'MyLibrary',formats: ['es', 'umd'],fileName: (format) => `my-lib.${format}.js`  // 输出文件的名称}}
}

模块解析(Resolve)

配置模块查找规则和路径别名

import { resolve } from "path"; // 主要用于alias文件路径别名
function pathResolve (dir) {return resolve(__dirname, ".", dir);
}
export default {resolve: {alias: {     // 路径别名"@": pathResolve("src"),"@scss": pathResolve("src/assets/scss"),"@img": pathResolve("src/assets/img"), "@com": pathResolve("src/components"),'@config': pathResolve('src/config') },extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'], // 导入时想要省略的扩展名列表}
}

模块处理(Module)

CSS 处理:内置支持 CSS、CSS Modules 及预处理器

export default {css: {modules: {               // CSS Modules 配置scopeBehaviour: 'local',localsConvention: 'camelCaseOnly'},preprocessorOptions: {   // 预处理器配置scss: {additionalData: `@import "./src/styles/vars.scss";`}},devSourcemap: true       // 开发环境 CSS sourcemap}
}

服务器选项(Dev Server)

提供快速的开发环境服务

export default {server: {port: 8080,              // 端口号open: true,              // 自动打开浏览器proxy: {                 // 接口代理配置'/api': {target: 'http://localhost:8080',changeOrigin: true,rewrite: path => path.replace(/^\/api/, '')}},hmr: true,              // 开启热更新cors: true,				// 允许跨域请求host: '0.0.0.0'         // 指定服务器应该监听哪个 IP 地址,如果设置为 0.0.0.0 或者 true 将监听所有地址,包括局域网和公网地址。 }
}

依赖优化选项(Optimization)

依赖预构建提升开发性能

export default {optimizeDeps: {include: ['lodash-es', 'axios'], // 强制预构建的依赖exclude: ['custom-package'],     // 不预构建的依赖esbuildOptions: {                // esbuild 配置target: ['es2020', 'edge88']}}
}

插件 (Plugins)

Vite 可以使用插件进行扩展,这得益于 Rollup 优秀的插件接口设计和一部分 Vite 独有的额外选项。

import vue from '@vitejs/plugin-vue'
import react from '@vitejs/plugin-react'
import AutoImport from "unplugin-auto-import/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";export default {plugins: [vue(),        // Vue 支持// react(),    // React 支持AutoImport({ // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等imports: ["vue"],extensions: ["vue", "md"],include: [/\.vue$/, /\.vue\?vue/, /\.md$/], resolvers: [ElementPlusResolver()],}),]
}

具体插件可以看这里
插件

公共路径配置(Base)

开发或生产环境服务的公共基础路径。

export default {base: process.env.NODE_ENV === 'production' ? '/app/' : '/'
}

参考vite中文网

四、项目中使用vite

import { defineConfig } from 'vite'// import vue from '@vitejs/plugin-vue'
// import react from '@vitejs/plugin-react'
function pathResolve (dir) {return resolve(__dirname, ".", dir);
}
export default defineConfig({// 根据框架类型启用// plugins: [vue()], // Vue 项目启用// plugins: [react()], // React 项目启用// 项目基础路径base: '/',server: {port: 8080,         // 开发端口open: false,         // 自动打开浏览器hot: true,          // 启用热更新host: env.VITE_APP_HOST, // 指定服务器应该监听哪个 IP 地址,如果设置为 0.0.0.0 或者 true 将监听所有地址,包括局域网和公网地址。 proxy: {            // 接口代理(解决跨域)'/api': {target: 'http://localhost:8080',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')}}},build: {outDir: 'dist',     // 输出目录assetsDir: 'assets',// 静态资源目录sourcemap: false,   // 不生成 sourcemap(生产环境) rollupOptions: {output: {// 静态资源分类输出assetFileNames: '[ext]/[name]-[hash].[ext]',chunkFileNames: 'js/[name]-[hash].js',entryFileNames: 'js/[name]-[hash].js'}}},resolve: {alias: {'@': pathResolve('src'),  'components': pathResolve('src/components'),'@scss': pathResolve('src/assets/scss')},extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue', '.json']   // 导入时想要省略的扩展名列表},css: {devSourcemap: true, // 开发环境启用 CSS sourcemapmodules: {// CSS Modules 基础配置scopeBehaviour: 'local'}}, 
})

五、关于webpack与vite的面试题

1.webpack 执行原理?

从入口模块出发,递归解析所有依赖模块并构建依赖关系图,然后将这些模块按一定规则打包成一个或多个浏览器可识别的输出文件,整个过程包括解析、编译转换、代码拆分、优化等步骤,最终生成优化后的静态资源。

参考官网Under The Hood

2.为什么 Vite 速度⽐ Webpack 快?

  1. 开发模式的差异
    在开发环境中, Webpack 是先打包再启动开发服务器,⽽ Vite 则是直接启动,然后再按需编译
    依赖⽂件。
    (可以启动项⽬后检查源码 Sources 那⾥看到)
    这意味着,当使⽤ Webpack 时,所有的模块都需要在开发前进⾏打包,这会增加启动时间和构建时
    间。
    ⽽ Vite 则采⽤了不同的策略,它会在请求模块时再进⾏实时编译,这种按需动态编译的模式极⼤地缩短了编译时间,特别是在⼤型项⽬中,⽂件数量众多, Vite 的优势更为明显。
  2. 对ES Modules的⽀持
    现代浏览器本⾝就⽀持 ES Modules ,会 主动发起 请求去获取所需⽂件。Vite充分利⽤了这⼀点,
    将开发环境下的模块⽂件直接作为浏览器要执⾏的⽂件,⽽不是像 Webpack 那样 先打包 ,再交给浏
    览器执⾏。这种⽅式减少了中间环节,提⾼了效率。
    什么是ES Modules?
    通过使⽤ export 和 import 语句,ES Modules 允许在浏览器端导⼊和导出模块。
    当使⽤ ES Modules 进⾏开发时,开发者实际上是在构建⼀个 依赖关系图 ,不同依赖项之间通过导⼊
    语句进⾏关联。
    主流浏览器(除IE外)均⽀持ES Modules,并且可以通过在 script 标签中设置 type=“module” 来
    加载模块。默认情况下,模块会延迟加载,执⾏时机在⽂档解析之后,触发DOMContentLoaded事件前。
  3. 底层语⾔的差异
    Webpack 是基于 Node.js 构建的,⽽ Vite 则是基于 esbuild 进⾏预构建依赖。esbuild 是采
    Go 语⾔编写的,Go 语⾔是 纳秒 级别的,⽽ Node.js 是 毫秒 级别的。因此,Vite 在打包速度上
    相⽐Webpack 有 10-100 倍的提升。
    什么是预构建依赖?
    预构建依赖通常指的是在项⽬ 启动或构建 之前,对项⽬中所需的依赖项进⾏预先的 处理或构建 。这
    样做的好处在于,当项⽬实际运⾏时,可以 直接使⽤ 这些已经预构建好的依赖,⽽⽆需再进⾏实时的编译或构建,从⽽提⾼了应⽤程序的运⾏速度和效率。
  4. 热更新的处理
    在 Webpack 中,当⼀个模块或其依赖的模块内容改变时,热更新是基于⽂件级别的,需要重新构建并刷新整个⻚⾯。
    在 Vite 中,当某个模块内容改变时,只需要让浏览器重新请求该模块即可,不需要刷新整个⻚⾯,这⼤⼤减少了热更新的时间。

总结
总的来说,Vite 之所以⽐ Webpack 快,主要是因为它采⽤了 不同的开发模式充分利⽤了现代浏览器的 ES Modules ⽀持使⽤了更⾼效的底层语⾔并优化了热更新的处理 。这些特点使得Vite在⼤型项⽬中具有显著的优势,能够快速启动和构建,提⾼开发效率。

3.vite构建项目 开发环境和生成环境有什么区别?

开发环境:基于浏览器原生 esbuild 模块运行,无需预打包,通过开发服务器实时响应请求并处理依赖,实现毫秒级启动和即时热更新(HMR),优先保证开发效率。
生产环境:使用 Rollup 进行预打包,会对代码进行压缩、分割、 tree-shaking 等优化,生成高度优化的静态资源,优先保证输出产物的性能和体积。
esbuild ⽤于开发服务器阶段,通过实时编译和提供模块来实现快速的冷启动和热模块替换。⽽ Rollup ⽤于⽣产构建阶段,将源代码打包为最终可发布的⽂件,以⽤于部署到⽣产环境。

  1. esbuild: esbuild 是⼀个快速、可扩展的 JavaScript 打包器,它被⽤作 Vite 的默认构建⼯具。
    esbuild 的主要任务是将源代码转换为浏览器可以理解的代码,同时还⽀持压缩、代码分割、按需
    加载等功能。esbuild 利⽤其⾼性能的构建能⼒,实现了快速的开发服务器和热模块替换。
  2. Rollup: Rollup 是⼀个 JavaScript 模块打包⼯具,也是 Vite 的另⼀个基础依赖。在 Vite 中,
    Rollup 主要⽤于⽣产构建阶段。它通过静态分析模块依赖关系,将多个模块打包为⼀个或多个最终
    的输出⽂件。Rollup ⽀持多种输出格式,如 ES 模块、CommonJS、UMD 等,可以根据项⽬的需要进⾏配置。

4.vite 底层原理?

  1. ES 模块:Vite 使⽤了 ES 模块来管理和加载模块。ES 模块是 JavaScript 的标准模块系统,相⽐于
    传统的 CommonJS 或 AMD,ES 模块具有更好的静态分析能⼒和更⾼的性能。Vite 通过使⽤浏览器原⽣的 ES 模块加载器,可以实现按需加载和快速构建。
  2. HTTP/2:Vite 借助于现代浏览器的 HTTP/2 ⽀持来实现更⾼效的资源加载。HTTP/2 ⽀持多路复⽤,可以同时请求多个资源,避免了传统的 HTTP/1 中的队头阻塞问题,加快了资源加载速度。
  3. 编译器:Vite 使⽤了⾃定义的编译器来处理开发时的模块解析和转换。它能够识别模块的依赖关
    系,并将模块转换为浏览器可直接执⾏的代码。Vite 的编译器⽀持热模块替换(HMR),可以在代码修改时⾃动更新浏览器中的⻚⾯,提⾼开发效率。
  4. 中间件:Vite 使⽤了基于 Koa 框架的中间件来处理开发服务器。通过中间件,Vite 可以拦截和处理
    开发时的 HTTP 请求,并根据请求的路径返回相应的模块⽂件。中间件还可以处理各种开发时的特殊需求,如代理 API 请求、路由转发等。

Things you said


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92162.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92162.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92162.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习(3):KNN算法-分类

一、KNN算法 K-近邻算法(K-Nearest Neighbors,简称KNN),根据K个邻居样本的类别来判断当前样本的类别;如果一个样本在特征空间中的k个最相似(最邻近)样本中的大多数属于某个类别,则该类本也属于这个类别。一些距离&…

Redis Windows迁移方案与测试

我想将开源软件Redis的主程序和附属程序迁移到Windows平台,目前它只能在Linux上运行,让它可以在Windows 11和Windows Server 2025上运行,这需要考虑Linux操作系统和Windows操作系统的差异,请列举出将Redis在Linux系统上运行的GCC的…

信息安全概述--实验总结

数据链路层--ARP欺骗ARP欺骗原理XP2要与XP3通信,要发送ARP请求,询问XP3的MAC地址kali冒充XP3持续给XP2发送ARP应答,XP2会以为收到的MAC地址是XP3的,实际是kali的之后XP2发送的数据都是发给kali的如果说XP2需要想要访问互联网&…

【Electron】打包后图标不变问题,图标问题

windows上图标未更换。图标已经换了,但新打出的包或是安装后的 exe 图标没有更换。这个时候可以右击你的exe或是安装包点属性,看看图标是否正常,如果这里的图标正常,那其实就是成功的了。主要原因是因为 windows 图标缓存机制导致…

单词拆分 II

题目&#xff1a;思考&#xff1a; 本质上和单词拆分1没什么区别单词拆分1是问能不能拆单词拆分2是问把所有拆的方案列出来要列出所有方案&#xff0c;采用字典树回溯 实现&#xff1a; class Node { public:vector<Node*> check;bool isEnd;Node(int num){for (int i0;i…

国产三防平板电脑是什么?三防平板推荐

国产三防平板电脑&#xff0c;专为应对极端工作环境而生。这类设备集防水、防尘、防摔三大防护性能于一体&#xff0c;通过IP67/IP68防护认证及MIL-STD-810军规标准测试&#xff0c;能在建筑工地、油田勘探、应急救援等恶劣场景中稳定运行。其核心价值在于将消费级平板的智能体…

优思学院|什么是精益生产管理?原则与方法详述

在企业经营中&#xff0c;「利润&#xff1d;价格&#xff0d;成本」这条公式可谓家喻户晓。传统的成本思维通常认为价格由公司设定&#xff0c;而成本则是难以撼动的既定事实。然而&#xff0c;随着市场经济与自由定价机制的成熟&#xff0c;企业逐渐意识到——价格其实是由市…

【银行测试】银行票据项目业务+票据测试点分析(四)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、提示付款 功能…

基于华为开发者空间的Open WebUI数据分析与可视化实战

1 概述 1.1 案例介绍 本案例演示如何在华为开发者空间云主机上搭建Open WebUI环境&#xff0c;结合DeepSeek-R1模型进行数据分析、统计建模、数据可视化和业务洞察挖掘等实际数据科学任务。 1.2 适用对象 数据分析师业务分析师数据科学工程师市场研究人员统计学专业学生 1…

【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?

目录 引言 编写视觉语言大模型&#xff08;VLM&#xff09;程序 交叉编译Cangjie Magic到T536开发板 对cjpm.toml文件的修改 stdx库的配置 拷贝libsecurec.so到cangjie的库文件中 开始交叉编译 部署到开发板 拷贝所需要的库文件 安装curl 运行程序 结束语 本文首发…

最长连续序列(每天刷力扣hot100系列)

目录 题目介绍&#xff1a; 哈希表法&#xff1a; 复杂度分析&#xff1a; 思路分析&#xff1a; unordered_set 和 unordered_map的比较&#xff1a; 1. 核心区别 2. 使用场景 3. 在本题中的选择 4. 性能对比 5. 成员函数差异 unordered_table.begin()函数是返回的键…

国标渠道研究:专业为渠道策略提供数据支持(渠道调研)

北京国标市场调查有限公司是一家专业的市场调查公司&#xff0c;&#xff08;线上问卷调查&#xff09;&#xff08;第三方市场咨询&#xff09;&#xff08;消费者调查研究&#xff09;专注于为企业提供全方位的渠道研究服务。服务范围包括渠道策略研究、渠道销售数据分析和渠…

深入理解 C 语言中的拷贝函数

目录1. C 语言中的主要拷贝函数2. strcpy&#xff1a;字符串拷贝函数签名示例局限性3. strncpy&#xff1a;指定长度的字符串拷贝函数签名示例局限性4. memcpy&#xff1a;通用内存拷贝函数签名示例优势局限性5. memmove&#xff1a;支持重叠内存拷贝函数签名示例优势局限性6. …

主数据变更流程

主数据&#xff08;如客户、供应商、产品等&#xff09;的变更流程&#xff08;新增、更新、停用等&#xff09;是主数据管理&#xff08;MDM&#xff09;的核心环节&#xff0c;其设计需兼顾数据质量&#xff08;准确性、一致性&#xff09;、业务合规&#xff08;审批权限、审…

VUE2 学习笔记 合集

​​​​​​​VUE2 学习笔记1 VUE特点、开发者工具、入门Demo-CSDN博客 VUE2 学习笔记2 数据绑定、数据代理、MVVM_vue2的数据绑定-CSDN博客 VUE2 学习笔记3 v-on、事件修饰符、键盘事件_vue2组件 点击事件-CSDN博客 VU2 学习笔记4 计算属性、监视属性-CSDN博客 VUE2 学习…

【motion】HumanML3D 的安装1:环境搭建

https://github.com/EricGuo5513/HumanML3D/issues/10 (base) root@k8s-master-pfsrv:/home/zhangbin/perfwork/01_ai/15_HumanML3D# conda env create -f environment.yaml Retrieving notices: ...working... done Channels:- defaults Platform: linux-64 Collecting

Pig Cloud遇到websocket不能实现同一个用户不同浏览器接受到广播的消息解决方案

自定义SecuritySessionKeyGenerator类,为每个客户端连接建立唯一的keypackage com.pig4cloud.plugin.websocket.custom;import com.pig4cloud.plugin.websocket.holder.SessionKeyGenerator; import org.springframework.web.socket.WebSocketSession;import java.util.UUID; p…

蓝讯hifi添加自定义算法

总结 自己定义算法要添加在hifi工程里 hifi工程在wiki上可以下载,名字叫做project 在main.c里添加了自己的算法,算法的执行涉及到通道与effect_id 编译hifi项目需要安装 XtensaTool 与hifi4 configuration file 编译成功后移植bin文件 通过hifi4_effect_audio_process调用hifi…

【软考中级网络工程师】知识点之 STP 协议,网络的 “交通协管员”

目录一、STP 协议初相识二、STP 协议登场&#xff0c;网络环路难题迎刃而解2.1 网络环路困境2.2 STP 协议闪亮登场三、STP 协议核心探秘&#xff1a;生成树算法3.1 选举根网桥3.2 确定根端口3.3 选定指定端口四、STP 协议端口状态解析4.1 阻塞状态4.2 监听状态4.3 学习状态4.4 …

分布式网关技术 + BGP EVPN,解锁真正的无缝漫游

无线漫游的核心挑战与标准化协议支持在构建高性能无线网络时&#xff0c;实现用户终端&#xff08;STA&#xff09;在不同接入点&#xff08;AP&#xff09;之间平滑、快速的漫游是核心目标之一。我们的无线AP产品原生支持业界标准的802.11k/v/r协议&#xff08;常称为“快速漫…