顯示廣告
隱藏 ✕
※ 本文為 TonyQ 轉寄自 ptt.cc 更新時間: 2012-06-27 12:11:15
看板 Ajax
作者 TonyQ (自立而後立人。)
標題 [情報] jQuery 1.8 beta1
時間 Wed Jun 27 11:51:42 2012




        http://blog.jquery.com/2012/06/22/jquery-1-8-beta-1-see-whats-coming-and-going/


        短網址:http://goo.gl/TDDJW



        這是我整理 Release Note 上讀來的幾個重點:


      1.MODULARITY 模組化

        因為採用新的 grunt 建制模式,現在你可以只針對 jQuery
        其中幾個需要得模組進行打包,不見得需要引入整個 jQuery 功能集。

        需要的話只要從 github 取出 jQuery project 並透過 grunt command 進行。

        TonyQ註:(不建議真的去作客製版本,容易造成維護上困難。)



      2.VENDOR-PREFIXED CSS PROPERTIES

        對 css 屬性有更好的支援,對於某些目前 css3 有些只能透過瀏覽器
        專屬 prefix 進行設定的 css properties,現在 jQuery 都支援。

        簡單來說就是對那些 -webkit- -moz- 開頭的屬性幫上一點忙。:)


        舉例,在 chrome 上,如果你用了這個指令:

        $("#myscroll").css("marquee-direction", "backwards")

        實際上將會設定底下這個 css 屬性到 dom 上
        -webkit-marquee-direction: backwards.


        TonyQ 註:補一點從 jQuery code 看來的實作細節,
                 可以找 function vendorPropName( style, name ) {

        他的作法是如果 cssHook 中找不到,他會去判斷加上 prefix 後,
        在 dom.style 中找不找得到,找得到他就會處理。

        所以不是透過查表來處理,這招蠻聰明的。

      3.ANIMATION (EFFECTS)

        過去 animation 的擴充與實做上,需要修改 $.fn.step/$.fn.csshook ,
        導致這些動態效果散落在各處實做上,缺乏全面性的架構,所以面臨難以
        維護的窘境。



        目前在 1.8 已經獲得改善,1.8 以後將有一個更全面的
                一系列 factory method 協助你建制 animation,

        詳細文件請參考:
        https://gist.github.com/54829d408993526fe475

        這部份主要是幫助你「設計」 animation 擴充,
        如果你只是要 "用" animation 的話,這個部份對你沒什麼影響。


        TonyQ 註:這一步蠻漂亮的,希望能藉此出現更多好用的 animation plugin。


      4.SIZZLE CSS SELECTOR ENGINE

        sizzle 又重新更新了,對一些邊緣案例有更多的支援,
        然後在效能上對一些最常用的 selector "選取時"進行更好的支援。

        詳細請參考原文跟這個官方提供的 jsperf 測試案例

        http://jsperf.com/jquery-id-init/4
jQuery("#id") ·  jsPerf
The duplicate id optimization in jQuery.fn.init has been removed. Check the loss. ...
 


      5.XSS PROTECTION (重要,有引入新的寫作原則)

        因為預設的情況下,如果你把一個 html 字串放進 $() 裡,
        這個 html 會被轉換為 HTML Dom Element ,

        其中如果有<script> 標籤也會被執行。


        像是 $("<div></div>")


        有時候如果開發者不小心用了來自使用者來的字串,
        像是

        var word = window.prompt("please enter selector");
        $(word).hide();


        這樣可能就會有使用者故意輸入
        <script src="xss-attach.js"></script>
        來進行 XSS 攻擊。


        jQuery 計畫在 1.9 (再下一個版本)進行規格上的改動,
        但在 1.8 則是引入新的 method  $.parseHTML 來先幫大家處理這個問題。


        如果你是習慣用 $("<p></p>") 這類用法的使用者,
        在 1.8 以後請改用 $.parseHTML("<p></p>") 來作這件事情。

        因為 $(html) 官方預告在 1.9 時行為將會改變,
        在 1.9 時將嚴格的認定只有 html 是 "<" 開頭的會被當作 html 處理,

        否則都視為 selector 處理。


      6.SPRING CLEANING (重點)

        註:被標重點的都是那些對向下相容或者開發習慣上有重大改動的東西。


        在 1.9 開始(再之後一個版本),許多不建議使用、不常被使用
        或效率低落的功能將被標記 過時或移除,但也還會提供另一隻 jQuery.compat
        plug in 來支援那些被移除、過時的函式。

        https://github.com/jquery/jquery-compat-1.9/


        其中有幾個比較主要的東西...條列如下:

        @ $.browser << 官方從 1.4 開始認為透過 user-agent 去判斷版本不好,
                        應該透過偵測需要的功能是否有支援來開發。($.support)

          這相信很多專案中都有用到,升上 1.9 時要記得加掛 compat。



          TonyQ 不得不註:WTF ......有這麼簡單就好了,很多怪問題不能透過
                          $.support 判斷,強烈建議 jQuery 加入
                          $.supprot.weird 選項。


        @ $.sub << 官方認為這東西沒有想像中的有用,所以也移掉到 compat 去了。

        @ 全域 的 ajaxStart 等 ajax event 有修改,
           也就是你用到 $.ajaxSetup 去作設定 ajaxStart 時,行為將和 1.8不同。

           http://api.jquery.com/jQuery.ajaxSetup/


           理由是原本規格開太強,連那些已經被移除的元素,
           都會需要為這些事件作特殊處理,所以出現了效率低落的特殊案例。

           官方從 1.9 開始將只處理那些在 document 底下的元素,
           當他們進行 ajax 行為時才會觸發這些事件。


           詳細參考 http://api.jquery.com/ajaxStart/


           TonyQ 註 :我是覺得這個應該影響不大。


       7.其他修正,這是我從 issue list 上挖一些比較重要的:

           A. $().size() 被標為 deprecated ,請改用 $().length 替代。

              詳情參閱討論串:http://bugs.jquery.com/ticket/10657

           B. $.ajax() 中, async option 將被標為 deprecated ,

              這意味著,官方不希望你透過 $.ajax 去進行"同步"的 request。


     TonyQ註:理由我想跟是不是 ajax 就該非同步不是那麼直接有關係,
              主要理由是當你設定 async:false 時, defered 將無法支援,
              所以使用者使用 defered 要一直去判斷/瞭解 ajax 是同步或非同步。

              在支援上也會有很大的問題,在討論串中最後一個評論解釋得很清楚,
              他們並不認為 sync ajax 是一個不該被使用的使用情境。(我也是)

              因為這有必要講清楚,所以我特別節錄一段過來:


        It does not say there are no valid use cases for sync ajax.
        It does not say you are all bad people for doing sync ajax.
        It does not say there will be no way to do sync ajax
                --only that it won't be via $.ajax.

              詳情參閱討論串:http://bugs.jquery.com/ticket/11013

              (
                一些新夥伴可能不瞭解 async 選項的用意,
                請自行參考文件或 google 網路文章,這裡不多作解釋。
                參考 http://api.jquery.com/jQuery.ajax/ 中 async 章節
         http://jax-work-archive.blogspot.tw/2009/05/ajaxxmlhttprequest.html
                http://www.classyuan.com/?p=247
jquery的ajax同步和异步的区别 @ classyuan
前端技术博客,本人不是高手,文采也不好。 ...
 
              )


           C. $().data("events") 被 deprecated 了,
               官方建議改用 $()._data("events") 。


              events 是用來紀錄被掛上去的 jQuery 事件,屬於內部實作,

              jQuery 基本上不希望使用者去碰他或使用他,
              透過 $()_data 表示這是存取 jQuery 內部實作,使用者應該為他負責。


              這議題想當然爾的也有一堆歷史爭論,
              相關爭論可以看這個很嗆辣的 commit log http://goo.gl/RVrQ7 。

              這裡也說明得很清楚,包含整個討論串都值得一看。
              http://bugs.jquery.com/ticket/10589#comment:6


           D.New method: .addBack (用來代替 .andSelf ,功能完全一模一樣)

             http://bugs.jquery.com/ticket/9800

             因為原始碼有這行
             jQuery.fn.andSelf = jQuery.fn.addBack;

           E.修正bug ".has doesn't work on detached elements"
             http://bugs.jquery.com/ticket/11543


           其他小的就自己看吧,這已經是我篩選過得了

           * DEPRECATE .DATA() EVENTS
             http://bugs.jquery.com/ticket/11718

           * Deprecate .bind("ready") event
             http://bugs.jquery.com/ticket/11719

             簡而言之,他不希望 user 把自己 trigger 的 ready event,
             和瀏覽器發動的 ready event 混在一起。

           * Deprecate "hover" pseudo-event

             理由是
                It is not possible to attach an event with the name "hover"
                and fire it using .trigger("hover").

             http://bugs.jquery.com/ticket/11731


           * Deprecate .load(), .unload(), and .error() methods
             http://bugs.jquery.com/ticket/11733

           * Deprecate .toggle( handler, handler, … ) signature
             http://bugs.jquery.com/ticket/11786



--
        說真的,看完這版 release note ,我心裡的感想很複雜;

        我覺得 jQuery team 應該更注重在使用者需要什麼,
        而不是急著去調整他們的 API 或理念,
        可想見的是 1.9 會是個比較冒險的版本,希望到時不會再重演 1.6 的災情。


        btw 這不是 1.8 release note 嗎,
        怎麼花好多篇幅在講 1.9 他們想幹麼。XD

--

        Life's a struggle but beautiful.


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.27.247
※ 編輯: TonyQ           來自: 118.163.27.247       (06/27 11:52)
※ 編輯: TonyQ           來自: 118.163.27.247       (06/27 12:00)
※ 編輯: TonyQ           來自: 118.163.27.247       (06/27 12:00)
TonyQ:轉錄至看板 Web_Design                                     06/27 12:03
※ 編輯: TonyQ           來自: 118.163.27.247       (06/27 12:06)

--
※ 看板: JavaScript 文章推薦值: 1 目前人氣: 0 累積人氣: 585 
作者 TonyQ 的最新發文:
點此顯示更多發文記錄
分享網址: 複製 已複製
( ̄︶ ̄)b SatanEvil 說讚!
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇