就像是一棵樹有很多果實(shí)一樣,QWrap也有很多apps,本文講解種子應(yīng)用?!胺N子”是沿用YUI3的說法,種子應(yīng)用是解決模塊加載問題的應(yīng)用,包括:模塊預(yù)加載、異步按需加載、模塊應(yīng)用。

apps果實(shí)篇之:種子
或許有些同學(xué)對(duì)異步加載模塊不大熟悉,沒關(guān)系,我們先感性的看一下這段代碼
QW應(yīng)用之一:seed_youa div1-----時(shí)間 div2-----時(shí)間
1. 如果用戶瀏覽此網(wǎng)頁時(shí),只加載了一個(gè)體積很小的seed_youa.combo.js這個(gè)js(其實(shí)就是seed_youa.js(http://dev.qwrap.com/resource/js/apps/seed_youa.js)),這個(gè)js經(jīng)yui壓縮后的大小為4K。
2. 當(dāng)用戶點(diǎn)擊按鈕時(shí),按鈕對(duì)應(yīng)的js用到j(luò)Query與YouaCore,點(diǎn)擊后才會(huì)去加載那兩個(gè)jQuery與YouaCore對(duì)應(yīng)的js,之后才有運(yùn)行效果。
3. 第二次點(diǎn)擊按鈕,由于前面已經(jīng)加載過js,所以這次會(huì)直接運(yùn)行按鈕事件。
分析一下以上三步,分兩種情況。
A. 對(duì)于只進(jìn)行了第一步操作的用戶,他們用seed_youa.js替代了jQuery與YouaCore兩個(gè)js的流量(這是好處甲);
B. 對(duì)于進(jìn)行過第二步操作的用戶,由于以上流量的節(jié)約,會(huì)讓用戶提前能夠點(diǎn)擊按鈕(這是好處乙),點(diǎn)擊后異步加載需要的js,加載完后事件才運(yùn)行,即點(diǎn)擊與運(yùn)行存在一個(gè)時(shí)間差(這是壞處甲),并且三個(gè)js都用到了,相對(duì)于傳統(tǒng)寫法,http多了一個(gè)seed_youa.combo.js(這是壞處乙)。
另外,對(duì)于頁面程序員來說,他在寫按鈕事件時(shí),只需要知道自己的這段js用到了哪些模塊,而不用關(guān)心這些模塊是否已經(jīng)加載(這是好處丙),不過,他引用模塊的方式有了一些變化(少鍵入html代碼,多鍵入js代碼)。
好處甲、好處乙、好處丙、壞處甲、壞處乙,還有些沒有分析到的好處與壞處,反正有利有弊。
那么,在什么情況下利大于弊、什么情況下弊大于利,而我們?cè)撊绾闻d利除弊?
如果這個(gè)頁面的用戶100%不會(huì)點(diǎn)擊按鈕,則幾乎沒壞處,只有好處甲、好處丙。
如果頁面100%的用戶會(huì)點(diǎn)擊按鈕,則需要權(quán)衡再權(quán)衡利弊再想辦法。
好的,我們先暫且擱置這些細(xì)節(jié),因?yàn)橐陨蟽?nèi)容已足夠讓同學(xué)們對(duì)“異步按需加載”有了感性的認(rèn)識(shí)。我們把提供這種異步按需加載的js叫種子(seed)。
我們看一下seed_youa.js,它是一個(gè)組合js(即前面一篇文章所說的B類apps:開發(fā)時(shí)可以是多個(gè)文件,但上線時(shí)會(huì)先合并后上線。)
它由三個(gè)js組成:
- document.write('