編譯 | 核子可樂、Tina
“2022 年已經到來,我們是時候反思 Web 開發中的種種過時軟體、炒作歪曲和荒謬趨勢了。把握這一年,我們也該重新專注于性能與技術運用,把手段和目的重新統一起來。當然,我不是勸大家用彙編或者 C 語言搞 Web 開發,但關于 JavaScript、Ruby on Rails、Python、Django 以及 PHP 架構的瘋狂觀點也該消停一下了。”
這是一篇充滿憤怒的部落格。作者是一位出生于 70 年代的“技術憤青”unixsheikh,他用“激進”的方式抛出了一個觀點:“Web 開發人員應該花費更多時間來進行優化”。
很顯然,把問題歸咎于 Web 開發有些偏頗,但他的觀點也的确喊出了一些人的心聲。文章發出後,有支援者給他發郵件說:“關于文中的問題,我也一直在跟自己的老師和夥伴們争辯。我用過一個項目工具,裡面包含 1786 個包、存在 69 項漏洞——45 個中風險、20 個高風險、4 個嚴重風險。其‘重達’432 MB,而且内部如同一團亂麻。更可笑的是,用它甚至不足以輸出‘hello world’,因為還另外需要單獨的路由包和狀态管理包。這一切太瘋狂了,但每個人都在這條路上狂奔,還美其名曰‘現代方法’。”
還有些網友在 Hacker News 上評論說,“它包含了一些讓人無法接受的真話”。同時也有反對者說,“很多人都認為 Web 開發是一件微不足道的事情,不需要前端工程師,他們的存在隻是為了增加 JavaScript 的複雜性,網站的 100% 功能都可以使用純 HTML + HTTP 表單處理。但現實情況 (IMO) 是:浏覽器是‘新作業系統’。對于大多數消費者和商業軟體,在浏覽器中運作是顯而易見的選擇。不管你喜歡它還是讨厭它,這就是目前的實作方法。”
不同的人總會帶來不同的看法,有争論不一定是壞事情,我們将 unixsheikh 的這篇文章翻譯出來,希望能為讀者帶來一些思考。以下是他的分享内容:
不是浏覽器的錯
谷歌 Chrome 正在主導當下的全球網絡浏覽器市場,新的問題也由此而來——作為一家實際意義上的廣告商,谷歌正在不斷推進極具欺騙性與威脅性的 Manifest V3 計劃。
有些朋友天真地把 Mozilla 火狐看作挑戰 Chrome 霸權的救世主與替代品。沒錯,火狐當初确實把我們從微軟 IE 的魔爪下拯救了出來。但如今的 Mozilla 管理能力極為低下。2018 年,Mozilla 從各大搜尋引擎廠商處獲得了 4.357 億美元收入,這筆錢主要用于在世界各地的火狐浏覽器上強推預設搜尋引擎選項。花錢的主要是谷歌,此外還有 Yandex 和百度。雖然形勢還行,但 Mozilla 在 2022 年還是裁判了全球約四分之一(250 人)的員工,理由是新冠疫情造成的經濟動蕩“嚴重影響了公司收入”。但事實真是這樣嗎?胡扯,2018 年 Mozilla 掌門人拿到了 240 萬美元,而且薪酬在過去五年中翻了一番還多。
Mozilla 再也不是那個厚道可靠的老夥計了,要想繼續生存下去,他們必須得來一輪高管大換血、叫停那些沒人想要的産品,重新回歸以捐贈為基礎、以客戶需求為依托的發展道路上來。當然,以上都是閑話,隻為引出第一個真正重要的問題。
我們為什麼需要這些浏覽器供應商?如果沒有他們,不就沒有這麼多屁事了?我認為問題出在所謂“現代 Web 開發人員”身上,他們才是罪魁禍首!
正是這幫所謂的“現代 Web 開發人員”一直在用臃腫且毫無必要的 JavaScript 搭建網站,不斷在并不适合的平台上進行 Web 開發。這相當于逼着使用者使用大廠出品的浏覽器,否則就沒法正常通路網際網路内容。
如果沒有所謂的“現代 Web 開發”,我們根本不需要這些體量如同怪獸般龐大的浏覽器。我們隻需要簡單的輕量化浏覽器就能通路網站上的所有功能,且隻有少數非常專業的網站才需要特殊解決方案。而即便如此,其中大部分特殊網站也完全不必依賴于大型浏覽器。
Web 開發需要一場革新
我知道,有些 Web 開發者并不了解這些更靠譜的開發方式,但這不該成為理由。對于任何一位軟體開發者來說,大家都應該在所用知識之外多學習、多接觸新知識。我們需要了解什麼時候适合用這款工具、什麼時候适合另一款。我覺得是時候來一場 Web 開發大革命了,即除非絕對必要、否則盡量不在網站上使用 JavaScript。
在我看來,這應該是網際網路網站未來發展的必要條件。特别是在“Web 3.0”概念正如火如荼的當下,我認為去 JS 化應該成為除去中心化之外最重要的探索目标。
之是以提出這樣一個戰鬥目标,不隻是因為我們對少數浏覽器開發商的過度依賴引發了大量現實問題,更是因為整個過程正在白白浪費能源。臃腫的網站讓每位通路者的電費飙升,從伺服器端和用戶端兩方面帶來了雙輸結果。
由于浏覽器中 JavaScript 代碼過多(看起來所謂的「現代 Web 開發者」根本不懂怎麼在不用 JS 的情況下開發前端),是以使用者即使是打開最簡單的網頁也會增加裝置功耗。另外,由于采用不适合的伺服器端架構(例如 Rails 和 Django),伺服器的功耗也存在浪費。另外提醒大家,雖然網際網路上運作的大部分網站由 PHP 編寫,但其成本同樣不低。PHP 本身自 v7 版本以來已經解決了内部與外部的一系列重大性能問題,也讓功耗變得相當友好;但“現代 Web 開發者”們仍在使用 Larave、Symfony、Codelgniter 或者 Yii 等低效架構,這些架構的存在讓 PHP 的改進變得毫無意義。
事實上,目前流行的所有架構都糟糕透頂。它們的開發大多基于抽象理論與設計模式,包含不少跟現實應用完全無關的噪聲元素。更重要的是,我呼籲大家直接放棄這些架構——因為性能優化離不開原始代碼。我們應該遠離混亂,而不是添加更多混亂變量。如果某款軟體輸出個“Hello world”都需要 75 個類或者子產品時,它是絕對沒有任何性能優化可言的。回歸簡單、小型和高度優化過的專用庫,告别架構,好嗎?
過去我們讨論 Unix 的時候,常常會想“還有哪些可以丢棄?為什麼會存在這個選項?”這是因為基礎設計總會包含缺陷,完美的設計點是個永遠無法達成的目标。是以與其匆忙添加選項,不如想想哪些選項是真正的“不能沒有”。― Doug McIlroy
就 Rails 和 Django 而言,項目組明顯不了解上面的觀點。Ruby 和 Python 就不該被用于 Web 開發,因為它們太慢了、根本不适合。大家甚至可以用 Bash 建立并運作網站,行是都行、隻是不明智。
有些人認為開發者的時間比計算資源更寶貴,而 Rails 和 Django 的目标就是幫助人們快速完成工作。但這也正是問題所在:如今整個網際網路面臨的過度臃腫問題,就是由這些不負責任且短視的觀點所引發。快就一定對嗎?顯然不是。
作為個人建議,如果您正是一位“現代 Web 開發者”,強烈推薦您使用 Go 語言進行 Web 開發,但前端不要使用 JavaScript。最重要的是,嘗試在不用 Go 标準庫的情況下進行 Web 開發。這不僅是一段學習經曆,也會給您帶來寶貴的提升和啟發。
給 Web 開發者的建議
如果您身為 Web 開發者,希望能認真考慮以下幾點:
如果您在大學或者教育訓練機構裡學過“現代”Web 開發,不妨試着放下自己學到的一切、進行一番獨立思考。除非各位碰巧遇上了好老師,否則站在講台上的很可能是個隻懂理論、照本宣科的家夥。我們得自己研究底層技術的工作原理,做出明智的決定。而所謂現代 Web 開發跟這一切顯然是背道而馳。
了解如何在前端僅使用 HTML 和 CSS 來制作網站。如果必要,可以稍微用 JavaScript 進行一點 UI 改進,但請確定改進需求真實且合理(結合使用者測試來具體驗證)。而且即使合理,也不妨試試不用 JavaScript 能不能達成同樣的效果。
找款低配筆記本測試一下産品。
“Web 應用程式”是另外一個精心設計出來的洗腦詞彙。無論傳遞的是靜态内容還是動态内容,也無論使用者是否能夠進行即時互動,網站的本質仍然隻是個站點。它不是遊戲、也不是谷歌地圖那種複雜的軟體,對于大部分展現内容隻是文本的網站來說,它真的不能被叫作“應用程式”。别被那些流行詞彙給忽悠了,不用 JavaScript、大多數網站也完全可以正常運作。
别再搞什麼單頁網站了!HTTP 協定是專為小型個體和離散請求而設計建構的,它強調每個請求都有其特殊的目标。一次性把整個網站加載到浏覽器上明顯毫無意義,因為其中 90% 的内容根本沒機會進入使用者的視野。最簡單的例子,有必要預先加載“關于我們”之類的頁面内容嗎?那東西有人看嗎?是以,記得把網站分成幾個小部分,讓使用者自主決定想看什麼,這就是 HTML 錨點标簽的用途。隻提供一個小巧的首頁,之後由使用者點選相關超連結來請求自己實際想看的東西。Web 不就是這麼工作的嗎,怎麼到了智能手機上就不一樣了呢?
别再從後端向前端發送 JSON 了,我們不是在建構 API。既然負責内容傳遞的用戶端就是浏覽器,那直接發送 HTML 啊,愣着幹什麼?
讓所有使用者輸入驗證都在伺服器端進行。在開發過程中,盡量隻通過一次接入伺服器的消息往返即完成所有使用者輸入驗證。沒錯,根本不需要 AJAX/JavaScript。JavaScript 基本沒法真正改善使用者體驗;相反,JavaScript 驗證和 JavaScript 本體常常會破壞網站的自然流程,令 TAB 等鍵和其他元素沒法正常工作。另外,任何不在伺服器端進行的輸入驗證都屬于錯誤!換言之,任何基于用戶端的輸入驗證——無論是由 JavaScript 還是浏覽器内置的 HTML 5 來實作——都可以被繞過,畢竟它們可都在用戶端上。
别再往浏覽器上發送字型了。沒多少人真正關心字型,隻要不是太難看就可以。做個使用者測試,結果可能會讓你意外哦。讓浏覽器從作業系統中直接選擇字型就好。
别再把浏覽器發到 CDN 去了。這樣很危險、不利于隐私,甚至可能損害使用者權益。在本地傳遞内容就行。
去掉廣告、删掉彈窗,别在頁面上放那麼多示範文稿、郵件清單和注冊提示之類的垃圾内容。
還使用者一片清靜暢快的天地,讓網站内容盡量清晰簡潔。東西多了反而沒人看。
别在網站上使用 Google Analytics、Facebook 連結和其他社交媒體垃圾!我們得學着擺脫這些固有元素。另外,你真的需要什麼統計資料嗎?如果是,難道伺服器端收集到的統計資料還不夠?真正需要的資訊大部分都可以由伺服器端直接收集,對吧?另外,如果選擇跨伺服器運作,日志還會被自動發送至日志伺服器。是以别再靠什麼 Google Analytics 了,畢竟這東西既沒必要、立場也很值得懷疑——沒準谷歌一直在騙你。
不要使用不适合 Web 開發的程式設計語言。Python 和 Ruby 就是兩種絕不該出現在 Web 上的語言。總之,程式設計語言必須針對性能進行優化,甚至可以考慮在具有嚴苛性能要求的具體任務中使用 C。由此帶來的巨量性能提升可能對應着超出大家想象的成本節約。
牢牢把握所開發軟體的所有權。這種所有權,意味着我們需要對項目中發生的一切負責。這不僅有助于工程品質提升,也會徹底改變我們的開發心态。一旦出了問題,那就是我們自己的責任。項目在使用者計算機上耗了多少電是我們的事、項目對環境的影響是我們的事、項目提供的殘障人士使用體驗是我們的事、項目對未來的影響也是我們的事。如果不願承擔這份責任,就别随便摻和進來。
别再被趨勢和炒作牽着鼻子走。大家應該已經感受到,大多數趨勢和炒作都是利益相關方的刻意引導加上一大幫無知群衆的盲目推動。是以遇到問題自己多想想,别急着站隊。
可能很多朋友覺得這篇文章一點新潮的内容沒有,發在 2001 年還差不多。我也希望是這樣,但很遺憾,這裡的很多内容直到十年後的今天還需要拿出來讨論。如今越來越多的 Web 開發者已經意識到多年來市場上宣揚的“現代 Web 開發”理念是錯的。資源有限,我們不該在伺服器端和用戶端上瘋狂揮霍。
https://12ft.io/api/proxy?q=https://unixsheikh.com/articles/so-called-modern-web-developers-are-the-culprits.html