欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

web網(wǎng)頁(yè)模塊化的原因是什么-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)web網(wǎng)頁(yè)模塊化的原因,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為康保等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及康保網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、做網(wǎng)站、康保網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

單個(gè)頁(yè)面中越來(lái)越多的Javascript。

在現(xiàn)代瀏覽器中你可以做越來(lái)越多的功能。

少量的全頁(yè)面刷新,以至于單個(gè)頁(yè)面中有更多的代碼。

正因?yàn)檫@些原因造成越來(lái)越多的代碼鑲嵌在瀏覽器端中。

這樣一個(gè)大的代碼倉(cāng)庫(kù)(code base)急需做出相應(yīng)的管理。正好,模塊化系統(tǒng)提供了這些功能分割你的代碼倉(cāng)庫(kù),把它們分割為一個(gè)個(gè)的模塊。

問(wèn)題

網(wǎng)站逐漸轉(zhuǎn)化為Web apps

代碼復(fù)雜度逐漸提高

組裝變的困難

開(kāi)發(fā)者想要分離的JS文件/模塊

部署時(shí)可以把代碼優(yōu)化成幾個(gè)HTTP請(qǐng)求

解決方案

前端開(kāi)發(fā)者需要這樣的解決方案:一些這類的API #include/import/require有能力加載嵌套的依賴,對(duì)開(kāi)發(fā)者來(lái)說(shuō)易于使用,并且有優(yōu)化工具在后面支持,有助于部署。

腳本載入API

首先梳理出腳本載入API。這里有幾個(gè)選擇:

Dojo: dojo.require("some.module")
LABjs: $LAB.script("some/module.js")
CommonJS: require("some/module")

所有的都映射到載入 some/path/some/module.js。理想情況下,我們可以選擇CommonJS的語(yǔ)法,因?yàn)樗芸赡軙?huì)變得更加常見(jiàn),而且我們想要重用代碼。

當(dāng)前我們也希望一些語(yǔ)法能夠載入已存在的純文本JavaScript文件,因此開(kāi)發(fā)者不用重寫所有的JavaScript來(lái)從腳本載入中獲益。

但是,我們需要一些能在瀏覽器中更好的工作的事物。CommonJS 的require()是一個(gè)同步調(diào)用,它期望能夠立即返回那個(gè)模塊。不過(guò)這在瀏覽器中工作的不是很好。

異步與同步

下面這個(gè)例子說(shuō)明了瀏覽器的基本問(wèn)題。假設(shè)我們有一個(gè)Employee對(duì)象,我們想要一個(gè)派生自Employee對(duì)象的Manager對(duì)象。獲取該例子,我們可能會(huì)用我們的腳步載入API來(lái)這樣編碼:

var Employee = require("types/Employee");function Manager () {
    this.reports = [];
}//Error if require call is asyncManager.prototype = new Employee();

如上面注釋中所示,如果require()是異步的,這段代碼不會(huì)工作。但是,在瀏覽器中同步載入腳步將會(huì)抹殺性能。那么,怎么辦?

腳本載入:XHR

使用XMLHttpRequest(XHR)載入腳本是很有吸引力的。如果使用XHR,我們就可以觸摸上面的文本,也就是可以通過(guò)正則表達(dá)式來(lái)查找require()調(diào)用,以確保我們載入了這些腳本,然后再用eval()或script元素將文本內(nèi)容傳給使用XHR載入的腳本。

使用eval()來(lái)評(píng)估模塊不太好:

開(kāi)發(fā)者已經(jīng)被告知eval()不好用。

有些環(huán)境不支持eval()。

難以調(diào)試。Firebug和WebKit的檢查器有一個(gè)//@ sourceURL= 約定,用來(lái)給被評(píng)估的文本命名,不過(guò)這個(gè)特性不是所有的瀏覽器都支持。

不同的瀏覽器評(píng)估上下文環(huán)境是不同的。IE中的execScript或許可以做到,但是同時(shí)也意味著更多的移動(dòng)部件。

使用帶文本內(nèi)容的script標(biāo)簽來(lái)設(shè)置為文件文本也不太好:調(diào)試的時(shí)候,你得到的錯(cuò)誤行號(hào)和源文件對(duì)不上號(hào)。

XHR 在跨域請(qǐng)求的時(shí)候還有問(wèn)題。一些瀏覽器現(xiàn)在有跨域XHR的支持,但并不是全部。并且 IE 決定創(chuàng)建一個(gè)不同的API對(duì)象:XDomainRequest來(lái)實(shí)現(xiàn)跨域請(qǐng)求。出現(xiàn)了更多的需要改動(dòng)的地方,更容易出錯(cuò)。特別是,你需要確定不發(fā)送任何不標(biāo)準(zhǔn)的HTTPheader或者還需要另外一個(gè)"預(yù)檢"的請(qǐng)求來(lái)保證這次跨域的請(qǐng)求是被允許的。

Dojo 通過(guò)eval()使用基于XHR的loader,但是,雖然它能用,但是一直是困擾開(kāi)發(fā)者的源頭。Dojo 有一個(gè) xdomain loader但是它需要通過(guò)使用一個(gè)函數(shù)wrapper來(lái)修改require的模塊,所以script src=""標(biāo)簽可以用來(lái)加載模塊了。還有很多邊界情況和變化的地方來(lái)給程序員增加困難。如果我們創(chuàng)建一個(gè)新的腳本加載器,我們可以做的更好。

腳本載入:Web Workers

web worker可能是另一個(gè)加載腳本的方法,但是:它的跨平臺(tái)性不好

它是一個(gè)消息傳遞API,并且該腳本可能要與DOM交互,它只是使用worker獲取腳本的文本,然后將文本回傳給主窗口,再用eval/script來(lái)執(zhí)行腳本。這種方法帶有上面提到的XHR的全部問(wèn)題。

腳本載入:document.write()

document.write()可以用來(lái)載入腳本,它可以從其他的域載入腳本并且映射了瀏覽器通常是如何使用腳本的,因此它可以用來(lái)進(jìn)行簡(jiǎn)單的調(diào)試。但是,在異步VS同步的例子中,我們不能直接執(zhí)行腳本。理想情況下,在執(zhí)行腳本前我們能夠通過(guò)require()知道相關(guān)依賴項(xiàng),并且確保這些依賴項(xiàng)被首先載入。但是我們不能在腳本執(zhí)行前訪問(wèn)它。而且,document.write()在頁(yè)面載入后就不工作了。對(duì)于你的網(wǎng)站,一個(gè)好的方法是在用戶需要進(jìn)行下一步操作時(shí)來(lái)載入腳本。最后,通過(guò)document.write()載入腳本或阻塞頁(yè)面的渲染。要讓你的網(wǎng)站有最佳表現(xiàn),這個(gè)方法是不可取的。

腳本載入:head.appendChild(script)§

我們可以在需要時(shí)創(chuàng)建腳本并將它們添加到頭部:

var head = document.getElementsByTagName('head')[0],
    script = document.createElement('script');
 
script.src = url;
head.appendChild(script);

上面的腳本片段多了一點(diǎn)東西,不過(guò)那正是基本的思想。這種方法比document.write要好,因?yàn)樗粫?huì)阻塞頁(yè)面的渲染并且在頁(yè)面載入后仍能工作。但是,它仍然有同步VS異步例子的問(wèn)題:理想情況下,在執(zhí)行腳本前我們能夠通過(guò)require()知道相關(guān)依賴項(xiàng),并且確保這些依賴項(xiàng)被首先載入。

函數(shù)封裝

在執(zhí)行我們的腳本前,我們需要知道相關(guān)依賴項(xiàng)并確保已經(jīng)將其載入。做這件事的最好方法是通過(guò)函數(shù)封裝來(lái)構(gòu)造我們的模塊載入API。像這樣:

define(    //The name of this module
    "types/Manager",    //The array of dependencies
    ["types/Employee"],    //The function to execute when all dependencies have loaded. The
    //arguments to this function are the array of dependencies mentioned
    //above.
    function (Employee) {
        function Manager () {
            this.reports = [];
        }        //This will now work
        Manager.prototype = new Employee();        
        //return the Manager constructor function so it can be used by
        //other modules.
        return Manager;
    }
);

這是ReguireJS的句法。如果你想載入沒(méi)有定義成模塊的純文本的JavaScript的話,有一種簡(jiǎn)單的句法:

require(["some/script.js"], function() {
    //This function is called after some/script.js has loaded.
});

選擇這種句法是因?yàn)?,它足夠?jiǎn)潔并且允許載入者使用head.appendChild(script)載入類型。出于在瀏覽器中良好工作的需要,它有不同于普通的CommonJS句法。有建議說(shuō)普通的CommonJS句法可以使用head.appendChild(script)的載入類型,如果服務(wù)器進(jìn)程有封裝的函數(shù)可以將模塊轉(zhuǎn)換成傳輸格式的話。

我相信不強(qiáng)制使用一個(gè)運(yùn)行時(shí)服務(wù)器進(jìn)程來(lái)轉(zhuǎn)換代碼是很重要的事:

一是調(diào)試變的很怪異,因?yàn)榉?wù)器在注入封裝函數(shù)時(shí)會(huì)導(dǎo)致源文件的行號(hào)關(guān)閉。

二是需要做更多的工作。前端開(kāi)發(fā)應(yīng)該盡可能的使用靜態(tài)文件。

上述就是小編為大家分享的web網(wǎng)頁(yè)模塊化的原因,如果您也有類似的疑惑,不妨參照上述分析內(nèi)容進(jìn)行理解。如果想了解更多相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享名稱:web網(wǎng)頁(yè)模塊化的原因是什么-創(chuàng)新互聯(lián)
分享路徑:http://aaarwkj.com/article16/cojhgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
一区二区三区在线观看精品| 日本午夜专区一区二区| 国产精品推荐在线观看| 亚洲综合日韩欧美一区二区三区 | av资源中文字幕在线天堂| 久久九特黄的免费大片| 免费成人自拍偷拍视频| 亚洲精品入口一区二区| 国产三级国产精品国产| 亚洲三级伦理中文字幕| 一区二区在线日韩欧美| 99久久偷拍美女大白屁股| 在线视频日韩欧美国产二区| 在线观看亚洲激情av| 福利在线视频一区二区| 极品丝袜美腿一区二区| 久久精品国产成人综合| 欧美一区二区三区成人网| 亚洲欧洲日本在线天堂| 亚洲一区二区三区在线观看呢| 黄色片一区二区三区四区| 国产剧情av专业在线观看| 日本亚洲欧洲一区二区| 亚洲精品老司机福利在线| 亚洲av网站一区二区三区| 丰满的少妇一区二区三区免费观看| 在线观看91高清视频| 成人精品国产一区二区| 人妻少妇被粗大爽av| 午夜啪视频免费在线观看| 视频在线免费观看97| 日本丝袜福利在线观看| 公交车上没穿内裤被插高潮不断| 欧美性大片一区二区三区| 丰满少妇一区二区三区专区 | 精品三级一区二区三区| 粉嫩极品国产在线观看| 青青草针对华人在线视频| 日本一区二区三区视频版| 亚洲国产精品高清久久| 国产精品一区二区综合亚洲|