8

まず、簡単なjsperfテストケースを作成して、明らかな:構文
Object.create(null)を使用してオブジェクトを作成するよりもはるかに遅いことを示しました。http://jsperf.com/js-object-creation-null-proto{}

しかし、この事実を考えると、前者のケースは、最適化とパフォーマンスに関して時々良い代替案になるでしょうか?言い換えれば、最も軽量なjsオブジェクトを操作することでパフォーマンスを十分に向上させることができるので、場合によってはそれを使用することが合理的な選択になりました。

たとえば、オブジェクトプロパティに頻繁にアクセスする場合や、forinループを多用する場合を指します。

Objectこの方法は、標準のプロトタイプによってもたらされる標準のプロパティを所有していないこれらのオブジェクトを人々が手に入れる可能性があるライブラリで使用するにはリスクが高すぎますか?

また、最も軽量なjsオブジェクトを作成する別の(より迅速な)方法を知っていますか?

PS:簡単なテストケースを作成して、aを使用してObject.create(null)プロパティにアクセスする方が。よりも少し速い場合を示しました{}
http://jsperf.com/js-object-creation-and-accessing-properties

4

1 に答える 1

8

Object.create(null)一般的に不要で、ブラウザの互換性と明確さを犠牲にする価値のないオブジェクトを作成すると思います。{}基本的に実行している構文でオブジェクトをObject.create(Object.prototype)作成すると、のプロパティにアクセスできるオブジェクトが作成されObject.prototypeます。これは、オブジェクトのようなメソッドtoStringhasOwnProperty直接アクセスできることを意味しますが、必要に応じてそれらをオーバーライドすることもできます。ただし、可能であればこれは避ける必要があります。パフォーマンスに関しては、オブジェクトに2つのプロパティしかないため、違いは非常に小さくなります(jsperfで示されているように)。オブジェクトに数百または数千のプロパティがある場合、違いはほとんどありません。

結論として、コードのパフォーマンスを向上させたくない場合は、常に明確さを追求し、コードの高レベルのアルゴリズム設計を改善するように努める必要があります(まだ行っていないわけではありません)。絶対に必要な場合にのみ、マイクロ最適化について心配します。

于 2014-01-18T20:04:43.660 に答える