我想使用AJAX將htmlfile加載到<div>
然後我需要在此上運行jsMath。我用innerHTML完成的所有事情都是一兩段,也許是一張表格和/或圖片。沒什麼太花哨。innerHTML大小限制
當我將innerHTML設置爲外部25k文件時,可能會發生什麼樣的潛在問題,以及各種複雜的css格式? (感謝jsMath)我想不出任何其他方法做這件事,但需要知道是否有任何限制。
在此先感謝。
--Dave
我想使用AJAX將htmlfile加載到<div>
然後我需要在此上運行jsMath。我用innerHTML完成的所有事情都是一兩段,也許是一張表格和/或圖片。沒什麼太花哨。innerHTML大小限制
當我將innerHTML設置爲外部25k文件時,可能會發生什麼樣的潛在問題,以及各種複雜的css格式? (感謝jsMath)我想不出任何其他方法做這件事,但需要知道是否有任何限制。
在此先感謝。
--Dave
沒有什麼可以阻止您在技術上做到這一點。最大的問題將是頁面加載時間。確保包含某種數據正在加載的指示,或者看起來沒有任何事情發生。
在我目前正在使用的應用程序中,我沒有任何問題在任何瀏覽器將innerHTML設置爲30k或更多的字符串。 (不知道限制是什麼)
這種類型的東西的唯一限制是純粹的帶寬和處理器相關。您應該確保您的ajax請求沒有設置較低的超時時間。您還應該測試一些速度較低的計算機以查看是否存在內存問題。一些舊的瀏覽器可能對內存中的大型對象非常寬容。
您可能想要使用類似dynatrace ajax或speed tracer這樣的工具來分析此問題,以瞭解如何將innerHTML設置爲真正巨大的值以影響性能。您可能想要將其與另一種方法比較,如將新內容放入iframe中,或對內容進行分頁。
我沒有想到本身我使用AJAX來決定第6章審查,第7章審查等,但我沒有想過將每個審查分裂。謝謝 – 2009-12-24 04:41:57
您的限制很可能是從您的Web服務器設置的下載限制。通常是幾MB。幾個Web框架允許增加這個大小,但你不能這樣做,因爲這意味着增加緩衝區大小,這不是一件好事。
我不知道任何瀏覽器特定的大小限制,但是如果您分配的字符串長度超過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
錯誤。
提醒一下,你應該接受你的問題的答案。這是SO方式。 – 2010-01-13 02:36:28