我正在使用Javascript(與Mootools)使用HTML「模板」元素動態構建大頁面,複製相同模板多次以填充頁面。在每個模板中,我使用需要替換的字符串關鍵字來創建唯一的ID。但是,我遇到了嚴重的性能問題,因爲它需要幾秒鐘來執行所有這些替換,特別是在IE中。代碼如下所示:有效替換Javascript中的HTML塊中的字符串
var fieldTemplate = $$('.fieldTemplate')[0];
var fieldTr = fieldTemplate.clone(true, true);
fieldTr.removeClass('fieldTemplate');
replaceIdsHelper(fieldTr, ':FIELD_NODE_ID:', fieldNodeId);
parentTable.grab(fieldTr);
replaceIdsHelper()是根據IE9的分析器的問題方法。我試過這個方法的兩種實現方式:
// Retrieve the entire HTML body of the element, replace the string and set the HTML back.
var html = rootElem.get('html').replace(new RegExp(replaceStr, 'g'), id);
rootElem.set('html', html);
和
// Load the child elements and replace just their IDs selectively
rootElem.getElements('*').each(function(elem) {
var elemId = elem.get('id');
if (elemId != null) elemId = elemId.replace(replaceStr, id);
elem.set('id', elemId)
});
然而,這兩種方法都極爲緩慢給了我多少次這樣的方法被調用(約200 ...)。其他一切運行良好,它只是取代這些似乎是主要性能瓶頸的ID。有誰知道是否有辦法有效地做到這一點,或者它可能運行如此緩慢的原因?這些元素開始隱藏,並且不會被DOM抓取,直到它們被創建之後纔會發生重繪。
順便說一下,我這樣構建頁面的原因是爲了保持代碼乾淨,因爲我們需要能夠在加載後動態地創建新元素。從服務器端執行此操作會使事情變得更加複雜。
謝謝,這是很多很好的建議。我絕對可以通過這種方式加快速度。 我認爲我在JS中構建整個頁面的方法過於客戶端密集型,但我們必須支持IE7,用戶也可能會使計算機速度變慢......所以我要做的是通過製作很少有JSP標籤用起始數據填充頁面,然後使用這些相同的標籤創建我可以爲新條目複製的模板。 – 2012-02-16 22:59:02