簡單的問題:在較深的物體上使用淺物體是否有優點? 當我編寫代碼時,我傾向於使用深度對象,以便易於理解和分類。但我想知道這個習慣是否讓我的代碼變慢。JavaScript中的對象很慢嗎?如果是這樣的話多少
我曾做過一個試驗,但我不知道如果我做正確。
//building necessary objects
var a = {};
var b;
b = a;
for (var i = 0; i < 100; i++) {
b["a"] = {};
b = b["a"];
}
var c = {};
//objects used
//a.a.a. ..(101 "a"s).. .a === {}
//c === {}
//1st test: shallow
var d;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
d = c;
d = null;
}
var end = performance.now();
console.log('Shallow: ' + (end - start));
//2nd test: deeper
var e;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
e = a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a;
e = null;
}
var end = performance.now();
console.log('Deeper: ' + (end - start));
結果(MS):
shallow 3229 3304 3246 3253 3277
deep 3375 3343 3247 3193 3248
的測試時間爲深對象不慢,但有時甚至比淺的速度更快。 儘管如此,我還是沒有足夠的信心得出結論,他們的速度是一樣的。 他們兩個之間有什麼區別嗎?
當然,你是在開玩笑吧?在3秒鐘內完成10億次操作,而你正在嘀咕大約100個操作數?即使是一個人爲的最壞情況?這是過早的優化措施!實施和系統中的差異將大大超過兩者之間性能的小變化。 – RobG
這種類型的速度測試從來沒有真正有用。您測試了一些永遠不會以真實代碼中的方式使用的人工代碼片段,因此js引擎的優化器在此示例中的表現完全不同,然後在真實代碼上表現得完全不同。 –
嵌套的訪問將是一般較慢,但差異太小,無法真正重要的屬性訪問是一個快速'O(1)'操作。注意計算機上的其他因素和過程可能會導致這些較小的時間差異。 –