全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-23 7 分钟 ✍️ juanwangdev

插件过滤与性能优化

插件性能优化需要精确过滤处理范围和合理使用缓存。

createFilter 过滤文件

JavaScript
import { createFilter } from '@rollup/pluginutils'

export default function myPlugin(options = {}) {
  const filter = createFilter(
    // include: 包含的文件
    options.include || ['src/**/*.js'],
    // exclude: 排除的文件
    options.exclude || ['node_modules/**']
  )

  return {
    name: 'my-plugin',
    transform(code, id) {
      // 只处理匹配的文件
      if (!filter(id)) return null

      return transformCode(code)
    }
  }
}

缓存转换结果

JavaScript
export default function cachePlugin() {
  const cache = new Map()

  return {
    name: 'cache-plugin',
    transform(code, id) {
      // 检查缓存
      const cached = cache.get(id)
      if (cached && cached.code === code) {
        return cached.result
      }

      // 执行转换
      const result = transformCode(code)
      cache.set(id, { code, result })
      return result
    }
  }
}

持久化缓存

JavaScript
import fs from 'fs'

export default function persistentCachePlugin() {
  const cacheFile = '.plugin-cache.json'
  let cache = {}

  // 加载缓存
  if (fs.existsSync(cacheFile)) {
    cache = JSON.parse(fs.readFileSync(cacheFile, 'utf-8'))
  }

  return {
    name: 'persistent-cache',
    buildEnd() {
      // 保存缓存
      fs.writeFileSync(cacheFile, JSON.stringify(cache))
    },
    transform(code, id) {
      const hash = hashCode(code)
      const cached = cache[id]

      if (cached?.hash === hash) {
        return cached.result
      }

      const result = transformCode(code)
      cache[id] = { hash, result }
      return result
    }
  }
}

注意:持久化缓存避免每次构建重新处理相同文件。

异步处理

JavaScript
export default function asyncPlugin() {
  return {
    name: 'async-plugin',
    async transform(code, id) {
      // 异步处理
      const result = await asyncTransform(code)
      return result
    }
  }
}

并行处理

JavaScript
export default function parallelPlugin() {
  return {
    name: 'parallel-plugin',
    transform(code, id) {
      // 避免阻塞主线程
      return new Promise((resolve) => {
        setImmediate(() => {
          resolve(transformCode(code))
        })
      })
    }
  }
}

性能优化策略

策略效果
createFilter减少不必要处理
内存缓存避免重复处理
持久化缓存加速二次构建
异步处理不阻塞主线程

要点总结

  • createFilter 精确控制处理范围
  • 缓存避免重复处理相同文件
  • 持久化缓存加速二次构建
  • 异步处理不阻塞主线程

📝 发现内容有误?点击此处直接编辑

← 上一篇 Vite 插件 Hook 体系
下一篇 → 编写 load 钩子插件
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库