FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaScript]クラスのメソッドは prototype に設定するべきか?

オブジェクト指向プログラム言語としてのJavaScript15.prototypeプロパティ に、
「prototypeを使ってメソッドを定義すれば、インスタンスごとにメソッドを持たないためメモリ効率が良い」
といったことが書かれてあった。

1998年に書かれたかなり古いドキュメントだが、気になったので
「prototypeを使うことでどのぐらいの違いが出るか」
を計測してみた。

Firefox 3.6で計測したところ、劇的な違いが出た。
prototypeを使ったほうがメモリやCPUの負荷は小さいし処理速度も速い。
「インスタンスを100個生成し、それぞれ100回メソッド実行」の場合は、prototypeを使うことで処理速度が約1/10になった。
「インスタンスを500個生成し、それぞれ500回メソッド実行」の場合は、処理速度が約1/25になった。

これはすごい。prototypeを使うべきだ。
と思ったのだが、Internet Explorer と Google Chromeで計測してみたところ、ほとんど差が無かった。
prototypeを使った方が遅くなる場合もある。
おそらくブラウザ内の処理はprototypeを使おうが使うまいが同じなのだろう。

そんなわけで、自分としては「10個以上インスタンスを生成する場合はprototypeを使うかな」という結論に至った。

一応計測結果を載せておく。平均を取るほどの値ではないと思うので、代表的な数値を抽出した。
<単位:ミリ秒>
 Firefox 3.6   IE 8.0   Chrome 8.0 
 インスタンスを100個生成し、
 それぞれ100回メソッド実行
prototype使用2200
 prototype使用せず 24200
インスタンスを500個生成し、
それぞれ500回メソッド実行
prototype使用244406
 prototype使用せず 5604206
Google Chromeが速すぎる。デベロッパーツールで確認してみたが、ちゃんとインスタンスを生成してメソッドも実行している。

計測するために作成したソースコードもアップしておく。
prototest.html

自分のprototypeの理解は曖昧だったが、「オブジェクトにプロパティが存在しない場合は、prototypeのプロパティを探す」という説明を見て、何となくわかった気がした。
スポンサーサイト

コメント

コメントの投稿

非公開コメント

プロフィール

himax64

Author: 南西
30代後半の無職です。
就活もせずダラダラ生きてます。
作ったもの

最新記事
人気記事
検索フォーム
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QRコード
カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。