日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
前端基礎(chǔ)框架的思考和嘗試

近日我一直在思考類似的關(guān)于js模塊和文件管理的方式。正好團(tuán)隊(duì)里也正有這樣的需求,于是,經(jīng)歷了好幾天的苦思冥想,稍微做了些嘗試。下面會(huì)細(xì)細(xì)道來(lái)。

目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、山亭網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

【js模塊和文件的管理】

基于這個(gè)title,前提是我們已經(jīng)明確了我們有了一個(gè)組件或者js methods 的lib,我們暫且把它叫做庫(kù),庫(kù)里面存儲(chǔ)了很多我們常用的東西,比如js插件,封裝好的methods 
以及其他的一些lib組件。為了更好的管理我們這些顆?;膉s文件,我們的庫(kù)通常都是呈顆?;摹;谶@種情況,我們可以說(shuō)一個(gè)js文件就對(duì)應(yīng)一個(gè)模塊module,他有他相對(duì)獨(dú)立的功能。這種管理模式是目前大多數(shù)主流框架的文件和模塊管理模式,如YUI,EXT等,這樣的好處是,可以按需調(diào)用。并且調(diào)用的模塊一目了然。但是這樣也有一個(gè)弊端,就是如果一個(gè)頁(yè)面需要多個(gè)模塊的支持,那么自然就需要加載對(duì)應(yīng)的多個(gè)模塊的js文件,http連接數(shù)自然會(huì)增加。這對(duì)網(wǎng)站的性能來(lái)說(shuō)當(dāng)然是不好的。所以,YUI等成熟的框架自然不會(huì)遺漏這個(gè)問(wèn)題,他們也有一套自己注冊(cè)和管理模塊的機(jī)制(可以參考YUI的register和loader模塊)

當(dāng)然,jQuery憑借他易用的api風(fēng)格和強(qiáng)大的選擇器也贏得了很大的市場(chǎng),但是我們通常喜歡把jQuery叫做一個(gè)方法庫(kù),而不是框架的原因是它相對(duì)于其他框架而言的話,對(duì)模塊和文件的管理就稍遜一籌。雖然他后來(lái)的新版本也提供了自己的模塊管理機(jī)制...

但是,這并不存在誰(shuí)對(duì)誰(shuí)錯(cuò),誰(shuí)好誰(shuí)壞的問(wèn)題,只是各自的側(cè)重點(diǎn)不同而已。建站者選擇誰(shuí)只是看誰(shuí)更適合自己而已。有些企業(yè)覺(jué)得YUI的架構(gòu)模式更適合自己,于是選擇了跟他相似的模式,于是有了百度的Tangram,淘寶的kissy,有的企業(yè)覺(jué)得jQuery更適合現(xiàn)在的自己,于是選擇的jQuery,比如豆瓣,于是也有了克軍的輕量級(jí)前端框架Do。我相信每個(gè)團(tuán)隊(duì)能夠出一套自己的框架或者庫(kù)都是不容易的,都是需要時(shí)間積累的,所以我從不輕易地評(píng)論別人的成果。

【主流的思路】

由于不是簡(jiǎn)單的把頁(yè)面上加載的 

  •          
  •      
  •     ... 
  •  
  •  具體的使用方式可以如下:

     
     
     
     
    1. JS.add('a', {  
    2.     url : 'http://www.cnblogs.com/1293183133/js/***.js',  
    3.     require : ['b','c']  
    4. })  
    5. JS.add('b', {  
    6.     url : 'http://www.cnblogs.com/1293183133/js/***.js' 
    7. })  
    8. JS.add('c', {  
    9.     url : 'http://www.cnblogs.com/1293183133/js/***.js' 
    10. })  
    11.  
    12. JS.use('a', function () {  
    13.     //you code  
    14. })  

     如果你覺(jué)得這樣的調(diào)用方式太麻煩,可以寫(xiě)成方法鏈?zhǔn)降恼{(diào)用: add的***個(gè)參數(shù)是自定義的模塊名,第二個(gè)參數(shù)可以是對(duì)象{},里面包含,對(duì)應(yīng)模塊的js文件的url,和此模塊的依賴模塊,如果沒(méi)有就不寫(xiě)。
    第二個(gè)參數(shù)也可以不是對(duì)象,比如上面例子里后面幾個(gè)add,就直接是***個(gè)為模塊名,第二個(gè)為對(duì)應(yīng)模塊的js文件url,第三個(gè)參數(shù)可選,為所依賴的模塊名,是一個(gè)Array.

    use 的***個(gè)參數(shù)為調(diào)用模塊名,第二個(gè)參數(shù)為回調(diào)函數(shù)。 

    【關(guān)注的幾個(gè)問(wèn)題】
    1。模塊會(huì)不會(huì)重復(fù)加載?
    -- 不會(huì),當(dāng)判斷此模塊之前已加載過(guò),就會(huì)直接執(zhí)行回調(diào)。不會(huì)重復(fù)加載。

    2。add的模塊有重名時(shí)怎么處理?
    --如果add的模塊有重名,理論上是不允許,如果發(fā)現(xiàn),會(huì)報(bào)錯(cuò)提醒。

    3。add模塊的時(shí)候需不需要考慮add的順序?
    --不需要,會(huì)自動(dòng)甄別所依賴的模塊,按依賴優(yōu)先級(jí)載入。如果不放心,還提供了一個(gè)log日志功能,監(jiān)測(cè)是否按正確順序載入。只需在use方法調(diào)用的時(shí)候,寫(xiě)上第三個(gè)參數(shù),如:

     
     
     
     
     
  •  
  •  第三個(gè)參數(shù)為所要顯示載入信息的dom元素id。結(jié)果會(huì)如下顯示:

     4。這樣的方式對(duì)性能到底有沒(méi)有好處?
    --答案,有的,下面上普通的阻塞和非阻塞方式載入jQuery源碼的對(duì)比圖:
    直接頁(yè)面上載入js的方式
     

     
     
     
     
    1.  

     

    ***一條長(zhǎng)長(zhǎng)的載入時(shí)間就是jq的載入時(shí)間,故用戶看到完整頁(yè)面的時(shí)間為整個(gè)文件全部載入完成后的時(shí)間,大概為500ms左右(這單單是一個(gè)空文檔載入jquery文件的時(shí)間)。 

    以非阻塞方式載入時(shí): 

     
     
     
     
    1.  

     

    為了保證每次載入不會(huì)從緩存中讀取,我加了個(gè)版本號(hào)?111;可以發(fā)現(xiàn),上面的藍(lán)線為用戶感知到的頁(yè)面download時(shí)間,在20ms左右,而jq文件的加載在藍(lán)線后面,所以說(shuō)這部分時(shí)間是用戶感知不到的。對(duì)用戶體驗(yàn)的提升應(yīng)該是大有幫助的。就是給服務(wù)器增加了并發(fā)連接數(shù)。

    好的,文章大概到這里,可能有人會(huì)說(shuō),基本上同樣的事情Do.js,using.js,require.js等小眾型框架已經(jīng)都有了 ,為什么要自己再寫(xiě)?恩...別人的東西始終是別人的,自己做過(guò)的東西才真正是自己的。

    我當(dāng)然不敢說(shuō)比別的大牛們考慮的更周到,效率更高,但是希望能在自己的編碼中得到一點(diǎn)提高吧。


    網(wǎng)頁(yè)名稱:前端基礎(chǔ)框架的思考和嘗試
    鏈接URL:http://www.5511xx.com/article/dhegjeo.html