国产三级韩国三级日产三级剧情_天天爱夜夜操_免费观看亚洲人成网站_超碰9999_精品伊人久久久大香线蕉天堂_深夜在线观看

18842388900

網(wǎng)站建設(shè) APP開發(fā) 小程序

Article/文章

記錄成長點滴 分享您我感悟

您當(dāng)前位置>首頁 > 知識 > 網(wǎng)站建設(shè)

Sea.js的終極模塊化開發(fā)框架

為什么使用 Sea.js ?

Sea.js追求簡單,自然的代碼編寫和組織,具有以下核心功能:

簡單友好的模塊定義規(guī)范:Sea.js遵循CMD規(guī)范,可以編寫Node.js等模塊代碼。自然直觀的代碼組織:依賴自動加載,簡單明了的配置,讓我們享受編碼的樂趣。

Sea.js還提供了通用插件,這些插件對開發(fā)調(diào)試和性能優(yōu)化非常有用,并且具有豐富且可擴展的接口。

兼容性

Sea.js具有與所有主流瀏覽器兼容的全面測試用例:

Chrome 3+ Firefox 2+ Safari 3.2+ Opera 10+ IE 5.5+

Sea.js在Mobile端運行,包括Hybrid模式應(yīng)用程序。理論上,Sea.js可以在任何瀏覽器引擎上運行

隨著互聯(lián)網(wǎng)的快速發(fā)展,前端開發(fā)變得越來越復(fù)雜。本文將從實際項目中遇到的問題入手,討論模塊化可以解決的問題以及如何使用Sea.js進行前端的模塊化開發(fā)。

惱人的命名沖突

我們從一個簡單的習(xí)慣開始。當(dāng)我做項目時,我經(jīng)常將一些常見的低級函數(shù)抽象為單獨的函數(shù),例如

函數(shù)each(arr){//implementation code} function log(str){//implementation code}

并將這些函數(shù)放在util.js中就像一個體面的。如果需要,可以引入該文件。這一切都很順利,我的同事們很感激我提供了這么方便的工具包。

在團隊變得越來越大之前,有些人開始抱怨。

Xiao Yang:我想定義一個遍歷對象的每個方法,但是已經(jīng)定義了一個頭文件中的util.js。我只能調(diào)用eachObject,所以我很無奈。

小高:我已經(jīng)定制了一個日志方法。為什么小明寫的代碼有問題?誰會幫助我。

投訴越來越多。經(jīng)過激烈的討論,團隊決定引用Java并引入命名空間來解決它。因此util.js中的代碼變?yōu)?/p>Var org={}; org.CoolSite={}; org.CoolSite.Utils={}; org.CoolSite.Utils.each=function(arr){//implementation code}; org.CoolSite.Utils.log=function (str){//實現(xiàn)代碼};

不要認為上述代碼是為了撰寫本文而故意編造的。名稱空間的概念在前端進行,雅虎的YUI2項目是第一個推出的項目。下面是一個真實的代碼,一個來自Yahoo!的開源項目。

if(org.cometd.Utils.isString(response)){return org.cometd.JSON.fromJSON(response);} if(org.cometd.Utils.isArray(response)){return response;}

通過命名空間,它可以真正緩解沖突。但每當(dāng)我看到上面的代碼時,我都忍不住要充滿同情。為了調(diào)用一個簡單的方法,你需要記住這么長的命名空間,這會增加內(nèi)存負擔(dān)并剝奪很多編碼的樂趣。

作為前端行業(yè)的基準(zhǔn),YUI團隊決心解決這個問題。 YUI3項目中引入了一個新的命名空間機制。

YUI()。use('node',function(Y){//加載Node模塊//var foo=Y.one('#foo');});

YUI3通過沙箱機制解決了名稱空間過長的問題。但是,它也帶來了新的問題。

YUI()。use('a','b',function(Y){Y.foo(); //模塊a或b提供的foo方法是什么?//如果模塊a和b都提供了foo方法,如何避免沖突?});

看似簡單的命名沖突,實際解決方案并不簡單。如何更優(yōu)雅地解決它?我們先來看看另一個常見問題。

麻煩的文件依賴

繼續(xù)上面的故事。基于util.js,我開始在UI層開發(fā)通用組件,以便項目團隊的同事不必重新創(chuàng)建輪子。

最受歡迎的組件之一是dialog.js,它易于使用。

但無論我如何編寫文檔,以及電子郵件的宣布程度如何,總會有同事問為什么dialog.js有問題。通過一些調(diào)查,經(jīng)常發(fā)現(xiàn)錯誤的原因是

在dialog.js之前沒有引入Util.js,所以dialog.js不起作用。也不要以為上面的故事是虛構(gòu)的。在我留下的公司中,仍然有類似的腳本被報道,特別是在各種快速制作營銷頁面中。

上述文件依賴性仍在可控范圍內(nèi)。隨著項目變得越來越復(fù)雜,許多文件之間的依賴往往令人沮喪。我相信,以下問題每天都會發(fā)生。

環(huán)球集團更新了前端基類庫,但很難推廣全站點升級。該業(yè)務(wù)組希望使用新的通用組件,但發(fā)現(xiàn)無法使用幾行代碼完成。舊產(chǎn)品需要新功能,最終評估只能繼續(xù)基于舊類庫開發(fā)。該公司整合其業(yè)務(wù),并將兩個產(chǎn)品線合并。事實證明,前端代碼沖突。

上述許多問題都是由于文件依賴性得不到很好的管理。在前端頁面中,大多數(shù)腳本的依賴性仍然由人類肉體保證。當(dāng)團隊很小時,這不會是一個問題。隨著團隊規(guī)模的擴大和公司業(yè)務(wù)變得更加復(fù)雜,如果不解決依賴性問題將成為一個大問題。

文件依賴性目前在大多數(shù)類庫框架中,例如外部YUI3框架,國內(nèi)KISSY和其他庫,這些庫目前通過配置解決。

YUI.add('my-module',function(Y){//.},'0.0.1',{required: ['node','event']});

上述代碼通過要求等指定當(dāng)前模塊的依賴性。這可以在很大程度上解決依賴問題,但不夠優(yōu)雅。當(dāng)有很多模塊且依賴性很復(fù)雜時,繁瑣的配置會帶來很多隱患。

命名沖突和文件依賴性是前端開發(fā)過程中的兩個經(jīng)典問題。讓我們看看如何通過模塊化開發(fā)來解決它。為了便于描述,我們使用Sea.js作為模塊化開發(fā)框架。

使用Sea.js來解決

Sea.js是一個成熟的開源項目,其核心目標(biāo)是為前端開發(fā)提供簡單,極端模塊化的開發(fā)體驗。這里沒有太多介紹。如果您有興趣,可以訪問seajs.org上的官方文檔。

使用Sea.js時,您必須在編寫文件時遵循CMD(通用模塊定義)模塊定義規(guī)范。文件是一個模塊。上一個示例中的util.js變?yōu)?/p>定義(function(require,exports){exports.each=function(arr){//implementation code}; exports.log=function(str){//implementation code};});

可以通過導(dǎo)出在外部提供接口。這樣,dialog.js的代碼變?yōu)?/p>定義(function(require,exports){var util=require('./util.js'); exports.init=function(){//implementation code};});

關(guān)鍵部分在這里!我們可以通過require('。/util.js')獲取util.js中導(dǎo)出的接口。這里的require可以被視為Sea.js添加到JavaScript語言的語法關(guān)鍵字。 require接口可用于獲取其他模塊提供的接口。

這實際上并不神奇。作為前端工程師,您必須熟悉CSS代碼。

@import url('base.css');#id {.} .class {.}

Sea.js添加了require語法關(guān)鍵字,就像CSS文件中的@import一樣,為我們的源代碼提供了依賴項導(dǎo)入功能。

如果您是后端開發(fā)工程師,那么您將不會感到陌生。 Java,Python,C#等具有包含,導(dǎo)入和其他功能。 JavaScript語言本身具有類似的功能,但它仍處于草案階段,需要等到主流瀏覽器支持ES6標(biāo)準(zhǔn)。

這樣,在頁面上使用dialog.js將非常簡單。

首先,您應(yīng)該在頁面中引入sea.js文件,該文件通常由頁眉控制,并且更新和維護也很方便。如果要在頁面中使用組件,只需通過seajs.use方法調(diào)用它。

仔細看看上面的代碼,我相信你已經(jīng)看到了Sea.js的兩個好處:

通過導(dǎo)出公開接口。這意味著不需要命名空間,也不需要全局變量。這是一個完整的命名沖突解決方案。

通過require引入依賴項。這允許內(nèi)置依賴項。開發(fā)人員只需要關(guān)心當(dāng)前模塊的依賴關(guān)系,以及Sea.js將自動處理它的其他事情。對于模塊開發(fā)人員來說,這是一個很好的關(guān)注點分離,允許程序員更多地享受編碼。

摘要

除了解決命名沖突和依賴關(guān)系管理之外,使用Sea.js進行模塊化開發(fā)還可以帶來許多好處:

模塊的版本管理。使用別名配置和其他配置工具,使用構(gòu)建工具實現(xiàn)模塊版本管理更容易。

提高可維護性。模塊化允許對每個文件負責(zé),這對代碼維護非常有利。 Sea.js還提供了nocache,調(diào)試等插件,具有在線調(diào)試和其他功能,可以顯著提高效率。

前端性能優(yōu)化。 Sea.js異步加載模塊,這對頁面性能非常有利。 Sea.js還提供插件,如組合和刷新,可用于調(diào)整服務(wù)器的頁面性能。

跨環(huán)境共享模塊。 CMD模塊定義規(guī)范與Node.js的模塊規(guī)范非常相似。 Sea.js的Node.js版本可以輕松地跨服務(wù)器和瀏覽器共享模塊。

模塊化開發(fā)并不新鮮,但在Web領(lǐng)域,前端開發(fā)是一項新工作,而且它始終處于原始大刀闊斧的時代。直到最近兩三年,隨著Dojo,YUI3,Node.js等社區(qū)的推廣和普及,前端模塊化開發(fā)理念逐漸普及。

前端的模塊化結(jié)構(gòu)可分為兩大類。一個是由Dojo,YUI3和國內(nèi)KISSY圖書館代表的大教堂模型。在大教堂模式中,所有組件都是顆粒狀和模塊化的,并且組件是分層分層和互鎖的。另一種是基于jQuery,RequireJS,國內(nèi)Sea.js,OzJS和其他庫的市場模型。在市場模式中,所有組件彼此獨立并且具有單一責(zé)任。組件松散地耦合在一起并協(xié)同開發(fā)。

這兩種類型的模塊化構(gòu)造方法具有應(yīng)用場景。從長遠來看,小而美的更具寬容性和競爭力,更能夠形成一個充滿活力的生態(tài)系統(tǒng)。

簡而言之,模塊化可以為前端開發(fā)帶來許多好處。如果您尚未嘗試過,請先嘗試Sea.js.

標(biāo)簽:& nbsp& nbsp沈陽前端開發(fā)& nbsp沈陽html5前端開發(fā)

網(wǎng)站建設(shè),小程序開發(fā),小程序制作,微信小程序開發(fā),公眾號開發(fā),微信公眾號開發(fā),網(wǎng)頁設(shè)計,網(wǎng)站優(yōu)化,網(wǎng)站排名,網(wǎng)站設(shè)計,微信小程序設(shè)計,小程序定制,微信小程序定制

相關(guān)案例查看更多

主站蜘蛛池模板: 久久精品国产亚洲AV麻豆网站 | 亚洲美女视频在线观看 | 久久网站热最新地址 | 亚洲18色成人网站www | 人妻少妇无码精品专区 | 日本大片免费观看视频 | 妖精视频一区 | 丰满人妻跪趴高撅肥臀 | 欧美日韩亚洲国内综合网 | 亚洲欧美成人精品香蕉网 | 亚洲XXXX做受欧美 | 最爽古装A片免费视频 | 粉红女士1977年 | 狠狠色狠狠色狠狠五月 | 午夜精品区一区二区三 | 亚洲综合成人一区 | 国产成人亚洲精品影院 | 后入内射无码人妻一区 | 色125综合网 | 欧美亚洲第一页 | 欧美爆乳一区二区三区 | 97桃色| 日韩免费无码成人久久久久久片 | 久草这里只有精品视频 | 少妇搡BBBB搡BBB搡野外 | 午夜宅男在线观看 | 内射后入在线观看一区 | 大菠萝福利网 | 欧美激情猛片xxxⅹ大3 | 爱色影激情| 亚洲久草在线 | 国精一区二区 | 无码人妻aⅴ一区二区三区麻豆 | 任你操在线视频免费观看 | 成人性生生活性生交全黄 | 无码免费人妻A片AAA毛片一区 | 国产激情精品久久久第一区二区 | 四虎永久在线精品8848A | 三级黄色免费看 | 麻豆av在线免费看 | 乱子伦国产对白在线播放 |