精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

GitHub:我們?yōu)槭裁磿売胘Query?

開發(fā) 前端
這篇文章將介紹過去我們是如何依賴上 jQuery 的,隨著時間地推移,我們意識到不再需要它,但到最后我們并沒有使用另一個庫或框架取代它,而是使用標準的瀏覽器 API 實現(xiàn)了我們所需要的一切。

[[243149]]

最近,我們將 jQuery 完全從 GitHub.com 的前端代碼中移除了,這標志著我們數(shù)年來逐步移除 jQuery 這個漸進式的過程終于結束了,這對我們來說是一件里程碑式的事件。這篇文章將介紹過去我們是如何依賴上 jQuery 的,隨著時間地推移,我們意識到不再需要它,但到***我們并沒有使用另一個庫或框架取代它,而是使用標準的瀏覽器 API 實現(xiàn)了我們所需要的一切。

早期,jQuery 對我們意義重大

GitHub.com 在 2007 年底開始使用 jQuery 1.2.1,那是谷歌發(fā)布 Chrome 瀏覽器的前一年。當時還沒有通過 CSS 選擇器來查詢 DOM 元素的標準方法,也沒有動態(tài)渲染元素的樣式的標準方法,而 Internet Explorer 的 XMLHttpRequest 接口與其他很多 API 一樣,在瀏覽器之間存在不一致性問題。

jQuery 讓 DOM 操作、創(chuàng)建動畫和“AJAX”請求變得相當簡單,基本上,它讓 Web 開發(fā)人員能夠創(chuàng)建更加現(xiàn)代化的動態(tài) Web 體驗。最重要的是,使用 jQuery 為一個瀏覽器開發(fā)的代碼也適用于其他瀏覽器。在 GitHub 的早期階段,jQuery 讓小型的開發(fā)團隊能夠快速進行原型設計并開發(fā)出新功能,而無需專門針對每個 Web 瀏覽器調整代碼。

基于 jQuery 簡單的接口所構建的擴展庫也成為 GitHub.com 前端的基礎構建塊:pjaxfacebox

我們將永遠不會忘記 John Resig 和 jQuery 貢獻者創(chuàng)建和維護的這樣一個有用的基本庫。

后來的 Web 標準

多年來,GitHub 成長為一家擁有數(shù)百名工程師的公司,并逐漸成立了一個專門的團隊,負責 JavaScript 代碼的規(guī)模和質量。我們一直在排除技術債務,有時技術債務會隨著依賴項的增多而增長,這些依賴項在一開始會為我們帶來一定的價值,但這些價值也隨著時間的推移而下降。

我們可以將 jQuery 與現(xiàn)代瀏覽器支持的 Web 標準的快速演化進行比較:

  •  $(selector) 模式可以使用 querySelectorAll() 來替換;
  •  現(xiàn)在可以使用 Element.classList 來實現(xiàn) CSS 類名切換;
  •  CSS 現(xiàn)在支持在樣式表中而不是在 JavaScript 中定義可視動畫;
  •  現(xiàn)在可以使用 Fetch Standard 執(zhí)行 $.ajax 請求;
  •  addEventListener() 接口已經足夠穩(wěn)定,可以跨平臺使用;
  •  我們可以使用輕量級的庫來封裝事件委托模式;
  •  隨著 JavaScript 語言的發(fā)展,jQuery 提供的一些語法糖已經變得多余。

另外,鏈式語法不能滿足我們想要的編寫代碼的方式。例如: 

  1. $('.js-widget')  
  2.   .addClass('is-loading')  
  3.   .show() 

這種語法寫起來很簡單,但是根據(jù)我們的標準,它并不能很好地傳達我們的意圖。作者是否期望在當前頁面上有一個或多個 js-widget 元素?另外,如果我們更新頁面標記并意外遺漏了 js-widget 類名,瀏覽器是否會拋出異常會告訴我們出了什么問題?默認情況下,當沒有任何內容與選擇器匹配時,jQuery 會跳過整個表達式,但對我們來說,這是一個 bug。

***,我們開始使用 Flow 來注解類型,以便在構建時執(zhí)行靜態(tài)類型檢查,并且我們發(fā)現(xiàn),鏈式語法不適合做靜態(tài)分析,因為幾乎所有 jQuery 方法返回的結果都是相同的類型。我們當時之所以選擇 Flow,是因為 @flow weak 模式等功能可以讓我們逐步將類型應用于無類型的代碼庫上。

總而言之,移除 jQuery 意味著我們可以更多地依賴 Web 標準,讓 MDN Web 文檔成為前端開發(fā)人員事實上的默認文檔,在將來可以維護更具彈性的代碼,并且可以將 30KB 的依賴從我們的捆綁包中移除,加快頁面的加載速度和 JavaScript 的執(zhí)行速度。

逐步解耦

雖然定下了最終目標,但我們也知道,分配所有資源一次性移除 jQuery 是不可行的。這種匆匆忙忙的做法可能會導致網(wǎng)站功能出現(xiàn)回歸。相反,我們采取了以下的策略:

1. 設定指標,跟蹤整一行代碼調用 jQuery 的比率,并監(jiān)控指標走勢隨時間變化的情況,確保它保持不變或下降,而不是上升。

2. 我們不鼓勵在任何新代碼中導入 jQuery。為了方便自動化,我們創(chuàng)建了 eslint-plugin-jquery(https://github.com/dgraham/eslint-plugin-jquery),如果有人試圖使用 jQuery 功能,例如 $.ajax,CI 檢查將會失敗。

3. 舊代碼中存在大量違反 eslint 規(guī)則的情況,我們在代碼注釋中使用特定的 eslint-disable 規(guī)則進行了注解。看到這些代碼的讀者,他們都該知道,這些代碼不符合我們當前的編碼實踐。

4. 我們創(chuàng)建了一個拉請求機器人,當有人試圖添加新的 eslint-disable 規(guī)則時,會對拉取請求留下評論。這樣我們就可以盡早參與代碼評審,并提出替代方案。

5. 很多舊代碼使用了 pjax 和 facebox 插件,所以我們在保持它們的接口幾乎不變的同時,在內部使用 JS 重新實現(xiàn)它們的邏輯。靜態(tài)類型檢查有助于提升我們進行重構的信心。

6. 很多舊代碼與 rails-behavior 發(fā)生交互,我們的 Ruby on Rails 適配器幾乎是“不顯眼的”JS,它們將 AJAX 生命周期處理器附加到某些表單上: 

  1. // 舊方法  
  2.   $(document).on('ajaxSuccess', 'form.js-widget', function(event, xhr, settings, data) {  
  3.     // 將響應數(shù)據(jù)插入到 DOM 中  
  4.   }) 

7. 我們選擇觸發(fā)假的 ajax* 生命周期事件,并保持這些表單像以前一樣異步提交內容,而不是立即重寫所有調用,只是會在內部使用 fetch()。

8. 我們自己維護了 jQuery 的一個版本,每當發(fā)現(xiàn)我們不再需要 jQuery 的某個模塊的時候,就會將它從自定義版本中刪除,并發(fā)布更輕量的版本。例如,在移除了 jQuery 的 CSS 偽選擇器之后(如:visible 或:checkbox)我們就可以移除 Sizzle 模塊了,當所有的 $.ajax 調用都被 fetch() 替換時,就可以移除 AJAX 模塊。

這樣做有兩個目的:加快 JavaScript 執(zhí)行速度,同時確保不會有新代碼試圖使用已移除的功能。

9. 我們根據(jù)網(wǎng)站的分析結果盡快放棄對舊版本 Internet Explorer 的支持。每當某個 IE 版本的使用率低于某個閾值時,我們就會停止向它提供 JavaScript 支持,并專注支持更現(xiàn)代的瀏覽器。盡早放棄對 IE 8 和 IE 9 的支持對于我們來說意味著可以采用很多原生的瀏覽器功能,否則的話有些功能很難通過 polyfill 來實現(xiàn)。

10. 作為 GitHub.com 前端功能開發(fā)新方法的一部分,我們專注于盡可能多地使用常規(guī) HTML,并且逐步添加 JavaScript 行為作為漸進式增強。因此,那些使用 JS 增強的 Web 表單和其他 UI 元素通常也可以在禁用 JavaScript 的瀏覽器上正常運行。在某些情況下,我們可以完全刪除某些遺留的代碼,而不需要使用 JS 重寫它們。

經過多年的努力,我們逐漸減少對 jQuery 的依賴,直到沒有一行代碼引用它為止。

自定義元素

近年來一直在炒作一項新技術,即自定義元素——瀏覽器原生的組件庫,這意味著用戶無需下載、解析和編譯額外的字節(jié)。

從 2014 年開始,我們已經基于 v0 規(guī)范創(chuàng)建了一些自定義元素。然而,由于標準仍然在不斷變化,我們并沒有投入太多精力。直到 2017 年,Web Components v1 規(guī)范發(fā)布,并且 Chrome 和 Safari 實現(xiàn)了這一規(guī)范,我們才開始更廣泛地采用自定義元素。

在移除 jQuery 期間,我們也在尋找用于提取自定義元素的模式。例如,我們將用于顯示模態(tài)對話框的 facebox 轉換為<details-dialog>元素(https://github.com/github/details-dialog-element)。

我們的漸進式增強理念也延伸到了自定義元素上。這意味著我們將盡可能多地保留標記內容,然后再標記上添加行為。例如,<local-time>默認顯示原始時間戳,它被升級成可以將時間轉換為本地時區(qū),而對于<details-dialog>,當它被嵌在 <details>元素中時,可以在不使用 JavaScript 的情況下具備交互性,它被升級成具有輔助增強功能。

以下是實現(xiàn)<local-time>自定義元素的示例: 

  1. // local-time 根據(jù)用戶的當前時區(qū)顯示時間。  
  2. //  
  3. // 例如:  
  4. //   <local-time datetime="2018-09-06T08:22:49Z">Sep 6, 2018</local-time>  
  5. //  
  6. class LocalTimeElement extends HTMLElement {  
  7.   static get observedAttributes() {  
  8.     return ['datetime']  
  9.   }  
  10.   attributeChangedCallback(attrName, oldValue, newValue) {  
  11.     if (attrName === 'datetime') {  
  12.       const date = new Date(newValue)  
  13.       this.textContent = date.toLocaleString()  
  14.     }  
  15.   }  
  16.  
  17. if (!window.customElements.get('local-time')) {  
  18.   window.LocalTimeElement = LocalTimeElement  
  19.   window.customElements.define('local-time', LocalTimeElement)  

我們很期待 Web 組件的 Shadow DOM。Shadow DOM 的強大功能為 Web 帶來了很多可能性,但也讓 polyfill 變得更加困難。因為使用 polyfill 會導致性能損失,因此在生產環(huán)境中使用它們是不可行的。

 

責任編輯:龐桂玉 來源: 前端之巔
相關推薦

2024-06-27 13:45:21

2021-06-04 05:21:19

KubernetesDocker容器

2013-03-12 10:05:08

Node.jsGitHub開源

2020-05-15 08:30:25

前端開發(fā)工具

2011-12-26 09:38:24

諾基亞SymbianBelle

2023-11-27 07:53:44

2016-12-27 15:13:12

系統(tǒng)

2015-06-10 10:50:29

程序員感覺到累

2012-02-22 15:32:11

海量數(shù)據(jù)

2025-05-12 08:28:23

2020-06-19 14:55:11

Kubernetes容器技術

2025-02-24 10:36:15

2024-07-04 08:56:35

Vue3項目Pinia

2021-10-20 14:29:44

layuijQuery前端

2023-09-05 09:49:03

2018-09-14 18:00:29

無損網(wǎng)絡

2022-08-26 08:00:19

企業(yè)架構IT

2019-08-05 08:42:37

物聯(lián)網(wǎng)IOT技術

2025-06-24 02:00:00

5G-A運營商基站

2011-06-08 10:30:08

MongoDB
點贊
收藏

51CTO技術棧公眾號

久久激情免费视频| 黑人无套内谢中国美女| 国产美女性感在线观看懂色av| 麻豆成人在线| 久久亚洲综合国产精品99麻豆精品福利 | 天天操天天爱天天爽| 哥也色在线视频| 91丨九色丨黑人外教| 成人欧美一区二区三区在线湿哒哒| 欧美成人三级视频| 国产调教一区二区三区| 精品免费一区二区三区| 天天视频天天爽| 韩国成人免费视频| 欧美黑人一区| 国产人成亚洲第一网站在线播放| 91中文在线观看| 四虎精品永久在线| 欧美福利网址| 亚洲一区999| 国产精品久久久久久在线观看| 国产一区二区精品调教| 午夜av一区二区三区| 一区二区在线观| 丝袜视频国产在线播放| 丁香婷婷综合激情五月色| 国产日韩欧美在线看| 国产毛片aaa| 欧美日韩亚洲一区在线观看| 日韩一区二区av| 老熟妇一区二区| 538任你躁精品视频网免费| 精品视频免费看| 波多野结衣家庭教师在线播放| av片在线观看永久免费| 国产精品久久久久久户外露出| 欧美不卡福利| 日本免费不卡视频| 丁香激情综合国产| 亚洲aaa激情| 国产又大又黄的视频| 青椒成人免费视频| 国产91久久婷婷一区二区| 天天操天天爽天天干| 欧美精品福利| 九九久久久久99精品| 羞羞在线观看视频| 成人在线亚洲| 亚洲午夜色婷婷在线| 国产又粗又猛又爽视频| 国产成人一区二区三区影院| 亚洲区一区二区| 国产精品无码久久久久一区二区| 亚洲免费观看高清完整版在线观| 亚洲激情电影中文字幕| 国产白袜脚足j棉袜在线观看| 成人爽a毛片| 亚洲国产精品一区二区三区| 熟妇人妻久久中文字幕| 日韩av网站在线免费观看| 日韩电影网在线| v8888av| 欧美日韩国产传媒| 中文日韩电影网站| 天堂网中文在线观看| 99精品在线观看| 精品国产自在精品国产浪潮| 中国一级片在线观看| 欧美日韩第一区| 国内精品国产三级国产在线专| 国内免费精品视频| 日韩精品电影在线观看| 成人动漫网站在线观看| 亚洲高清精品视频| 91精品中文字幕| 色老头在线观看| 性做久久久久久免费观看| 97国产在线播放| 二区三区不卡| 欧美日韩亚洲丝袜制服| 小早川怜子一区二区三区| 欧美一区一区| 日韩av在线免费观看| www.黄色在线| 香蕉久久网站| 91国内在线视频| 精品久久久久久久久久久久久久久久| 奇米精品一区二区三区在线观看| 亚洲va久久久噜噜噜| 日韩有码第一页| 国产欧美日产一区| 99久久99久久精品| 自拍偷拍欧美视频| 日韩一区二区三区四区五区六区| 成人性生活免费看| 天天做天天爱综合| 51精品国产黑色丝袜高跟鞋 | 亚洲精品乱码| 国产精品三级在线| 亚洲精品字幕在线观看| 日本一区二区三区免费乱视频| 精品久久久无码人妻字幂| 亚洲精品一级二级| 精品国产伦理网| 小嫩苞一区二区三区| 午夜亚洲影视| av蓝导航精品导航| jzzjzzjzz亚洲成熟少妇| 亚洲在线视频免费观看| 我要看一级黄色大片| 欧美顶级毛片在线播放| 欧美成人合集magnet| 一级黄色在线视频| 成人福利视频在线| 综合视频在线观看| 久久久成人av毛片免费观看| 亚洲第一偷拍网| 91精品一区二区三区蜜桃| 久久中文精品| 久久亚洲午夜电影| 欧美黑人猛交| 91精品国产综合久久香蕉的特点| 亚洲激情视频小说| 9色国产精品| 俄罗斯精品一区二区| 黄色免费在线观看网站| 在线观看国产一区二区| b站大片免费直播| 国产精品一区亚洲| 春色成人在线视频| 直接在线观看的三级网址| 欧美乱妇一区二区三区不卡视频| 中文字幕第20页| 欧美一级一区| 久久人人爽爽人人爽人人片av| 2021中文字幕在线| 精品国产一区二区三区久久影院 | 亚洲91视频| 国产乱肥老妇国产一区二| 国产精品一区在线看| 色综合久久综合网| av小说在线观看| 天堂资源在线中文精品| 日本精品免费| 久久xxx视频| 中文字幕少妇一区二区三区| 亚洲男人天堂网址| 国产欧美日韩麻豆91| 成人亚洲精品777777大片| 成人一区而且| 91亚洲午夜在线| 污片在线免费观看| 精品免费视频.| 国产福利拍拍拍| 久久嫩草精品久久久久| 日本精品久久久久中文字幕| 欧美日韩高清| 91九色蝌蚪国产| 中日韩高清电影网| 亚洲国产成人av在线| 日韩三级视频在线| 久久久精品蜜桃| www.色欧美| 重囗味另类老妇506070| 国产精品免费区二区三区观看| 超碰资源在线| 亚洲视频第一页| 亚洲性在线观看| 一区二区三区小说| 午夜久久久久久久| 日本大胆欧美人术艺术动态| 成人手机视频在线| 9l亚洲国产成人精品一区二三 | 91在线你懂得| 亚欧在线免费观看| 亚洲欧美日韩高清在线| 国产伦精品一区二区三区四区视频| 天堂在线中文网官网| 在线观看欧美成人| 亚洲国产综合一区| 色综合天天天天做夜夜夜夜做| 久久嫩草捆绑紧缚| 不卡免费追剧大全电视剧网站| 黑人糟蹋人妻hd中文字幕| 国产精品videosex性欧美| dy888夜精品国产专区| 午夜精品成人av| 欧美超级免费视 在线| 欧美女子与性| 91精品蜜臀在线一区尤物| 在线观看中文字幕视频| 亚洲欧美视频一区| 人妻在线日韩免费视频| 精东粉嫩av免费一区二区三区 | 青青国产91久久久久久| 亚洲精品无码国产| 欧美最新另类人妖| 懂色一区二区三区av片| 青青在线精品| 69av成年福利视频| av片在线观看| 中文字幕欧美日韩va免费视频| 99久久亚洲精品日本无码| 日韩欧美aaa| 国产在线免费视频| 中文字幕一区二区三| 添女人荫蒂视频| 国产麻豆成人传媒免费观看| 日韩毛片在线免费看| 欧美三级午夜理伦三级中文幕| 涩涩涩999| 日韩av三区| 成人永久免费| 国产乱码精品一区二区三区亚洲人| 日韩av大片在线| 女厕盗摄一区二区三区| 欧美日本黄视频| 香蕉视频在线播放| 亚洲色图色老头| 亚洲 美腿 欧美 偷拍| 日韩欧美精品三级| 国产麻豆精品一区| 欧美美女一区二区| 中文字幕激情视频| 在线观看日产精品| 日韩熟女一区二区| 色综合天天综合网天天看片| 国产精品6666| 亚洲国产sm捆绑调教视频| 欧美成欧美va| 一区二区三区四区蜜桃| 91日韩中文字幕| 亚洲欧美日韩在线不卡| 国产日产精品一区二区三区的介绍| 国产日韩亚洲欧美综合| 成人性生交大免费看| 久久色在线观看| 91精品人妻一区二区| 91视频国产观看| 国产麻豆xxxvideo实拍| 99久久伊人网影院| yy6080午夜| 久久亚区不卡日本| 97人妻精品一区二区免费| 久久精品亚洲乱码伦伦中文| 男女黄床上色视频| 久久久综合九色合综国产精品| 蜜臀av一区二区三区有限公司| 96av麻豆蜜桃一区二区| 亚洲午夜福利在线观看| 国产欧美一区二区三区在线老狼 | 日韩成人免费| 亚洲综合欧美日韩| 亚洲91精品| 青春草国产视频| 国产精品亚洲欧美| 久久婷婷国产91天堂综合精品| 人人精品人人爱| www.成年人| 国产成人免费在线视频| 成人无码www在线看免费| 久久久久久久久久电影| 国产极品视频在线观看| 中文字幕一区二区在线播放| 亚洲国产美女视频| 亚洲高清免费观看高清完整版在线观看 | 午夜成人在线视频| 日韩在线视频不卡| 欧美精品免费视频| 亚洲国产精品久久久久爰性色| 亚洲精品www久久久| 搞黄视频免费在线观看| 久久在线精品视频| 爱搞国产精品| 国产精品久久久久久久app| 精品一区二区三区免费看| 国产一区精品视频| 不卡中文字幕| 国产精品视频二| 巨乳诱惑日韩免费av| 中文字幕1234区| 91伊人久久大香线蕉| 99久久99久久精品免费看小说.| 亚洲黄色性网站| 少妇太紧太爽又黄又硬又爽| 欧美精品九九99久久| 无码国产伦一区二区三区视频| 一本色道久久综合狠狠躁篇怎么玩| 免费在线午夜视频| 91av视频在线免费观看| 日韩电影精品| 欧美激情专区| 好看的日韩av电影| 国产精品人人爽人人爽| 大白屁股一区二区视频| 奇米网一区二区| 精品露脸国产偷人在视频| 91国产精品一区| 亚洲免费中文字幕| 污网站在线免费看| 国产精品自产拍在线观| 欧美美女在线观看| 久艹在线免费观看| 韩国女主播成人在线观看| 免费看污黄网站在线观看| 亚洲图片有声小说| 国产精品久久久久久久久久久久久久久久久久 | 99久久精品无码一区二区毛片| 国产亚洲一区| av7777777| 豆国产96在线|亚洲| 国产精品精品软件男同| 欧美性大战久久久久久久| 色网站在线免费观看| 欧美大秀在线观看| 在线不卡一区| 亚洲精品久久久久久一区二区| 亚洲永久字幕| 波多野结衣视频播放| 亚洲一区中文在线| h片在线免费看| 久久久成人精品视频| 韩国三级一区| 欧美视频1区| 国产精品日本| 一级特级黄色片| 性欧美疯狂xxxxbbbb| 好吊视频一二三区| 久久99国产精品自在自在app| 亚洲国产aⅴ精品一区二区三区| 色一情一区二区三区四区| 久久蜜桃资源一区二区老牛| 内射中出日韩无国产剧情| 婷婷综合另类小说色区| 亚洲AV无码精品国产| 九九精品在线观看| 亚洲成人黄色| 毛片av在线播放| 成人午夜免费电影| 精品少妇爆乳无码av无码专区| 欧美成人精品3d动漫h| 亚洲国产精品精华素| 91在线国产电影| 一区二区影视| 韩国三级hd中文字幕有哪些| 一区二区视频在线| 成人免费视频国产| 欧美激情一级二级| 日韩母乳在线| 乱子伦视频在线看| 国产精品水嫩水嫩| 一二区在线观看| 欧美成aaa人片在线观看蜜臀| 亚洲一区二区免费在线观看| 久久亚洲中文字幕无码| 2020国产成人综合网| 亚洲永久精品一区| 久久久精品国产亚洲| 99久久人爽人人添人人澡| 国产精品沙发午睡系列| 国产喷白浆一区二区三区| 国产又粗又猛又爽| 欧美高清视频免费观看| 美日韩黄色大片| 天天插天天操天天射| 亚洲男人天堂av| 囯产精品久久久久久| 日本欧美中文字幕| 97精品97| www男人天堂| 色伊人久久综合中文字幕| 91涩漫在线观看| 波多野结衣成人在线| 亚洲综合电影一区二区三区| 日韩一级片在线免费观看| 欧美一级生活片| 亚洲性色av| 国产四区在线观看| 99精品久久久久久| 国产成人精品一区二区色戒| 欧美区在线播放| 美女网站一区| 日日夜夜精品视频免费观看| 精品久久久久久久久久久| 日本视频在线播放| 精品国产中文字幕| 美国三级日本三级久久99| 国产一级免费av| 色偷偷av一区二区三区| 红杏一区二区三区| 最新天堂中文在线| 精品国产乱码久久久久久天美| 日本成a人片在线观看| 久久96国产精品久久99软件| 精品一区二区三区在线观看| 国内免费精品视频| 欧美精品免费在线观看| 日韩成人精品一区| 一区二区不卡免费视频| 欧美xxxx在线观看|