1,前言

我們開發(fā)了一個(gè)專題系統(tǒng),生成了JSON的數(shù)據(jù)格式,采用JQuery動(dòng)態(tài)插入HTML中,在前期的使用中,沒有太大的問題,效率還可以接受,但是最近可能由于網(wǎng)絡(luò)加之頁(yè)面設(shè)計(jì)問題,我們的JS效率比較差,長(zhǎng)達(dá)10多秒中,實(shí)在難以忍受,到底是什么原因呢?


2,分析

我觀察了一下JS腳本,應(yīng)該說沒有太費(fèi)時(shí)間的操作,采用ID的元素選擇法,應(yīng)該是最快的,雖然有個(gè)類選擇器,但是元素很少,一般在2個(gè)左右,不至于影響效率,我注釋一下,發(fā)現(xiàn)確實(shí)不是這個(gè)問題。


后來(lái)分析,可能是HTML外面套的INDEX.JSP的問題,加上頭尾后,效率很慢,所以我們分析思路:

        2.1 把JSP分出top,bottom.jsp,采用jquery load()事件加入至頁(yè)面,確實(shí)效率有所提升,但是在FF,和CHROME下不太正常,而調(diào)整后,都正常顯示,但是效率又下降了。

        2.2 采用IFrame方式:把頁(yè)面的頭和尾部采用Iframe嵌入,去掉邊框,固定大小,這個(gè)確實(shí)效率提高了,但是ifram里的跳轉(zhuǎn)是個(gè)大問題,效果不是很好;

3,根本原因

我們吧注意力放在了JS上面,突然想到,是不是$(document).ready()方法的原因??

我們?nèi)サ舸朔椒ǎ優(yōu)楹瘮?shù),同時(shí)在頁(yè)面中用setTimeout()延時(shí)10毫秒觸發(fā),發(fā)現(xiàn),正常了;

我網(wǎng)上查了一下read方法的說明:

當(dāng) DOM(文檔對(duì)象模型) 已經(jīng)加載,并且頁(yè)面(包括圖像)已經(jīng)完全呈現(xiàn)時(shí),會(huì)發(fā)生 ready 事件。  
由于該事件在文檔就緒后發(fā)生,因此把所有其他的 jQuery 事件和函數(shù)置于該事件中是非常好的做法。正如上面的例子中那樣。  
ready() 函數(shù)規(guī)定當(dāng) ready 事件發(fā)生時(shí)執(zhí)行的代碼。  
ready() 函數(shù)僅能用于當(dāng)前文檔,因此無(wú)需選擇器。