Vite 静态资源处理实战:从基础导入到生产优化全解析

前端性能优化实战:从 Webpack 到 Vite 的全栈提速方案 本文聚焦前端性能优化,解析从 Webpack 到 Vite 的升级方案。分析 Webpack 在打包速度、配置等方面的瓶颈,阐述 Vite 在开发、构建、SSR 等场景的优势。通过实战迁移指南与性能对比,展现其高效特性,助力全栈提速。 阅读详情

1. 静态资源处理:现代前端工程的基石

如果你刚开始用 Vite,可能会觉得它处理图片、字体这些文件特别“省心”——直接 import 进来就能用,路径也对,开发时刷新也快。但当你项目里的图标越来越多,或者需要引入一些特殊格式的文件(比如 Web Worker、音频)时,可能就会遇到一些困惑:为什么有的图片变成了 Base64 字符串,有的却生成了单独的文件?SVG 怎么才能像组件一样控制颜色和大小?生产打包时,怎么让这些资源加载得更快?

其实,静态资源处理远不止“引入一张图”那么简单。它贯穿了从开发到构建的整个链路,直接影响到最终应用的性能和用户体验。一个大型项目里,图片、字体、JSON 配置、Worker 脚本加起来可能有几百个,如果处理不当,轻则打包体积臃肿,首屏加载缓慢,重则出现资源路径错误、404 或者样式错乱。我自己在从 Webpack 迁移到 Vite 的过程中,就踩过不少坑,比如动态图片路径在构建后失效,或者 SVG 内联后无法用 CSS 控制样式。

Vite 在这方面的设计非常巧妙,它没有延续 Webpack 那种“一切皆可 Loader”的复杂配置思路,而是基于 ES 模块和浏览器原生能力,提供了一套更直观、更高效的机制。简单来说,Vite 把静态资源也当作一个 ES 模块。当你 import logo from './logo.png' 时,Vite 在开发环境下会把这个模块解析成一个资源的 URL 路径;在生产构建时,则会根据文件大小等因素,智能地决定是将它内联成 Base64,还是复制为独立的文件并生成带哈希的文件名。这种“约定大于配置”的方式,让大部分常见场景开箱即用,而在需要深度定制时,它也提供了清晰的配置项和查询参数(Query Suffix)来满足你。

所以,这篇文章我会把自己在多个项目中总结的 Vite 静态资源实战经验分享给你。我们会从最基础的导入方式讲起,一步步深入到 SVG 组件化、特殊资源处理,最后聚焦生产环境的压缩和分包优化。目标就是让你不仅能“用起来”,更能“用得明白、用得高效”,构建出既快又稳的现代 Web 应用。

2. 基础导入与路径解析:开箱即用的便利

2.1 自动 URL 转换与内联规则

这是 Vite 最核心、也最让人省心的特性。你不需要配置任何 Loader,直接使用 ES 模块的 import 语法导入资源即可。Vite 会自动处理这些导入,并返回一个解析后的公共 URL。

// 在 Vue 或 React 组件中
import logo from './assets/logo.png'
import fontFile from './assets/fonts/custom.woff2'

console.log(logo) // 开发环境:'/src/assets/logo.png'
                  // 生产环境:'/assets/logo.d955b3e9.png'

这个 URL 可以直接用在需要路径的地方,比如 <img src>、@font-face 的 src 属性,或者 CSS 的 background-image 里。Vite 在背后做了两件重要的事:第一是路径解析,确保在任何地方引用这个资源都能找到正确的文件;第二是内容哈希,在生产构建时为文件名添加哈希值,用于强缓存和防止更新冲突。

更智能的是它的内联决策。对于小文件,额外的 HTTP 请求开销可能比文件本身还大。Vite 默认会将小于 4KB 的资源内联为 Base64 Data URL。这意味着,一个 3KB 的小图标,不会产生独立的网络请求,而是直接变成一串字符嵌入到你的 JavaScript 或 CSS 中。这个阈值可以通过 build.assetsInlineLimit 配置。

// vite.config.ts
export default defineConfig({
  build: {
    assetsInlineLimit: 8 * 1024 // 将阈值提高到 8KB
  }
})

注意:这个规则对 SVG 文件是例外。由于 SVG 是文本格式,且经常需要通过 CSS 修改样式,Vite 默认不会将 SVG 内联为 Base64,而是始终作为独立文件处理。如果你确实需要内联 SVG,可以使用 ?inline 查询参数来强制内联。

2.2 配置路径别名,告别冗长的相对路径

当项目结构变深时,类似 ../../../assets/images/logo.png 的相对路径会变得难以维护且容易出错。Vite 允许你配置路径别名(alias),用简短的符号代替冗长的路径。

// vite.config.ts
import { defineConfig } from 'vite'
import path from 'path'

export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@assets': path.resolve(__dirname, './src/assets'),
      '@images': path.resolve(__dirname, './src/assets/images')
    }
  }
})

配置之后,你在项目中就可以这样使用:

<template>
  <img :src="logo" alt="简洁多了">
</template>

<script setup>
// 使用别名,清晰且不易出错
import logo from '@images/logo.png'
// 而不是 import logo from '../../../../assets/images/logo.png'
</script>

路径别名不仅在导入静态资源时有用,在导入 JavaScript/TypeScript 模块时也能大幅提升代码可读性。我建议在项目初期就规划好别名规则,并保持团队内统一。

2.3 动态导入与 import.meta.url

有些时候,我们无法在编译时确定需要导入哪个资源。比如,根据用户选择的主题加载不同的背景图,或者从一个配置数组中循环加载一组图标。这时就需要动态导入。

在 Vite 中,你可以使用 new URL(url, import.meta.url) 这个模式来动态构造资源 URL。import.meta.url 是一个 ESM 的原生特性,它指向当前模块文件的 URL。Vite 在构建时会正确解析这种模式,确保动态路径的资源也能被正确处理和哈希。

<template>
  <div>
    <img v-for="icon in iconList" :key="icon" :src="getIconUrl(icon)" alt="icon">
  </div>
</template>

<script setup>
const iconList = ['home', 'user', 'settings']

const getIconUrl = (name) => {
  // 这是动态资源引用的推荐方式
  return new URL(`./assets/icons/${name}.svg`, import.meta.url).href
}
</script>

提示:避免使用纯字符串拼接路径,如 ./assets/icons/${name}.svg。因为 Vite 的构建工具在分析依赖时,可能无法识别这种动态字符串,导致资源没有被正确打包。而 new URL(..., import.meta.url) 的写法给了构建器明确的提示。

3. 特殊资源处理:SVG、Worker 与 JSON

3.1 将 SVG 变为可交互的 Vue/React 组件

直接以图片形式使用 SVG,你无法修改其颜色、线条粗细等属性。最好的方式是将 SVG 作为组件引入,这样你就可以像控制 DOM 元素一样控制它。Vite 社区提供了优秀的插件来实现这个功能。

对于 Vue 3 项目,我推荐使用 vite-svg-loader。它可以将 SVG 文件直接转换为 Vue 组件。

npm install vite-svg-loader -D

然后在 vite.config.ts 中配置:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import svgLoader from 'vite-svg-loader'

export default defineConfig({
  plugins: [
    vue(),
    svgLoader({
      defaultImport: 'component' // 默认作为组件导入,可选 'url' 保持为 URL
    })
  ]
})

使用起来非常简单:

<template>
  <!-- 直接作为组件使用,可以绑定事件、用 class 控制样式 -->
  <MyIcon class="icon-style" @click="handleClick" />
</template>

<script setup>
import MyIcon from './assets/icons/my-icon.svg'
</script>

<style scoped>
.icon-style {
  width: 24px;
  height: 24px;
  fill: #42b983; /* 可以控制 SVG 填充色 */
  transition: fill 0.3s;
}
.icon-style:hover {
  fill: #35495e;
}
</style>

对于 React 项目,可以使用 @svgr/rollup 或 vite-plugin-svgr。它们的作用类似,将 SVG 转换为 React 函数组件。

npm install vite-plugin-svgr -D

配置:

// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import svgr from 'vite-plugin-svgr'

export default defineConfig({
  plugins: [
    react(),
    svgr({
      svgrOptions: {
        icon: true, // 允许像图标一样按尺寸缩放
        // ... 其他 SVGR 配置
      }
    })
  ]
})

在组件中使用:

import { ReactComponent as Logo } from './logo.svg'

function App() {
  return <Logo className="app-logo" />
}

3.2 使用查询参数精准控制导入行为

Vite 提供了一系列查询参数(Query Suffix),让你可以显式地告诉构建工具你希望以何种方式处理这个资源。这在你需要打破默认规则时非常有用。

  • ?url:强制将资源作为 URL 引入。适用于那些你明确不希望被内联的资源,比如较大的媒体文件,或者需要单独缓存的文件。

    import workletURL from './paint-worklet.js?url'
    CSS.paintWorklet.addModule(workletURL)
    
  • ?raw:将文件作为纯文本字符串引入。这在引入 GLSL 着色器代码、HTML 模板片段或一些配置文件时非常方便。

    import vertexShader from './shader.vert?raw'
    import htmlTemplate from './template.html?raw'
    
  • ?worker / ?sharedworker:将脚本文件转换为 Web Worker。这是处理 Worker 最优雅的方式。Vite 会将其打包为独立的 chunk,并在生产构建中正确分离。

    import MyWorker from './worker.js?worker'
    const worker = new MyWorker()
    
  • ?inline:强制将资源内联为 Base64 Data URL。适用于那些你确定很小且需要立即可用、避免额外请求的资源。

    import inlineLogo from './tiny-logo.png?inline'
    
  • ?asset (主要用于 Electron 等桌面端场景):获取资源在文件系统中的物理路径,而不是网络 URL。

    import appIcon from '../../build/icon.ico?asset'
    // 输出类似:path.join(__dirname, "./chunks/icon-xxx.ico")
    

这些查询参数给了你极大的灵活性,让你可以在代码层面精确控制每个资源的处理方式,而不是仅仅依赖全局配置。

3.3 JSON、Worker 与其他内置支持

除了图片和字体,Vite 对 JSON 文件和 Web Worker 也提供了原生支持。

JSON 文件 可以直接导入,并自动转换为 JavaScript 对象。这在加载配置、本地化语言包时非常有用。

// 直接导入
import pkg from '../package.json'
console.log(pkg.version)

// 动态导入 JSON 也是支持的
const localeData = await import(`./locales/${language}.json`)

Web Worker 通过 ?worker 后缀处理,如前所述。对于更复杂的 Worker 场景,比如 Worker 内又依赖了其他模块,Vite 也能很好地处理依赖图,将其打包到一起。

此外,Vite 默认支持一系列常见的静态资源类型,无需额外配置:

  • 媒体文件:.mp4, .webm, .ogg, .mp3, .wav, .flac, .aac
  • 字体文件:.woff, .woff2, .eot, .ttf, .otf
  • 文本文件:.webmanifest, .pdf, .txt

如果你的项目使用了不在这个列表中的特殊资源格式,可以通过 assetsInclude 配置项来扩展:

// vite.config.ts
export default defineConfig({
  assetsInclude: ['**/*.glb', '**/*.gltf'], // 支持 3D 模型格式
})

4. 生产环境优化:压缩、分包与最佳实践

开发时的便利很重要,但生产环境的性能才是最终用户体验的关键。Vite 的构建流程提供了多种优化静态资源的手段。

4.1 资源压缩:大幅减小体积

图片通常是前端资源中的“体积大户”。未经优化的图片可能占掉整个应用带宽的 70% 以上。Vite 本身不内置图片压缩,但我们可以通过强大的社区插件 vite-plugin-imagemin 来实现。

这个插件底层使用 imagemin 及其各种格式的优化器,能在几乎不损失视觉质量的前提下,显著压缩图片体积。

首先安装插件和所需的压缩库:

npm install vite-plugin-imagemin imagemin-gifsicle imagemin-mozjpeg imagemin-pngquant imagemin-svgo -D

然后在 vite.config.ts 中配置:

import { defineConfig } from 'vite'
import viteImagemin from 'vite-plugin-imagemin'

export default defineConfig({
  plugins: [
    // ... 其他插件
    viteImagemin({
      // GIF 优化配置
      gifsicle: {
        optimizationLevel: 7, // 优化级别 0-7
        interlaced: false, // 是否交错渲染
      },
      // JPEG 优化配置
      mozjpeg: {
        quality: 75, // 压缩质量 (0-100),建议 75-85
        progressive: true, // 生成渐进式 JPEG
      },
      // PNG 无损压缩配置
      optipng: {
        optimizationLevel: 7, // 优化级别 0-7
      },
      // PNG 有损压缩配置(压缩率更高)
      pngquant: {
        quality: [0.8, 0.9], // 质量范围
        speed: 4, // 压缩速度 (1-11,越慢越好)
      },
      // SVG 优化配置
      svgo: {
        plugins: [
          { name: 'removeViewBox' }, // 移除 viewBox 属性(如果已有宽高)
          { name: 'removeEmptyAttrs', active: false } // 不移除空属性
        ]
      }
    })
  ]
})

配置完成后,运行 npm run build,插件会自动处理 src 目录下的所有图片资源。在我的一个项目中,这个插件将总图片体积从 4.2MB 压缩到了 1.8MB,效果非常显著。需要注意的是,压缩过程会稍微增加构建时间,建议在持续集成(CI)环境中进行,而不是在开发时。

4.2 调整内联阈值与输出目录

我们之前提到了 assetsInlineLimit 这个配置。在生产优化时,你需要根据实际情况调整它。将一些小图标、小图片内联,可以减少 HTTP 请求数,但也会增加主 JS 文件的体积。你需要做一个权衡。

我的经验是:

  • 对于 UI 框架使用的小图标(如字体图标、UI 库图标),如果单个图标体积小于 2KB,且数量众多,可以考虑用雪碧图(Sprite)或字体文件,而不是内联。
  • 对于首屏关键路径上必须立即显示的小图(比如 Logo),即使略大于 4KB,也可以考虑适当提高阈值将其内联,以消除关键请求。
  • 对于轮播图、背景图等非关键资源,应该保持为独立文件,利用浏览器并行加载和缓存。

你还可以通过 build.assetsDir 来定制静态资源的输出目录,让构建结构更清晰。

// vite.config.ts
export default defineConfig({
  build: {
    assetsInlineLimit: 4 * 1024, // 4KB
    assetsDir: 'static/assets', // 资源输出到 dist/static/assets 目录下
    rollupOptions: {
      output: {
        // 对资源文件进行更细粒度的命名
        assetFileNames: 'static/assets/[name]-[hash][extname]',
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
      }
    }
  }
})

4.3 善用 public 目录与注意事项

Vite 项目根目录下的 public 文件夹是一个特殊目录。放在这里的文件会被直接复制到输出目录的根路径下,且不会经过 Vite 的构建处理(即没有哈希,也不会被压缩)。

什么文件应该放在 public 目录?

  1. 完全不需要处理的文件:比如 robots.txt、favicon.ico、site.webmanifest(PWA 应用清单)。
  2. 需要保持确切文件名的文件:比如供用户下载的 PDF 手册、企业 Logo 源文件。
  3. 通过绝对路径引用的第三方库:某些老旧的库可能会硬编码类似 /lib/old-library.js 的路径。

在代码中,你可以直接使用根路径来引用 public 下的资源:

<!-- 在 HTML 中 -->
<link rel="icon" href="/favicon.ico">

<!-- 在 Vue/React 模板中 -->
<img src="/company-logo.png" alt="Logo">

重要警告:尽量避免在 JavaScript/TypeScript 代码中通过 import 或字符串拼接来引用 public 目录下的资源。因为 public 目录下的文件路径在构建后是固定的,而通过 Vite 处理的 assets 目录下的资源路径是带哈希的。混合使用会导致开发和生产环境路径不一致,容易出错。一个简单的原则:需要 Vite 处理(哈希、压缩)的资源放 src/assets;完全静态、原样复制的资源放 public。

5. 完整配置示例与常见问题排查

5.1 一个功能齐全的 Vite 静态资源配置示例

下面是一个融合了上述所有最佳实践的 vite.config.ts 配置示例,你可以以此为蓝本进行调整。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import svgLoader from 'vite-svg-loader'
import { viteImagemin } from 'vite-plugin-imagemin'
import path from 'path'

export default defineConfig({
  // 项目根目录
  root: process.cwd(),
  // 开发或生产环境的基础公共路径
  base: process.env.NODE_ENV === 'production' ? '/your-project-path/' : '/',
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@assets': path.resolve(__dirname, './src/assets'),
      '@images': path.resolve(__dirname, './src/assets/images'),
      '@fonts': path.resolve(__dirname, './src/assets/fonts'),
    }
  },
  // 扩展资源类型识别
  assetsInclude: ['**/*.glb', '**/*.hdr'], // 识别 3D 模型和 HDR 贴图
  plugins: [
    vue(),
    // SVG 组件化加载
    svgLoader({
      defaultImport: 'component',
      svgoConfig: { // 可选的 SVGO 优化配置
        plugins: [
          'preset-default',
          'prefixIds' // 为 SVG 元素 ID 添加前缀,避免冲突
        ]
      }
    }),
    // 生产环境图片压缩
    process.env.NODE_ENV === 'production' ? viteImagemin({
      optipng: { optimizationLevel: 7 },
      pngquant: { quality: [0.8, 0.9], speed: 4 },
      mozjpeg: { quality: 80, progressive: true },
      gifsicle: { optimizationLevel: 7, interlaced: false },
      svgo: {
        plugins: [
          { name: 'removeViewBox' },
          { name: 'removeEmptyAttrs', active: false }
        ]
      }
    }) : null,
  ].filter(Boolean), // 过滤掉开发环境下为 null 的插件
  build: {
    // 输出目录
    outDir: 'dist',
    // 静态资源存放目录
    assetsDir: 'static',
    // 资源内联阈值
    assetsInlineLimit: 4 * 1024, // 4KB
    // 是否生成 sourcemap
    sourcemap: false,
    // 配置 Rollup 选项
    rollupOptions: {
      output: {
        // 对资源文件进行分目录、哈希命名
        assetFileNames: (assetInfo) => {
          let extType = assetInfo.name.split('.').at(1)
          if (/png|jpe?g|svg|gif|tiff|bmp|ico/i.test(extType)) {
            extType = 'images'
          } else if (/woff|woff2|eot|ttf|otf/i.test(extType)) {
            extType = 'fonts'
          }
          return `static/${extType}/[name]-[hash][extname]`
        },
      }
    }
  }
})

5.2 常见问题与解决方案

在实际使用中,你可能会遇到以下几个典型问题:

问题一:动态导入的图片在生产环境找不到(404)

  • 现象:开发时正常,构建后部分图片不显示。
  • 原因:最可能的原因是使用了错误的动态路径拼接方式,Vite 的构建工具无法在打包时分析出这些依赖。
  • 解决:务必使用 new URL(./assets/${name}.png, import.meta.url).href 模式。确保路径字符串是静态模板(使用反引号),且以 ./ 或 ../ 开头,这样 Vite 才能正确进行依赖分析。

问题二:SVG 作为组件引入后,CSS 样式不生效

  • 现象:给 SVG 组件添加的 fill、stroke 等样式被忽略。
  • 原因:SVG 文件内部可能已经定义了 fill 属性,其优先级高于 CSS。
  • 解决:在导入 SVG 前,使用 SVGO 插件(配置在 vite-svg-loader 或 vite-plugin-svgr 中)移除内联样式,或者确保你的 SVG 文件是“干净”的。也可以在 CSS 中使用 !important(不推荐)或通过 :deep() 选择器(Vue)来穿透样式。

问题三:public 目录下的资源在构建后路径错误

  • 现象:public 里的文件在开发环境能访问,构建后访问 404。
  • 原因:在代码中使用了错误的引用方式,或者 base 配置不正确。
  • 解决:引用 public 资源永远使用绝对路径(以 / 开头)。检查 vite.config.ts 中的 base 配置,确保生产环境的基础路径与你的部署环境匹配(例如,部署在子路径 /my-app/ 下,则 base 应设为 /my-app/)。

问题四:图片压缩插件导致构建速度变慢

  • 现象:安装 vite-plugin-imagemin 后,构建时间明显增加。
  • 原因:图片压缩是 CPU 密集型操作,图片越多、越大,耗时越长。
  • 解决:1. 仅在 process.env.NODE_ENV === 'production' 时启用该插件。2. 可以考虑将图片压缩放到 CI/CD 流水线中异步执行,或者使用缓存机制,只压缩有变动的图片。

处理静态资源是现代前端工程化不可或缺的一环,Vite 通过其精妙的设计,让这件事变得简单而高效。核心在于理解其“资源即模块”的理念,掌握基础导入、查询参数、生产优化这三个层次。从我的经验看,大部分问题都源于对 public 目录和 assets 目录的误用,或者动态路径处理不当。只要遵循本文的实践,你就能建立起一套稳健的 Vite 静态资源处理流程,让应用的性能和可维护性都得到提升。如果在实际项目中遇到更特殊的情况,多查阅 Vite 官方文档和插件生态,总能找到合适的解决方案。

Vite底层原理解析 阅读详情

相关推荐

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南)

本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。

rice5的博客 951

【Vite】生产环境中静态资源的优化与处理详解

在前端开发中,静态资源通常包括图片、字体、CSS、JS 文件等,它们都是 Web 应用的重要组成部分。有效地处理和优化这些资源对页面加载速度、用户体验有直接影响。Vite 在生产环境中提供了开箱即用的优化功能,减少开发者的配置负担。Vite 在生产环境中对静态资源的处理高度自动化,开发者只需进行少量的配置即可享受到优质的性能优化效果。从资源内联、哈希命名到代码压缩与分块,Vite 为现代 Web 应用提供了一整套完善的资源处理机制。在实际项目中,善用这些机制不仅能提升用户体验,还能有效减轻服务器负担。

lph159的博客 1984

Keil5芯片包下载后无法识别?手把手排查教程

遇到Keil5芯片包下载后不被识别的问题别慌,常见原因包括安装路径错误或包未正确注册。通过检查Pack Installer状态和手动更新设备支持列表,轻松排查故障,确保开发环境正常运行。

weixin_35459464的博客 878

在 Vite 中如何处理静态资源

在 Vite 中处理静态资源(如图片、字体、CSS/JS 文件等)主要通过自动路径解析、内联优化、显式后缀控制等机制实现,同时支持生产环境下的哈希命名和压缩优化。本文将详细介绍在 Vite 中如何处理静态资源。

念旧的博客 1928

【AI智能体】最强AI编程利器 Claude Code 从部署到项目实战详解

最强AI编程利器 Claude Code 从部署到项目实战详解

congge 4508

对角两对双差速轮AGV的平移、直行、转弯和原地旋转之PID控制

本示例将展示如何使用PID控制算法,控制具有对角线布置的两对双差速轮(左前和右后)的AGV,实现平移、直行、转弯和原地旋转等运动。通过对车辆的运动学和PID控制器的设计,我们可以精确地控制AGV的运动

xiaoc100200的博客 1509

Vite 静态资源处理实战指南

本篇文章系统性地介绍了Vite框架下静态资源处理的完整解决方案。主要内容包括:Vite的三种基础资源导入方式(常规导入、特殊后缀控制、public目录);动态资源加载的实用技巧;常见问题的避坑指南。文章从基本原理到实战应用,详细解析了图片、字体、CSS背景等各类资源的正确处理方法,特别针对开发与生产环境差异、动态资源路径等易错点提供了解决方案。既适合Vite初学者系统学习,也能帮助有经验的开发者优化现有项目配置,有效解决90%以上的静态资源相关问题。

linyuzhizou的博客 1277

AutoSAR配置与实践(基础篇)2.5 RTE对数据一致性的管理

SWC内部不同的Runnable访问共同全局变量,Runnable类似C文件中的函数,这些函数如果被放在不同Task上运行, 可能出现出现同一时刻多个函数共同运行的情况。可以通过为受影响的任务分配相同的优先级,为受影响的任务分配相同的内部操作系统资源,或者将OS的任务配置为非抢占性来实现。数据一致性:当多个操作同时读写同一个数据,由于任务的抢占,出现了数据被篡改的情况,造成非预期的数据结果。SWC内部变量保护,限定局变量的作用域在变量的作用域在SWC的不同runnable间。

nihaoljq2010的博客 2627

Vite静态资源处理:从加载到优化的完整指南

在前端工程化演进过程中,静态资源处理始终是影响构建效率和应用性能的关键环节。传统工具链常面临三大核心痛点:**开发体验割裂**(如Webpack的`file-loader`配置繁琐)、**生产构建冗余**(未优化的资源体积)、**资源类型适配复杂**(图片/字体/Worker等差异化处理)。Vite作为下一代前端构建工具,通过革新性的资源处理流程,将开发服务器启动时间从秒级压缩至毫秒级,同时提供开...

gitblog_00485的博客 1162

机器人控制基础:伺服驱动器的泄放电阻

摘要:伺服驱动器泄放电阻用于消耗电机减速或制动时产生的再生电能,防止母线电压过高损坏元件。其核心作用是将多余电能转化为热能,规避硬件损坏和停机风险。选型需关注功率、阻值和封装三大参数,功率应匹配再生能量,阻值需符合驱动器要求,封装应满足散热需求。可通过动态监测母线电压或静态检测电阻阻值来判断其是否正常工作。

start_up_go的博客 380

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5569

静态资源 如何在 Vite 中处理各种静态资源?

一般在我们访问线上的站点时,站点里面一些静态资源的地址都包含了相应域名的前缀,如:以上面这个地址例子,是 CDN 地址前缀,/logo.png则是我们开发阶段使用的路径。那么,我们是不是需要在上线前把图片先上传到 CDN,然后将代码中的地址手动替换成线上地址呢?这样就太麻烦了!在 Vite 中我们可以有更加自动化的方式来实现地址的替换,只需要在配置文件中指定base。

江拥羡橙的博客 4072

【DRAM存储器六十二】DDR5介绍--引脚和基本功能简介

详述DDR5与DDR4的引脚区别和DDR5基本功能

highman110的博客 523

【Vite】静态资源处理与别名配置详解

静态资源通常包括图片、字体、样式文件、媒体文件等,不需要在运行时动态生成。Vite 对静态资源的处理十分高效,它能够在开发环境中通过 HTTP 请求加载这些资源,并在生产环境中对资源进行优化,例如文件压缩和缓存控制。在 Vite 中,静态资源的加载方式与传统的 Webpack 或其他打包工具稍有不同,它通过现代浏览器的ESModule机制和原生支持的import语法来管理资源的加载和依赖。别名(alias)是一种替代路径的简写形式,它使得模块的导入更加简洁,特别是在项目结构复杂时,避免使用冗长的相对路径。

lph159的博客 2667

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《从零开始学习Vite》 第三章:静态资源处理

这一章我们将从如何加载静态资源和如何在生产环境中对静态资源进行优化来学习 Vite 怎么开箱即用的。

vettel的博客 1413

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vite配置全解析:从入门到实战

Vite配置详解与实战摘要 Vite是新一代前端构建工具,提供极速开发体验和高效生产构建。本文全面解析Vite核心原理、配置方法和优化策略: 核心特性:原生ESM支持、按需编译、高效HMR、Rollup打包 基础配置:环境变量、路径别名、依赖预构建、缓存机制 开发环境:服务器配置、代理设置、静态资源处理 生产优化:代码分割、Tree Shaking、压缩、分包策略 性能调优:预构建依赖、HTTP缓存、构建目标设置 插件开发:基于Rollup的插件系统,扩展构建流程 通过对比Webpack等传统工具,Vite

2401_85407863的博客 1146

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Vite(二)依赖预构建、静态资源处理、构建生产版本

Vite(二)依赖预构建、静态资源处理、构建生产版本 文章目录Vite(二)依赖预构建、静态资源处理、构建生产版本1. 依赖预构建原因自动依赖搜寻Monorepo 和链接依赖自定义行为缓存文件系统缓存浏览器缓存2. 静态资源处理将资源引入为 URL显式 URL 引入将资源引入为字符串导入脚本作为 Worker`public` 目录3. 构建生产版本浏览器兼容性公共基础路径自定义构建多页面应用模式库模式 网址:https://vitejs.cn/guide/why.html 1. 依赖预构建 当你首次

qq_43456781的博客 3402

Vite 动态导入静态资源与自动依赖发现实战解析

在 Vite 中,动态加载图片、JSON 等静态资源是高频需求,但动态路径拼接可能导致构建失败或资源未识别。通过上述实践,开发者可以高效管理 Vite 中的动态资源,同时精准控制依赖预构建策略,实现性能与可维护性的最佳平衡。的子模块,导致运行时加载延迟。必须与 Glob 生成的键。:Vite 默认不会预构建。

Yue 1145

Vite 基础理解及应用

Vite 基础理解及应用

m0_51244077的博客 1498

Vite核心功能实战指南:从开发到生产的全方位优化

你是否还在忍受传统构建工具漫长的启动时间和缓慢的热更新?作为新一代前端构建工具,Vite(法语意为"快速",发音为`/vit/`,类似"veet")凭借其革新性的设计,将开发服务器启动时间缩短至毫秒级,热模块替换(HMR)速度提升10-100倍。本文将带你深入掌握Vite的核心功能,从开发环境搭建到生产构建优化,全方位提升你的前端开发效率。 读完本文你将获得: - 掌握Vite的极速开发体验实现...

gitblog_00876的博客 1032

vite 打包优化

本文介绍了几种常见的打包优化技术和策略,包括代码压缩、文件合并、按需加载、懒加载等。通过对代码进行压缩和合并,可以减少打包文件的大小;通过按需加载和懒加载,可以提高应用程序的加载速度和性能。此外,还介绍了一些其他的打包优化技巧,如使用CDN加速、使用缓存等。这些技术和策略可以帮助开发者更好地优化自己的应用程序,提升用户体验。

俊刚的博客 3844

Webpack 和 Vite 中静态资源动态加载的实现原理与方法详解

特性ViteWebpack编译器ESBuild(极速)+ RollupBabel + Webpack 核心静态资源自动发现是是半静态资源支持是(glob import)是(require.context)真正的运行时动态路径否(需开发者配合)支持更灵活但构建体积较大资源 URL 构造兼容性友好从 Webpack 5 开始支持无论是使用 Vite 还是 Webpack,理解构建工具背后的静态资源处理原理,都是打造高效、可维护前端项目的基础。

警警的博客 1781

Vite + Express全栈开发实战:从零构建现代化Web应用

你是否曾为全栈开发中前后端配置的复杂性而头疼?传统的开发模式需要分别搭建前端构建环境和后端服务器,配置繁琐且开发体验不佳。现在,通过vite-express这一创新工具,你可以在几分钟内启动完整的全栈应用开发环境。 ## 传统开发痛点与现代化解决方案 在传统的全栈开发流程中,开发者需要: - 分别配置前端构建工具(如Webpack)和后端框架(如Express) - 处理开发环境与生产环境的

gitblog_00148的博客 416

vite构建打包优化配置

最近使用构建项目,由于项目内容较多,所以遇到了一些性能问题,所以在构建生产环境时做了一些优化,在这里做一个记录。

m0_49385985的博客 9743

终极CoreUI React项目部署指南:从Vite构建到生产环境优化的完整路径

CoreUI免费React管理模板是构建企业级后台系统的理想选择,它结合了现代UI设计与丰富的组件库。本文将详细介绍如何使用Vite构建工具实现项目的快速部署,并通过专业优化提升生产环境性能,让你的管理系统既美观又高效。 [![CoreUI React管理模板](https://raw.gitcode.com/gh_mirrors/co/coreui-free-react-admin-templ

gitblog_00558的博客 644

Vite常用配置与优化配置详细解析

Vite 配置的核心价值在于「兼顾开发效率与生产性能」,其灵活的配置体系可适配从中小型项目到大型企业级应用的全场景需求。

HHH1433223的博客 946
上一篇: 从深算一号到三号:海光DCU的技术演进与国产超算突围之路
下一篇: SPDX-License-Identifier:开源项目的合规通行证
网恋被骗八块八
博客等级 码龄3年 131粉丝 1594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值