Object.assignのパフォーマンス
掲題の通り、Object.assignのパフォーマンスについて計測してみました。
Object.assignとは
ECMAScript2015の仕様書
ECMAScript 2015 Language Specification – ECMA-262 6th Edition
mixinメソッド。
ソースオブジェクトから列挙可能かつ直接所有のプロパティをターゲットオブジェクトにコピーします。
Object.assign(target, ...sources)
target
ターゲットオブジェクト
sources
ソースオブジェクト
戻り値
ターゲットオブジェクト
準備
パフォーマンス計測のときに使っているコードに記述していきます。
コンストラクタで使ったケースを想定します。
- ES6のclass形式で普通にconstructorを定義する
- Object.assignを使ってconstructor自身を示すthisオブジェクトとマージする。
'use strict'; const suite = require('./suite'); class Person1 { constructor(name, age, gender) { this.name = name; this.age = age; this.gender = gender; } } class Person2 { constructor(name, age, gender) { Object.assign(this, {name, age, gender}); } } suite.run([ { description: 'Contructor#native', exec() { new Person1('Person', 20, '男性'); } }, { description: 'Constructor#assign', exec() { new Person2('Person', 20, '男性'); } } ]);
結果
Contructor#native x 86,560,002 ops/sec ±1.72% (82 runs sampled) Constructor#assign x 733,613 ops/sec ±1.06% (83 runs sampled) Fastest is Contructor#native
何回かやってみましたが結果は上記とほぼ変わらずだったので、
本当にパフォーマンスが求められるときは前者で一つ一つプロパティ代入を書く。
管理画面など、そこまで求められない場合はObject.assignを使っても良さそうです。