

從「鄙視 jQuery」聊起 -技術鄙視從何而來?
source link: https://blog.darkthread.net/blog/jquery-dispise/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

從「鄙視 jQuery」聊起 -技術鄙視從何而來?
2021-05-10 09:56 PM 17 3,981前幾天在臉書上聊到 jQuery 是否仍值得學習引來迴響,關於鄙視這件事,我還有一些想法,寫篇文章梳理一下。(謎之聲:果然年紀愈大愈嘮叼)
事情的源起是這幾年前端框架輩出,前端主流圈興起一波鄙視 jQuery 的潮流,嫌 jQuery 肥、慢、落伍,以追求 jQuery Free 為榮。甚至還有門派醉心於只用 Vanilla JavaScript 開發(香草口味的 JavaScript,不依賴任何程式庫或框架,只用純粹的 JavaScript),多寫 N 倍程式碼也再所不惜。
我信仰 KISS 主義,jQuery 的簡潔深得我心,尤其在老 IE 那個時代,一舉搞定跨瀏覽器問題,讓許多初心者能快速上手網頁開發,功德無量。但近年來隨著瀏覽器不斷進化,IE 式微,這塊優勢已漸漸縮小。(這裡有篇整理)
但我的看法是 - 若你並非以前端開發為志業,只想讓自己具備寫網頁的技能,那麼 jQuery 仍是當前投資報酬率最高的選項。但如果希望程式碼堅韌好維護,建議可以搭配 Vue.js 實現 MVVM,基本上可以輕鬆實現自己想要的網頁介面。
jQuery 不適合打造 Gmail、FB 等級複雜又講求效能的高端應用,但應付一般企業內部營運系統、不求花俏(所謂工程師風格)的官方網站綽綽有餘。而 jQuery 所需的學習時間、開發工具、開發程序,跟 Angular、React 等當今主流框架相比,是開休旅車跟開 F1 賽車的差距。(註:Vue.js 為漸進式框架,若走輕前端相對簡單) 更甭提前端框架煙火式的生命週期,每兩三年就來一次革命,從框架、編譯工具、開發方法通通換過一輪。(有趣的是前端狂熱者並不以此為苦,還愈換愈嗨)
依此道理,如何選擇應該要看目的,是為了通勤?還是要拼世界冠軍?答案截然不同。
如果你從事的網頁開發必須做到頂尖否則無法存活,擁抱主流,選擇 Vue.js/Angular/React (簡稱 VAR) 才能保有競爭力,那麼不斷學習跟砍掉重練是必須的代價;若你只想擁網頁開發能力,滿足工作或興趣上的一般需求,jQuery 的易學與穩定性,還是很好的選擇,但建議導再投資點時間學習 MVVM,不但省時省力,遇上複雜一點的需求也不致失控,。
jQuery 一路看著 Knockout.js、Ember.js、Backbone.js、Ext.js、AngularJS 淡出舞台,我相信它還會繼續見證當今巨星的輝煌與衰敗... 😛
回到鄙視 jQuery 這件事情上,我蒐集到一些論點:
- jQuery 很肥
jquery-3.6.0.min.js 89.5KB、jquery-2.2.4.min.js 85.6KB、jquery-1.12.4.min.js 97.2KB,算肥嗎?以當代的網路頻寬及硬體規格,我覺得還好。 - jQuery 很慢
這算事實,主流框架幾乎都會採用 Virtual DOM 概念,大部分情況會比 jQuery 直接操作 DOM 效能好。但如果採用 jQuery + Vue.js MVVM,多少也能享受 Virtual DOM 帶來的優勢。 - jQuery 程式不如前端框架簡潔
有點難說,jQuery 有非常多現成套件,有些只需簡單設定即能實現炫麗又複雜的功能,甚至也找得到用 Template 套版產生元素的機制。但前端框架 <my-component> 將邏輯封裝成自訂元件方便組裝重複利用,又內建 Template、MVVM,是比較方便 - jQuery 程式不結構化很鬆散難控管
同意。前端框架會強迫你將網頁拆解成一個個元件,各元件可獨自開發避免彼此干擾,使用 TypeScript 導入強型別會大幅提高程式可維護性。相較之下,寫 jQuery 程式雖然也可能實現類似的架構,但它畢竟只是程式庫,全靠開發者自身的功力。 - jQuery 在國外早被淘汰了,只剩你們還在用
被這說法嚇一大跳,趕緊查一下 W3Techs 趨勢分析壓壓驚,還好還好,到今天為止全球還有 95% 的網站在用 jQuery。 - jQuery 靠事件驅動連動輸入欄位、畫面元素,介面複雜到一定程度就會失控
這是鐵一般事實,我自己就有不少慘痛經驗,所以才轉向 MVVM 尋求救贖。過去 jQuery 可搭配 Knockout.js、AngluarJS 補足 MVVM 這塊,但新一代 React、Angluar 自成一套完整體系、開發編譯流程,跟傳統 jQuery 開發方式很難相容。唯一的異數是 Vue.js,它是漸進式框架,仍有機會跟 jQuery 整合應用,也是我這幾年走「輕前端」慣用的做法。
分析下來,其實大部分的論點我是贊同的。如果要開發 SPA(Single Page Application,像 Gmail 那種一個晝面不切換 URL 做完所有事) 的高等應用,我也會毫不猶豫改用 Vue.js + TypeScript,套用現成框架讓專案架構分明好維護;但如果我只是想在 HTML 頁面加些動態處理、寫寫財務會計業務後台的查詢介面,或是搞標準新增修改刪除(CRUD)資料編輯網頁,為什麼我要花幾個月去學習一套功能強大可以寫出 FB/Gmail 的前端框架?而不是用 jQuery + MVVM 有效率地把介面做好,餘下時間拿來跟客戶談需求、搞懂商業邏輯,寫更多系統做更多生意?
每個技術都有其優缺點,存在某個採用它可屌打其他解決方案的絕佳情境,既然如此,你可以真心喜歡,欣賞某種技術,甚至熱情地四處推坑推廣,為何會想要去貶低其他技術?
關於技術圈鄙視心理的由來,我是這麼想的。
單純欣賞一種程式語言、程式庫、平台、工具,並不足以激發你鄙視其他競爭選項的心態。產生這類心態有個共同特質,自己選擇的語言、工具通常學習成本偏高,因而需要靠著否定其他替代選項來鞏固自己選擇的正當性。(否則花了加倍心血卻成效不彰情何以堪?) 我把它歸類為心理學所謂的「勞力辯證」:當人對一件事投入大量精力後會誇大其價值,屬於一種認知失調。對事物長期投入心力後,將無法客觀地評估它。(延伸閱讀:讀書筆記-行為的藝術)
所以這類鄙視有個共通點 - 都是複雜難學技術的擁護者去鄙視另一種易學好上手且普遍應用的技術,經典範例:PHP、jQuery。
PHP、jQuery 走過類似的路,而我大膽預測同樣的狀況也會發生在 Python 身上。且慢,你可知 Python 氣勢如虹,在學術界與 AI 界萬夫莫敵,怎有人敢鄙視它?
但回想一下,當年 PHP、jQuery 興起之際,足以匹敵競爭者尚未現身前,不也是如此,當時誰會去鄙視它們呢?相關教學滿天飛,套件多如牛毛,大家搶著學爭著用,靠它們打造出各式網站。但發展一段時間後,這類簡單解決方案的缺點逐漸浮現,針對這些缺失進行改良,有志之士開始研發較複雜但結構化易維護,威力也更強大的替代選擇,當進階技術吸引到夠多的支持者,相關社群成長茁壯到一定規模,鄙視的聲音就出現了。
而這類鄙視,還有一個來源是:業界流傳的鬼故事跟不好的自身經歷。一項技術易學好上手門檻低,使用者眾,資質參差不齊,所謂樹大必有枯技,難免有經驗不足或漫不經心的開發者寫出荒唐的程式,不幸遇上了便留下「jQuery 寫的東西爛透了,根本沒法維護」刻板印象,再延伸成「你看這些用 VAR 寫的東西品質就比 jQuery 好,所以 VAR 比較優秀」的結論,但這裡面存在邏輯錯誤。願意學習 VAR 的開發者通常學習心態較積極且開發經驗多,是作品品質佳的原因之一。要不要藉此特性篩選優質開發者是一回事,但把品質低落的錯怪到 jQuery/PHP 身上而非寫程式的人身上,便有失公允。技術本身是中立的,端看操作者的功力、心態,使用的情境,決定最後的結果。你知道 Bootstrap 4 跟 KendoUI 背後就是用 jQuery 嗎?
最近還聽到更另類的角度,來自邁可桑德爾《成功的反思》,他認為主流菁英過度強調自己的努力,認為自己因為努力而成功,流露不自覺的傲慢打壓他人,認定失敗者皆因不努力。對映「到有能力學成複雜技術的人瞧不起只會用簡單入門級工具者」,認為他們不上進,鄙視油然而生,這個論點超兇,但其中有部分精神相近。
不同技術各有擅長的應用情境,每個人偏好不同(有人喜歡簡潔輕巧的方案、有人鍾情滿滿的設計模式一絲不拘),技能背景與工作重心各異(專職前端開發者 vs 在前端沾醬油的全端工程師),而不同專案要求的重點也不會一樣,有的著重開發省時,有的著重穩定絕不出錯,有的著重執行速度,很難有一種開發方式能滿足所有情境(唯一不能打折的要求是資訊安全)。如果真心喜歡你的選擇,那就努力傳教四處推坑,何須四處貶低跟你想法不同的人?(我唯一容不下的是 SQL Injection,主張人人得而誅之)
最後,雖然我覺得 jQuery 是輕巧易上手資源又豐富的好選擇,即使決定採用 jQuery,還是該抱著戒慎恐懼的心態持續精進,別成為「jQuery 寫的程式很爛」形象的幫兇。:D
Recommend
-
32
-
54
在开发过程中,会经常做的一件事就是在主线程中去刷新 UI,基于这个操作我们作如下几个思考。 为什么 UI 操作一定要在主线程? 如果把 UI 操作放到后台线程会出现什么样的情况呢? 从 UIKit 说起
-
10
从滴滴种树聊起,构建成功游戏化的五大要素 吴依旧 2020-12-18 0 评论...
-
12
最近发现有不少需求可以通过 Nginx JavaScript (NJS)来完成,相比较运行一套完整的 Web 服务来说,轻量高效的方案总是惹人喜爱,更何况这套方案是由 Nginx 官方团队推出,并搭上了繁荣的 JavaScript 生态。 本篇文章先从 NJS 容...
-
21
阅读本文大概需要 4 分钟。 在 Go 语言中文网微信群 有人提出了这样的疑问,如下图(文档地址: https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html ) ...
-
7
从50起XR投资聊起,全球或将重回2016 VR热?_VR陀螺 从50起XR投资聊起,全球或将重回2016 VR热? 发布时间:2021-06-18 10:37 | 标签: HTC
-
6
摘要:Docker为什么火,靠的就是Docker镜像。他打包了应用程序的所有依赖,彻底解决了环境的一致性问题,重新定义了软件的交付方式,提高了生产效率。 本文分享自华为云社区《
-
8
关于容器的历史、发展以及技术本质,在互联网上已经有非常多的文章了。这里旨在结合自身的工作经验和理解,通过一系列的文章,讲清楚这项技术。关于容器的历史、发展以及技术本质,在互联网上已经有非常多的文章了。这里旨在结合自身的工作经验...
-
6
-
3
你有看过“原始建造”类型的视频吗?在这类视频中,没有任何华丽的剪辑技巧,也没有炫彩的视频渲染,只有不断劳动的人和停不下来的动作,本文作者通过分析“原始建造”类视频,向我们分享了有关现代人的厌倦与怀乡的思考,一起来看看吧。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK