提升代码执行速度的关键是让常用属性落在实例自身以缩短查找路径。需在构造函数中直接赋值高频属性,用object.assign或展开语法合并默认配置,慎用深层继承而改用组合模式,纯字典对象可用object.create(null)切断原型链。

提升代码执行速度,关键不是让对象“看起来扁平”,而是让属性访问走最短的查找路径——即尽量让常用属性落在实例自身,跳过原型链向上遍历。
把高频属性直接挂到实例上
每次访问 this.name 或 this.config.timeout 时,如果它们只定义在原型或父类中,引擎就得顺着 __proto__ 一层层往上找。构造函数里直接赋值,等于提前“固化”位置:
- 不推荐:仅在基类原型定义 getApiUrl(),子类反复调用
- 推荐:在子类构造函数中写 this.apiUrl = this.getApiUrl();
- 对配置类特别有效,比如初始化时就解构 { timeout, baseUrl } = options; 并赋给 this
用 Object.assign 或展开语法“打平”默认值
避免每次读取都去原型上合并默认配置。把默认值和传入数据一次性合并到当前对象:
- Object.assign(this, DefaultConfig, options);
- 或创建新对象:{ ...DefaultConfig, ...options }
- 适合表单数据、DTO、主题配置等结构固定、读多写少的场景
慎用深层继承,改用组合模式
每多一层 extends 或 Object.create(parent),就多一次原型跳转。常见瓶颈如:
- UI组件链:Button ← IconButton ← BaseButton ← Component ← EventEmitter
- 状态类链:Store ← ReduxStore ← ObservableStore ← BaseStore
- 优化方式:把 emitter、validator、formatter 等能力抽成独立对象,作为实例属性持有,而非靠原型继承
纯字典对象用 Object.create(null)
如果对象只存键值(如路由参数、缓存映射、临时聚合数据),不需要 toString、hasOwnProperty 等原型方法,可彻底切断原型链:
- const params = Object.create(null); params.id = 123;
- 此时 params.id 的读取不再触发任何原型查找
- 在高频循环(如渲染千条列表、日志字段提取)中,性能提升约 10%–20%
不复杂但容易忽略:真正拖慢速度的往往不是嵌套本身,而是属性不在实例上、又不得不每次都向上翻好几层找。











