對比jQuery和Zepto

JavaScript庫——jQuery和Zepto

jQuery是在Web上應用很廣泛的JavaScript庫,它提供了大量的工具和API函數,使用它的人相當普遍,使用的門檻也比較低。它的API語義對初學者很寬容,出現各種失誤也不會拋出JavaScript錯誤。大多數jQuery方法都是可鏈接的,也就是說這些方法都會返回jQuery對象,所以可以把任意多個方法鏈接到一個DOM引用上。正因如此,為jQuery貢獻代碼的人很多,導致jQuery的每個功能都有代價,代碼庫的不斷膨脹,文件尺寸成為最大負擔。jQuery2.0在這一點上,直接選擇拋棄IE6、IE7、IE8,而這些代碼占了jQuery1.9中的一大部分,不過不用擔心,jQuery2.0和1.9是兼容的,也就是說,在所有2.0不支持的瀏覽器上都可以條件化注釋加載jQuery1.9。

<!-[if it IE9]>

<script src="jQuery-1.9.x.js"></script>

<![endif]-->
<--[if gte IE 9]><!-->

<script src="jQuery-1.9.x.js"></script>

<!--<![endif]-->

jQuery的流行程度也是一個值得驕傲的地方,既然那么多的網站都在使用它,每個網站單獨引入它的意義不大,沒必要使用戶每訪問一個用了jQuery的網站都要下載相同的jQuery核心文件。所以Google在CDN(內容傳遞網站)上部署了jQuery,這樣通過改善把jQuery引入網站的方式,達到為用戶節約下載時間的目的。盡管還是有很多網站仍把jQuery放在自己的網站上,但已有做夠多的網站用上了Goole的CDN。如果用戶第一次訪問這個網站,也不用下載jQuery。這種方法對性能的改善相當有利,意味著這么做的網站越多,這種辦法的收益也就越大。Goole的CDN用起來特別簡單,只需要把腳本來源指向Goole的服務器就可以。



<script src="http://ajax.gooleapis.com/ajax/libs/jquery/1jquery.min.js"></script>

上面的這段腳本是在請求最新的穩定版jQuery引入網站,但一般不要這樣做,因為jQuery中的API會被廢棄,特別是從1.9到2.0時,所以最好指明需要的版本。

<script src="http://ajax.gooleapis.com/ajax/libs/jquery/1.9.1/jquer.min.js"></script>

這段代碼在路徑中指明要用jQuery的1.9.1版。這里被忽略的http協議是為了確保瀏覽器可以用頁面所用的協議,這樣可以避免瀏覽器抱怨所請求的資源協議不匹配。但如果使用file:///協議打開本地HTML文件,它將不起作用。

Zepto最初是為移動端開發的庫,是jQuery的輕量級替代品,因為它的API和jQuery相似,而文件更小,對任何項目都是個不錯的選擇。Zepto最大的優勢是它的文件大小,只有8k多一點,是目前功能完備的庫中最小的一個,盡管不大,Zepto所提供的工具足以滿足開發程序的需要。大多數在jQuery中·常用的API和和方法Zepto都有,Zepto中還有一些jQuery中沒有的,而用一些定制的JavaScript就很容易做出來的API和方法。另外,因為Zepto的API大部分都能和jQuery兼容,所以用起來極其容易,如果熟悉jQuery,就能很容易掌握Zepto。你可用同樣的方式重用jQuery中的很多方法,也可以方面地把方法串在一起得到更簡潔的代碼,甚至不用看它的文檔。

針對移動端程序,Zepto還有一些基本的觸摸事件可以用來做觸摸屏交互,如:tap事件——tap,singleTap,doubleTap,longTap;

Swipe事件——swipe,swipeLeft,swipeRight,swipeUp,swipeDown。

但是有一點,Zepto是不支持IE瀏覽器的,這不是Zepto的開發者Thomas Fucks在跨瀏覽器問題上犯了迷糊,而是經過了認真考慮后為了降低文件尺寸而做出的決定,就像jQuery的團隊在2.0版中不再支持舊版的IE一樣。

長久以來,IE的兼容性問題讓無數開發人員深受其苦。它就是不按標準來,每個大版本都有自己的怪癖。IE在較新版本中做出很大努力來解決這些兼容性問題。但事實上IE在處理一些JavaScript和DOM問題時仍然再用它自己的非標準方式,并且隨著HTML5標準和特性的出現,它又被其他主要瀏覽器甩在了后面。

jQuery之類的大多數JavaScript庫都在用額外的代碼解決跨瀏覽器問題,然而為解決這個問題所編寫的代碼量相當可觀。Zepto為了瘦身放棄這個問題。這對移動程序來說是很好的,因為在移動終端上一般都不用擔心會碰到IE。但對桌面程序來說這是個致命的問題。

因為Zepto使用jQuery句法,所以它在文檔中建議把jQuery作為IE上的后備庫。那樣程序仍能在IE中,而其他瀏覽器則能享受到Zepto在文件大小上的優勢,然而它們兩個的API不是完全兼容的,所以使用這種方法時一定要小心,并要做充分的測試。

當然,你可以完全不用JavaScript庫。即使像Zepto這么小的JavaScript庫,也會讓程序無端地膨脹起來。自己編寫的JavaScript最大的好處是你只需要編寫和引入需要的東西,而最大的弊端是這樣需要更長的開發時間。按照定義,JavaScript庫會包含程序中常用的很多功能,但每個程序都不可能把所有的功能都用上。那些額外的,用不到的JavaScript就是不必要的腫塊。然而你必須要在文件大小和開發時間上作出選擇,如果你從來沒有從開頭寫過JavaScript程序,可能會低估整個程序所需要的開發時間。相信就算知道必須要寫大量腳本來實現程序所需的全部功能,但你可能沒考慮到為了支持多個瀏覽器所需要的工作量。

和跨瀏覽器的JS相比,CSS的跨瀏覽器問題簡直就不值一提。早期的瀏覽器戰爭留下了各種稀奇古怪的問題,這些問題日益凸顯,迫使你要為了不同瀏覽器做不同實現,這些處理方式也略有不同。一個常見的例子就是跨瀏覽器時間處理器,比如onclick事件。所有現代瀏覽器都支持用addEvenListener綁定鼠標事件。

Var bt=document.getElementById(“bt”);

bt.addEventListener(“click”,function(e){

alert(“this is a alert”);

})

而IE下的事件綁定的函數是attachEvent,它支持全系列的IE,但如果在Chrome等其他內核瀏覽器中使用這個函數去綁定事件,瀏覽器會報錯。

Var bt=document.getElementById(“bt”);

bt.attachEvent(“onclick”,function(e){

alert(“this is a alert”);

})

所以,開發中不存在絕對優勢,合適地選擇JavaScript庫,或是使用原生JS都是要根據自身的開發需求來權衡的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    前端進階之旅閱讀 114,812評論 24 450
  • <a name='html'>HTML</a> Doctype作用?標準模式與兼容模式各有什么區別? (1)、<...
    clark124閱讀 3,555評論 1 19
  • @轉自GitHub 介紹js的基本數據類型。Undefined、Null、Boolean、Number、Strin...
    YT_Zou閱讀 1,200評論 0 0
  • 上午去拜年了,又是去的楊梅戈,好熟悉的地方,今年的人似乎少了許多,煙火也少了許多。 大概很多人為了掙錢都沒回來吧。...
    47a5445d9005閱讀 166評論 0 0
  • 時光匆匆,歲月無情, 轉眼又是一個冬, 在這個寒冷的季節, 只想問候一下遠方的朋友, 送去一份深藏已久的關心, 你...
    秋月私語閱讀 414評論 2 0