1. 程式人生 > >Zepto和jQuery之間區別以及特點分析

Zepto和jQuery之間區別以及特點分析

首先介紹一下Zepto:

  1. 它是一個輕量化的,API類似jQueryjavascript類庫。
  2. 它是一個面向移動端的類庫,雖然能在桌面客戶端執行,不過僅支援高階遊覽器(IE10+)。
  3. 它支援移動端“touch”有關的一些事件。

簡單的介紹完Zepto之後,我們再談談它和jQuery之間的區別,從功能先入手,之後會講到大家糾結的大小,效率等問題:

  1. 選擇器的區別;Zepto實現了一些基本的選擇器,排除了部分選擇方式。其中不支援的有:

    • 基本偽類選擇::first、:not(selector)、:even、:odd、:eq等通過“:”來實現選擇方式。
    • 屬性選擇:[attribute!=value]
  2. 寬度和高度的區別(以寬度為例);

    1. 首先介紹jQuery的幾種取值方式:

      • .width(),返回內容寬度;這裡寫圖片描述
      • .css('width'),同上,不過返回的是帶完整單位的字串。
      • .innerWidth(),返回帶padding的內容寬度;這裡寫圖片描述
      • .outerWidth(boolen),有兩種情況,預設返回帶padding以及border的內容寬度;當傳引數“true”時,返回值將包含margin這裡寫圖片描述
    2. 接下來介紹Zepto的取值方式,它只提供了兩種:

      • .width(),返回帶borderpadding
        的內容寬度,和jQuery裡面的.outerWidth()一致。
      • .css('width'),和jQuery的方法一致。
    3. 綜上所述:
      • 想要通過Zepto獲取內容寬度,需要通過$(elm).css('width').slice(0, -2)來實現。
      • 其他的距離以此類推。
    4. Zepto.offset()包含4個屬性值,比jQuery多出了widthheight的值。當然這個widthheight同樣是包含border以及padding的內容寬度。

    5. Zeptoanimate只使用css過渡效果動畫(所以遊覽器一定要高階),對於jQueryeasings不會支援。jQuery

      的相對變化("=+10px")syntax也不支援。同時Zepto擁有總的動畫設定$.fx,設定即時生效。詳細可以瞭解官網文件。

    6. 其他經常性用到的區別可以這裡補充,如果不怎麼用到的,畢竟類庫本身就不同,沒必要做到那麼細緻的瞭解。

功能性的問題就對比到這裡。接下來對比一些糾結性問題,這些問題的分析能幫助你如何去取捨:

  1. 生態圈問題。jQuery擁有成熟的生態圈,能在網上找到一大堆相關的控制元件以及框架,遇到困難也能在社群當中尋找答案。很多招聘資訊一般性也都會加熟悉jQuery等資訊。這些都是Zepto所缺乏的。當然這也阻止不了Zepto使用者的熱情,哪個工具不是經歷從無到有的過程的。造成這個問題的原因我覺得可以有這幾點:

    • 時間問題。Zepto出生於2010年10月末,對於出生於2006年1月的大哥jQuery小了將近5年的時間。先行佔領市場的肯定能多分杯羹了。

    • 市場問題。Zepto的本意就是使用於移動端,但是移動端的發展近幾年才迅猛起來。同時jQuery又出來了一版jQuery.mobile,所以很多人開發控制元件的時候一般性都會去選擇jQuery。導致這麼一個小弟一直被放在一邊默默無聞。

  2. 大小問題。Zepto的體積很小,壓縮之後只有25k。因為Zepto支援移動端事件的特性,相當於jQuery(98K)和jQuery.mobile(198K,一般性連著UI一起用了,所以也不會少)的集合。雖然4G年代來了,上百KB無所謂了,優化個圖片就有了,不過國內流量那麼貴,依然需要省省用的。

  3. 效能問題。Zepto的效能略差於jQuery;不過通過數十萬的計算得出一個百分之幾的差距,實際使用中很少會出現。而且目前移動端遊覽器都如此先進,就跟上面的大小問題一樣,還在出那麼點效能麼。

  4. 跨平臺問題。想製作跨平臺響應式的網站,不需要多想,請使用jQuery吧。jQuery以其優良的相容性完勝了僅支援IE10+的Zepto。

  5. 更新問題。大哥jQuery還在不停更新當中,小弟Zepto官方最後一次更新是在2013年12月初。

總的來講,雖然在移動端使用Zepto佔據很大優勢,不過限制於各種原因,它還有很長的路要走,譬如“點透”等問題還未解決。