人工智能大模型代码智能体AI Agent桌面应用后端前端CLI【免费下载链接】ZCodeZCode 是 AI 编程工作台提供桌面应用、浏览器界面和终端 Agent。本仓库包含客户端、后端服务、共享 UI以及 Agent CLI 与运行时源码。项目地址https://gitcode.com/zai-org/ZCode点击查看免费下载本指南源自 ZCode 仓库内建技能 Vercel React Best Practices 的js-min-max-loop规则聚焦 JavaScript 数组性能微优化当只需找到最小/最大元素如时间戳最新记录时用一次线性扫描代替整体排序。读完本文你将掌握 O(n) 单循环求极值的标准写法、空数组边界处理以及Math.min/max展开方案的适用边界可直接用于代码审查与重构。规则背景它在技能体系中的定位在 ZCode 仓库的 .agents/skills/react-best-practices/ 技能目录中规则按影响度分为 8 大类js-min-max-loop属于JavaScript Performancejs-前缀类别与js-combine-iterations、js-early-exit、js-set-map-lookups等并列见 SKILL.md 中的 Quick Reference 第 7 节。该类别影响等级为LOW-MEDIUM定位是热路径上的微优化累积起来可带来可感知的提升见 rules/_sections.md 第 7 节说明。规则文件的 front matterrules/js-min-max-loop.md记录了核心声明impact: LOWimpactDescription: O(n) instead of O(n log n)tags: javascript, arrays, performance, sorting, algorithms也就是说这条规则的核心收益是把时间复杂度从 O(n log n) 降为 O(n)并且避免复制数组带来的额外内存开销。为什么排序是浪费复杂度拆解找到数组的最小或最大元素本质上只需要一次线性扫描维护一个候选值逐元素比较即可。而排序无论Array.prototype.sort采用哪种算法V8 的 TimSort 平均复杂度为 O(n log n)做了大量超出需求的顺序整理工作时间浪费O(n log n) 的比较与交换操作远超 O(n) 的扫描内存浪费为了不修改原数组通常还要[...projects]复制一份再排序见下文的错误示例额外 O(n) 空间语义浪费排序产出了完整的全序结果而调用方只消费其中 12 个元素。从 ZCode 仓库源码中可以观察到排序通常被用在确实需要完整有序结果的场景例如 packages/services/src/zcode-agent/zcodeAgentService.ts 中按createdAt排序以取得历史消息序列、packages/shared/src/storage.ts 中按bytes排序以展示占用排行。这些场景排序是合理的而只要一个最值的场景则完全不需要付出排序的代价——这正是本规则要纠正的偏差。反模式一排序找最新元素O(n log n)错误O(n log n) - 通过排序找 latestinterface Project { id: string; name: string; updatedAt: number; } function getLatestProject(projects: Project[]) { const sorted [...projects].sort((a, b) b.updatedAt - a.updatedAt); return sorted[0]; }这里把整个数组降序排序然后取第一个元素。为了找到唯一的最大值却对全部 n 个元素执行了 O(n log n) 的排序同时[...projects]复制产生 O(n) 额外内存——排序只是为了取一个元素。反模式二排序同时取最旧与最新O(n log n)错误O(n log n) - 排序取 oldest 和 newestfunction getOldestAndNewest(projects: Project[]) { const sorted [...projects].sort((a, b) a.updatedAt - b.updatedAt); return { oldest: sorted[0], newest: sorted[sorted.length - 1] }; }这个写法看似一次排序拿到两个值实际上依然对全数组排序仅消费了首尾两个元素。当只需要 min/max 时排序依然是不必要的。正确实现单次循环 O(n)正确O(n) - 单循环function getLatestProject(projects: Project[]) { if (projects.length 0) return null; let latest projects[0]; for (let i 1; i projects.length; i) { if (projects[i].updatedAt latest.updatedAt) { latest projects[i]; } } return latest; } function getOldestAndNewest(projects: Project[]) { if (projects.length 0) return { oldest: null, newest: null }; let oldest projects[0]; let newest projects[0]; for (let i 1; i projects.length; i) { if (projects[i].updatedAt oldest.updatedAt) oldest projects[i]; if (projects[i].updatedAt newest.updatedAt) newest projects[i]; } return { oldest, newest }; }要点拆解单次遍历从i 1开始首元素作为初始候选每个元素至多参与两次比较不复制数组全程没有[...projects]不产生额外 O(n) 内存空数组防护两个函数都先判断projects.length 0返回null或{ oldest: null, newest: null }避免对空数组取[0]得到undefined后访问属性导致运行时错误比较方向求最新用更新候选求最旧用更新候选同时在getOldestAndNewest中两个if独立判断一次循环同时维护两个候选值。替代方案Math.min / Math.max 的展开局限替代Math.min/Math.max适合小数组const numbers [5, 2, 8, 1, 9]; const min Math.min(...numbers); const max Math.max(...numbers);Math.min/Math.max配合展开运算符写法简洁但它有两个明显局限原文档给出的数据大数组会失败...numbers会将整个数组作为参数列表传给函数受引擎参数栈上限约束。文档实测参考值约为Chrome 143 上限约 124000 个元素、Safari 18 上限约 638000 个元素不同版本与平台有差异超出后可能抛出RangeError: Maximum call stack size exceeded之类的错误性能并非恒优展开构造参数列表本身也有开销对小数组可忽略但对大数组既不安全也不见得快。因此该规则建议追求可靠性与可预测性用单循环方案Math.min/Math.max仅在小数组几百到几千元素以内的场景中作为简洁写法。决策小结三种写法的选择方案时间复杂度空间复杂度适用场景sort后取首/尾元素O(n log n)O(n)需复制需要完整有序结果时单次循环求极值O(n)O(1)只取最小/最大值推荐Math.min/max(...arr)O(n)O(n)参数展开小数组、代码追求简洁时规则原文给出的总原则是求最小或最大元素只需一次遍历数组排序既浪费又更慢Finding the smallest or largest element only requires a single pass through the array. Sorting is wasteful and slower.。延伸阅读规则原文.agents/skills/react-best-practices/rules/js-min-max-loop.md技能总览与规则索引.agents/skills/react-best-practices/SKILL.md 及完整汇编版 .agents/skills/react-best-practices/AGENTS.md该规则对应第 7.12 节同类 JS 性能规则js-combine-iterations合并循环、js-early-exit提前返回、js-length-check-first先查长度等见 rules/ 目录规则书写模板rules/_template.md在 ZCode 的代码审查与 AI 辅助重构流程中识别排序只为取最值的写法并替换为单循环是低风险、收益可预期的热路径优化手段——数组越大O(n log n) 与 O(n) 的差距越明显。赞分享人工智能大模型代码智能体AI Agent桌面应用后端前端CLI【免费下载链接】ZCodeZCode 是 AI 编程工作台提供桌面应用、浏览器界面和终端 Agent。本仓库包含客户端、后端服务、共享 UI以及 Agent CLI 与运行时源码。项目地址https://gitcode.com/zai-org/ZCode点击查看免费下载相关推荐ZCode 前端性能优化实战用单次循环求 Min/Max 取代排序O(n) 替代 O(n log n)ZCode 前端性能优化实战用单次循环求 Min/Max 取代排序O n 替代 O n log n 导读 本文讲解 Vercel React BestPhoenix 前端性能实践用 O(n) 单次循环求数组最值替代 O(n log n) 的 sort 排序Phoenix 前端性能实践用 O n 单次循环求数组最值替代 O n log n 的 sort 排序 本篇技术指南聚焦于 Phoenix 仓库内置的 Ve可观测性AI 评测LLMOpsAI 应用人工智能O(n) 循环求极值替代 O(n log n) 排序Comp AI CRM 的 JavaScript 数组性能优化实践O n 循环求极值替代 O n log n 排序Comp AI CRM 的 JavaScript 数组性能优化实践 导读 本文聚焦 Comp AI CRM 仓后端前端CRM人工智能AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考