這不會直接回答你的問題。 JS語言參考沒有指定如何存儲數據,所以這取決於執行實現的組,在這種情況下,WebKit團隊,我沒有看到任何公開的。我絕對沒有看到任何關於Mobile Safari的WebKit實現。
我想說的是,桌面上的東西實際上可能不會很好,只是桌面的速度和大小掩蓋了移動設備上出現的「問題」。在iOS上,如果我沒有記錯的話,瀏覽器實例的上限爲10MB,但實際上,您開始在大約6或7MB的範圍內打牆。在個人電腦上,當你用完RAM時,電腦只會將未使用的內存轉存到磁盤中。在iOS上,資源會停止加載(如圖像)或瀏覽器剛剛退出(這可能是您正在經歷的)。
如果你有一臺Mac,你可以在Safari上窺探它,看看它是如何使用名爲「Instruments」的工具(它是iOS SDK的一部分)。如果您沒有Mac或不想下載SDK,只需打開一個乾淨的Safari實例,打開Windows的任務管理器或Mac的活動監視器,並觀察加載Web應用程序時內存使用情況的變化。
保持在6MB窗口內很煩人。最重要的是儘量避免創建新的圖像。例如,這種模式是在iPhone上的一個巨大的問題:
function placeImage(imagename,targetelement) {
var image = new Image();
image.src = imagename;
targetelement.appendChild(image);
}
在這種情況下,即使你從DOM中刪除圖像,即使image
是內placeImage
作用域,它會永遠,永遠得到釋放這個應用程序崩潰瀏覽器只是時間問題。如果是這種情況,請考慮一次需要顯示多少圖像,僅爲這些元素創建圖像對象並回收它們(只要您想要新圖像就重置src
)。
另外,我發現JavaScript的應用程序堆棧比桌面瀏覽器小得多,所以如果你有很多遞歸,你會在iOS上看到更快的問題。發現這個問題的方法是在Safari中打開開發工具,並使用分析器查看哪些函數被調用最多。
我不記得這是否是確切的技術,揭示數字如何在webkit內部以不同方式存儲,但我認爲是這樣。基本上,你對一百萬個隨機數進行排序,首先用一個浮點數,然後(如果你取消註釋)一個整數,然後是一個大整數。我對輸入語言不太熟悉,所以我不確定這個證明是什麼,除了內部數字根據最小的可能表示方式被區別對待。
arrTarget = [];
for (var i = 0; i < 1000000; i++) {
arrTarget.push(Math.random() * 16000000);
// arrTarget.push(Math.floor(Math.random() * 16000000));
// arrTarget.push(Math.floor(Math.random() * 1600000000000));
}
// Time how long it takes to sort the array:
var time = new Date().getTime();
arrTarget.sort();
console.log(new Date().getTime() - time);
請定義...「爆炸」。這就像獲取用戶錯誤報告,說:「有錯誤...」 – jondavidjohn
@jondavidjohn:或錯誤指示燈... – drudge
它真的炸燬了嗎?哇!你一定要提交一份錯誤報告。或者..更好地描述你的錯誤。好多了。 –