2019 年了,為什麼我還在用 jQuery?

来源:https://www.cnblogs.com/dou485/archive/2019/08/30/11435751.html
-Advertisement-
Play Games

許多人都在提倡: “直接用原生的 JavaScript 就好了,不需要 jQuery 了”。 You might not need jQuery嘗試告訴我們,擺脫 jQuery 是一件很容易的事情。但是,它的第一個例子恰恰告訴我們用 jQuery 其實也不錯,因為我們寫了 10 行原生的 JavaS ...


許多人都在提倡: “直接用原生的 JavaScript 就好了,不需要 jQuery 了”。

You might not need jQuery嘗試告訴我們,擺脫 jQuery 是一件很容易的事情。但是,它的第一個例子恰恰告訴我們用 jQuery 其實也不錯,因為我們寫了 10 行原生的 JavaScript 代碼,其實只需要 1 行 jQuery 代碼就夠了。

 

 

多 JavaScript 的 API,尤其是 DOM 相關的 API,挑戰了我的審美哲學,直白點說,我覺得它們太糟糕了!el.insertAdjacentElement('afterend', other)當然也可以用,但是$(el).after(other)更加簡潔。$()函數也沒那麼好看,我沒有特別喜歡,但是它比原生的 API 好太多了。

你們如何獲取某個元素的 sibling 呢?到底用nextSibling還是用nextElementSibling?它們有什麼不同?各個瀏覽器分別支持哪個方法?當你忙著去 MDN 查文檔的時候,我直接用 jQuery 的next和prev()就好了。

許多常用的 JavaScript 的標準 API 都挺奇怪的,這裡我就不列出來了,大家去You might not need jQuery看看就知道了。

寫代碼的時候,我們總會需要使用一些常用的幫助函數,You might not need jQuery列舉了很多,使用 jQuery 可以很方便的使用這些幫助函數,這樣我們就不需要每次都去 Stack OverFlow 上去複製代碼了。。。

 

 

瀏覽器的相容問題已經沒有以前那麼頭疼了,但是它還是個不小的問題,除非你覺得只要 85%的用戶 OK 就行。關於這個問題,大家可以閱讀我的Why Hello CSS doesn’t use CSS variables。

那麼,我們必須使用 jQuery 嗎?當然不是!使用任何第三方庫都是有代價的,增加了複雜度,也增加了文件大小。但是,jQuery 其實沒那麼大,壓縮之後的大小隻有 30K。如果我們去掉 ajax 以及一些不常用的功能的話,就只有 23K;如果我們使用 querySelector 替代 SizzleJS 來構建的話,則只有 17K 了。無論是 30K 還是 17K,對許多應用來說,這個大小都是完全可以接受的。

大家不妨看看Bootstrap removing jQuery,為了移除 jQuery,他們也是花了不少精力啊:自己擼幫助函數;放棄相容 IE,因為太難寫了;他們花了 1 年半時間來倒騰這個。最終的結果在我看來,這些努力似乎不值得。

我理解他們為什麼這麼做,大家希望在 Vue 項目中使用 Bootstrap,但是同時使用 Vue 和 jQuery 的話有點傻。對於減少網頁大小,我非常同意,也很喜歡Web bloat與The Ethics of Web Performance兩篇博客中的觀點。但是,我們需要實際一點,不要過於理想主義。添加 17K 的 jQuery 真的那麼糟糕嗎?當我吐槽 Medium 或者 New York Times 這樣的網站需要的 JS 文件超過 1M 的時候,有的人會這樣反駁:”莫非你還在用 56k 的帶寬?“,但是,為什麼 17K 的 jQuery 就那麼不能接受了呢?

 

 

不用 jQuery 而自己寫幫助函數也可以,比如你希望你寫的函數被其他人復用,或者你寫的函數特別小。但是為了不用 jQuery,放棄向後相容?那我覺得還是用 jQuery 得了。所有事情都用 jQuery 實現當然不好,但是任何時候都不用 jQuery也不是什麼明智之舉。

我不是 jQuery 的狂熱粉絲,我也願意使用一些簡化版的 jQuery,只要它們可以讓 JS 的 API 更好用一點。You might not need jQuery推薦了bonzo和$dom,以及其他一些 AJAX 庫,但是大多數看起來沒怎麼維護。如果沒有足夠吸引人的理由,最好不要去替代 jQuery,因為 jQuery 本身沒什麼大毛病。

有些讀者也許會去比較 Vue, React 以及其他前端框架,但是這篇博客的目的是比較 jQuery 與原生的 JavaScript,沒有打算去論證整個前端到底應該如何開發。

話說回來,我覺得有些場景下只使用簡單的 JavaScript 也挺好的,主要原因是我希望網頁可以足夠快,可以讓儘量多的人正常訪問。以我的經驗,使用服務端渲染,再加上漸進式增強 JavaScript,是最佳的實現方式,開發起來很簡單,訪問速度足夠快,BUG 也很少。

小編是一個有著5年工作經驗的架構師,關於web前端,自己有做材料的整合,一個完整學習web前端的路線,學習材料和工具。需要的伙伴可以私信我,發送“前端”等3秒後就可以獲取領取地址,免費送給大家。對於學習web前端有任何問題(學習方法,學習效率,如何就業)都可以問我。希望你也能憑自己的努力,成為下一個優秀的程式員!

難道前端框架不好嗎?當然不是,沒有什麼絕對不好的技術,所有技術都有一定的取捨,當然也包括 jQuery。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML 描寫 HTML是網頁語言(超文本標記語言),採用標簽格式進行編寫 HTML標簽:採用尖括弧包圍的關鍵字,通常成對出現(閉合標簽),但是也有個別非成對的(非閉合標簽) HTML文檔:一個完整的HTML編寫的文檔,可以形成一個瀏覽器可以訪問的資源網頁 如上就是最簡單的HTML文檔內容, 標簽之 ...
  • 遞歸: 所謂遞歸,就是既有傳遞,又有回歸,與其說是傳遞與回歸,初學不如理解是一種 “循序遞進”與“規律約束”。 為什麼這樣說,因為遞歸演算法相比較於迴圈在代碼結構方面個人認為更加簡潔清晰,清晰易懂,遞歸註重的是一種有序的規律,所以在每個程式開始之前,我們只要能找到一個使程式循序遞進的規律;並且在整個過 ...
  • 0830自我總結 HTML標簽嵌套規則 1.塊級元素: div、h1~h6、address、blockquote、center、dir、dl、dt、dd、fieldset、form、hr、isindex、menu、noframes、noscript、ol、p、pre、table、ul 特點:總是在新 ...
  • 博客園美化小火箭 一.代碼 二.原理 三.效果展示 ...
  • 問題在於對數據的操作,或數據類型,或數據名稱 ...
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app"> <!-- 在組件標簽上綁定的事件都vue的自定義事件。 --> <v-xiaosh ...
  • 完成最基礎的Vue環境及新建一個vue項目。 一般來說,我們拿到一個項目需求或者得到一個需求的時候,第一件應該做的事情不是立馬坐在電腦前面去寫代碼,如果你這麼做的,好吧。。。我只能暫時認定你為一個剛上路的。 首先,用戶給你一個需求,我們先要做的是需求的分析,明白用戶需要什麼?我們當前的條件能為他創造 ...
  • 原文地址:https://www.cnblogs.com/wisewrong/p/9642264.html 一、測試模版 數組去重是一個老生常談的問題,網上流傳著有各種各樣的解法 為了測試這些解法的性能,我寫了一個測試模版,用來計算數組去重的耗時 這裡分別創建了兩個長度為 10W 和 5W 的數組 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...