次のJavascript関数(1)について考えてみます。
function setData(domElement) {
domElement.myDataProperty = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
};
この関数について私が気に入らないのは、関数が呼び出されるたびにまったく同じオブジェクトが作成されることです。オブジェクトは変更されないので、一度だけ作成したいと思います。したがって、次の調整を行うことができます(2)。
var dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
function setData(domElement) {
domElement.myDataProperty = dataObject;
};
これで、スクリプトがロードされてに格納されるときに、オブジェクトが1回作成されdataObject
ます。setData
しかし、それがたまにしか呼び出されないと仮定しましょう。ほとんどの場合、スクリプトがロードされると、関数は使用されません。その場合のこの関数について私が気に入らないのは、オブジェクトが常に作成されてメモリに保持されることです。これには、オブジェクトが使用されない場合も含まれます。私はあなたが理想的なバランスをとるためにこのようなことをすることができると思いました(3):
var dataObject;
function setData(domElement) {
if (!dataObject) {
dataObject = {
'suppose': 'this',
'object': 'is',
'static': 'and',
'pretty': 'big'
};
}
domElement.myDataProperty = dataObject;
};
それは理にかなっていますか?インタプリタがいつオブジェクトを作成するかによって決まると思います。それは本当に条件を通過するまで待つの!dataObject
でしょうか、それとも関数に入り、賢くなり、事前に構築することを決定するのでしょうか?おそらく、Javascriptエンジンが異なれば、これに関してポリシーも異なりますか?
そしてもちろん、これらの最適化が実際に重要になるかどうかという問題があります。明らかに、これはオブジェクトのサイズ、エンジンの速度、利用可能なリソースの量などの要因に依存します。しかし、一般的に、どちらがより重要な最適化であると言えますか:(1)から(2)または(2)から(3)へ?