JavaScript Best Practices 是一份针对 JavaScript 与 TypeScript 代码的性能优化与代码风格规范,包含 17 条规则,聚焦于减少不必要的计算、优化数据结构和维持一致的书写约定。
适用时机
在编写循环或数组操作、处理数据结构(Map、Set、数组)、直接操作 DOM、缓存取值或函数结果、优化热点代码路径、声明变量或函数时,可参照这些准则。
规则概览
const-let-usage(MEDIUM):模块级使用 const,其中原始值常量采用全大写加下划线命名;函数内部一律使用 let。示例中模块级 const MAX_RETRIES = 3、const userCache = new Map(),函数内使用 let total = 0。
function-declarations(MEDIUM):具名函数优先使用函数声明而非箭头函数;内联回调可用箭头函数,类型要求时(如 const handler: ActionFunction = async (...) => {...})也使用箭头函数。
no-default-exports(MEDIUM):使用具名导出,避免默认导出,Remix 路由组件除外(命名为 Component 的默认导出)。
no-as-type-casts(HIGH):避免 as 类型断言,改用类型守卫或 Zod 校验(如 UserSchema.parse(response.data)、isUser(response.data))。
comments-meaningful-only(MEDIUM):仅在代码无法表达的信息处添加注释,例如说明业务规则,而非复述代码本身。
set-map-lookups(LOW-MEDIUM):使用 Set/Map 实现 O(1) 查找,替代数组方法。例如用 new Set(["a","b","c"]).has() 替代允许列表数组的 includes()。
index-maps(LOW-MEDIUM):为重复查找一次性构建 Map。例如先构建 new Map(users.map((u) => [u.id, u])),再在 orders.map 中通过 userById.get(order.userId) 查找,将总复杂度从 O(n*m) 降至 O(n+m)。
tosorted-immutable(MEDIUM-HIGH):使用 toSorted() 替代 sort() 以避免修改原数组。
combine-iterations(LOW-MEDIUM):将多次 filter/map 合并为一次循环。示例用单个 for 循环同时收集 admins、testers、inactive 三类结果,替代三次 filter。
cache-property-access(LOW-MEDIUM):在循环中缓存对象属性。例如先取 const value = obj.config.settings.value、const len = arr.length 再进入循环。
cache-function-results(MEDIUM):在模块级 Map 中缓存开销较大的函数结果,如 cachedSlugify 使用 slugifyCache。
cache-storage(LOW-MEDIUM):在内存中缓存 localStorage/sessionStorage 读取,如 getLocalStorage 使用 storageCache Map。
early-exit(LOW-MEDIUM):结果确定时提前返回。例如验证循环中发现缺少邮箱立即返回错误,而不是继续遍历。
length-check-first(MEDIUM-HIGH):在昂贵比较前先检查数组长度。例如 hasChanges 先判断 a.length !== b.length 提前返回,再使用 toSorted() 和 some 逐项比较。
min-max-loop(LOW):求最小值/最大值时使用循环而非排序。例如查找 updatedAt 最新的项目用单次遍历 O(n) 替代 sort 的 O(n log n)。
hoist-regexp(LOW-MEDIUM):将 RegExp 创建提升到循环外,例如定义 const PATTERN = /pattern/ 后再在 forEach 中使用。
batch-dom-css(MEDIUM):批量执行 DOM 读取与写入以避免布局抖动。示例先设置 element.style.width 与 height,再用 getBoundingClientRect() 一次性读取,避免读写交错触发多次回流。
result-type(MEDIUM):使用显式的 Result 类型表达成功与失败,如 let result = success(data),再用 isFailure(result) 判断并处理错误。
限制
提供的资料未说明该规范的具体许可方式、安装或集成命令、支持的运行环境与版本要求,以及规则的强制程度(如是否有自动检查工具),这些信息暂未提供。