You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用`@()`的glob是否比大括号展开更高效?

glob表达式中@()与大括号{}的性能差异

两者的性能差异核心在于执行逻辑的本质不同:

  • 大括号{j,t}属于shell的预展开语法,它会先把原表达式拆成两个独立的glob:./**/*.?(m|c)js和./**/*.?(m|c)ts,然后分别执行两次完整的glob匹配流程——意味着会遍历两次目标目录(包括所有子目录),对每个文件做两次匹配检查。
  • @(j|t)是glob语法本身的分支匹配规则,属于单个glob表达式的一部分,只会触发一次目录遍历,在遍历过程中对每个文件名直接完成分支条件的匹配,不需要重复遍历数据集。

针对你给出的两个例子:

  • ./**/*.?(m|c){j,t}s会执行两次递归遍历,耗时基本是另一个版本的两倍(文件越多,差异越明显)。
  • ./**/*.?(m|c)@(j|t)s只需要一次遍历,每个文件仅做一次匹配检查,性能更优。

你的推测完全正确——@()确实不会多次遍历数据集,在大多数场景下都是更高效的选择,尤其是处理包含大量文件的目录时,性能提升会非常显著。

内容的提问来源于stack exchange,提问作者roydukkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:05:12