Zepto和jQuery之間區別以及特點分析
首先介紹一下Zepto:
- 它是一個輕量化的,
API
類似jQuery
的javascript
類庫。- 它是一個面向移動端的類庫,雖然能在桌面客戶端執行,不過僅支援高階遊覽器(IE10+)。
- 它支援移動端“touch”有關的一些事件。
簡單的介紹完Zepto
之後,我們再談談它和jQuery
之間的區別,從功能先入手,之後會講到大家糾結的大小,效率等問題:
選擇器的區別;
Zepto
實現了一些基本的選擇器,排除了部分選擇方式。其中不支援的有:
- 基本偽類選擇:
:first、:not(selector)、:even、:odd、:eq
等通過“:”來實現選擇方式。- 屬性選擇:
[attribute!=value]
。寬度和高度的區別(以寬度為例);
首先介紹jQuery的幾種取值方式:
- .width(),返回內容寬度;
.css('width')
,同上,不過返回的是帶完整單位的字串。.innerWidth()
,返回帶padding的內容寬度;.outerWidth(boolen)
,有兩種情況,預設返回帶padding
以及border
的內容寬度;當傳引數“true”時,返回值將包含margin
;接下來介紹Zepto的取值方式,它只提供了兩種:
.width()
,返回帶border
,padding
的內容寬度,和jQuery
裡面的.outerWidth()
一致。.css('width')
,和jQuery
的方法一致。- 綜上所述:
- 想要通過
Zepto
獲取內容寬度,需要通過$(elm).css('width').slice(0, -2)
來實現。- 其他的距離以此類推。
Zepto
的.offset()
包含4個屬性值,比jQuery
多出了width
和height
的值。當然這個width
和height
同樣是包含border
以及padding
的內容寬度。
Zepto
的animate
只使用css
過渡效果動畫(所以遊覽器一定要高階),對於jQuery
的easings
不會支援。jQuery
的相對變化("=+10px")
syntax也不支援。同時Zepto
擁有總的動畫設定$.fx
,設定即時生效。詳細可以瞭解官網文件。其他經常性用到的區別可以這裡補充,如果不怎麼用到的,畢竟類庫本身就不同,沒必要做到那麼細緻的瞭解。
功能性的問題就對比到這裡。接下來對比一些糾結性問題,這些問題的分析能幫助你如何去取捨:
生態圈問題。jQuery擁有成熟的生態圈,能在網上找到一大堆相關的控制元件以及框架,遇到困難也能在社群當中尋找答案。很多招聘資訊一般性也都會加熟悉jQuery等資訊。這些都是Zepto所缺乏的。當然這也阻止不了Zepto使用者的熱情,哪個工具不是經歷從無到有的過程的。造成這個問題的原因我覺得可以有這幾點:
時間問題。Zepto出生於2010年10月末,對於出生於2006年1月的大哥jQuery小了將近5年的時間。先行佔領市場的肯定能多分杯羹了。
市場問題。Zepto的本意就是使用於移動端,但是移動端的發展近幾年才迅猛起來。同時jQuery又出來了一版jQuery.mobile,所以很多人開發控制元件的時候一般性都會去選擇jQuery。導致這麼一個小弟一直被放在一邊默默無聞。
大小問題。Zepto的體積很小,壓縮之後只有25k。因為Zepto支援移動端事件的特性,相當於jQuery(98K)和jQuery.mobile(198K,一般性連著UI一起用了,所以也不會少)的集合。雖然4G年代來了,上百KB無所謂了,優化個圖片就有了,不過國內流量那麼貴,依然需要省省用的。
效能問題。Zepto的效能略差於jQuery;不過通過數十萬的計算得出一個百分之幾的差距,實際使用中很少會出現。而且目前移動端遊覽器都如此先進,就跟上面的大小問題一樣,還在出那麼點效能麼。
跨平臺問題。想製作跨平臺響應式的網站,不需要多想,請使用jQuery吧。jQuery以其優良的相容性完勝了僅支援IE10+的Zepto。
- 更新問題。大哥jQuery還在不停更新當中,小弟Zepto官方最後一次更新是在2013年12月初。
總的來講,雖然在移動端使用Zepto
佔據很大優勢,不過限制於各種原因,它還有很長的路要走,譬如“點透”等問題還未解決。