Skip to content

Edge Function dependency analysis

优化你的 Edge Function 依赖以提升性能。过大或不必要的依赖会显著影响打包大小、启动时间和内存使用。

🌐 Optimize your Edge Function dependencies for better performance. Large or unnecessary dependencies can significantly impact bundle size, boot time, and memory usage.

分析 Deno 依赖 #

🌐 Analyzing Deno dependencies

先分析一下你的依赖树,看看都导入了什么:

🌐 Start by analyzing your dependency tree to understand what's being imported:

1
# Basic dependency analysis
2
deno info /path/to/function/index.ts
3
4
# With import map (if using one)
5
deno info --import-map=/path/to/import_map.json /path/to/function/index.ts

注意什么 #

🌐 What to look for

查看输出内容:

🌐 Review the output for:

  • 大依赖: 对打包体积有显著影响的包
  • 多余的导入: 提供类似功能的多个包
  • 过时版本: 可以更新为更高效版本的依赖
  • 未使用的导入: 在代码中导入但未使用的依赖

优化 NPM 依赖 #

🌐 Optimizing NPM dependencies

在使用 NPM 模块时,要注意它们对打包体积的影响。许多 NPM 包是为 Node.js 设计的,可能包含不必要的 polyfill 或庞大的依赖树。

🌐 When using NPM modules, keep their impact on bundle size in mind. Many NPM packages are designed for Node.js and may include unnecessary polyfills or large dependency trees.

使用选择性导入 #

🌐 Use selective imports

导入特定子模块以减少开销:

🌐 Import specific submodules to minimize overhead:

1
// Good: Import specific submodules
2
import { Sheets } from 'npm:@googleapis/sheets'
3
import * as googleAuth from 'npm:google-auth-library'
4
import { JWT } from 'npm:google-auth-library/build/src/auth/jwtclient'
5
// Avoid: Import entire package
6
import * as googleapis from 'npm:googleapis'

最佳实践 #

🌐 Best practices

用力晃树 #

🌐 Tree-shake aggressively

只导入你会用到的东西。尽量避免使用通配符导入(import *)。

🌐 Only import what you use. Avoid wildcard imports (import *) when possible.

选择轻量化的替代品 #

🌐 Choose lightweight alternatives

研究一下提供相同功能的小型软件包。可以考虑:

🌐 Research smaller packages that provide the same functionality. Consider:

  • 使用原生 Deno API 而不是 NPM 填充
  • 专注于单一功能的包,而不是大型工具库

打包分析 #

🌐 Bundle analysis

在修改依赖前后使用 deno info 来衡量依赖变更的影响。

🌐 Use deno info before and after changes to measure the impact of dependency modifications.

版本锁定 #

🌐 Version pinning

锁定依赖版本,以避免自动更新导致的意外体积增加:

🌐 Lock dependency versions to avoid unexpected size increases from automatic updates:

1
// Pin to specific version
2
import { something } from 'npm:package@1.2.3'

常见的大型依赖 #

🌐 Common heavy dependencies

当心这些通常比较重的封装:

🌐 Watch out for these commonly heavy packages:

  • 完整的 AWS SDK(建议改用各个单独的服务包)
  • Moment.js(考虑 date-fns)或原生 Date API)
  • Lodash(导入特定函数:lodash/get
  • 完整的谷歌 API(使用具体的服务包)

额外资源 #

🌐 Additional resources