2009-12-24 176 views
1

我想使用AJAX將htmlfile加載到<div>然後我需要在此上運行jsMath。我用innerHTML完成的所有事情都是一兩段,也許是一張表格和/或圖片。沒什麼太花哨。innerHTML大小限制

當我將innerHTML設置爲外部25k文件時,可能會發生什麼樣的潛在問題,以及各種複雜的css格式? (感謝jsMath)我想不出任何其他方法做這件事,但需要知道是否有任何限制。

在此先感謝。

--Dave

+1

提醒一下,你應該接受你的問題的答案。這是SO方式。 – 2010-01-13 02:36:28

回答

1

沒有什麼可以阻止您在技術上做到這一點。最大的問題將是頁面加載時間。確保包含某種數據正在加載的指示,或者看起來沒有任何事情發生。

1

在我目前正在使用的應用程序中,我沒有任何問題在任何瀏覽器將innerHTML設置爲30k或更多的字符串。 (不知道限制是什麼)

0

這種類型的東西的唯一限制是純粹的帶寬和處理器相關。您應該確保您的ajax請求沒有設置較低的超時時間。您還應該測試一些速度較低的計算機以查看是否存在內存問題。一些舊的瀏覽器可能對內存中的大型對象非常寬容。

0

您可能想要使用類似dynatrace ajaxspeed tracer這樣的工具來分析此問題,以瞭解如何將innerHTML設置爲真正巨大的值以影響性能。您可能想要將其與另一種方法比較,如將新內容放入iframe中,或對內容進行分頁。

+0

我沒有想到本身我使用AJAX來決定第6章審查,第7章審查等,但我沒有想過將每個審查分裂。謝謝 – 2009-12-24 04:41:57

0

您的限制很可能是從您的Web服務器設置的下載限制。通常是幾MB。幾個Web框架允許增加這個大小,但你不能這樣做,因爲這意味着增加緩衝區大小,這不是一件好事。

1

我不知道任何瀏覽器特定的大小限制,但是如果您分配的字符串長度超過65536,Chrome會將其分割成多個elem.childNodes,因此您可能必須遍歷這些節點並將它們連接起來。

在Chrome開發工具中運行以下內容。它構造一個160 k字符串,但theDivElement.childNodes[0]被剪輯爲65536個字符。

var longString = '1234567890'; 
for (var i = 0; i < 14; ++i) { 
    longString = longString + longString; 
} 
console.log('The length of our long string: ' + longString.length); 
var elem = document.createElement('div'); 
elem.innerHTML = longString; 
var innerHtmlValue = elem.childNodes[0].nodeValue; 
console.log('The length as innerHTML-childNodes[0]: ' + innerHtmlValue.length); 
console.log('Num child nodes: ' + elem.childNodes.length); 

結果:(Chrome版本39.0.2171.95(64位),Linux Mint的17)

The length of our long string: 163840 
The length as innerHTML-childNodes[0]: 65536 
Num child nodes: 3 

,但在Firefox innerHTML內容不分割成許多節點:(FF版本34.0 ,Linux Mint的17)

"The length of our long string: 163840" 
"The length as innerHTML-childNodes[0]: 163840" 
"Num child nodes: 1" 

所以,你需要考慮到不同的瀏覽器處理childNodes不同,或許遍歷所有子節點並連接。 (我注意到這一點,因爲我試圖用innerHTML到反轉義一> 100k的HTML編碼的字符串。)

事實上,在Firefox我可以通過循環到上述i < 24創建長度167 772 160的innerHTML-childNodes[0]。但是在這個長度以上的地方,有一個InternalError: allocation size overflow錯誤。