VOOZH about

URL: https://read01.com/3GBj3EP.html

⇱ 我討厭你的單頁面應用 - 壹讀


Sunday, Apr 12, 2026

我討厭你的單頁面應用

2017/09/01 來源:知乎專欄
簡評:OK,現在作者成功的引起了你的注意,說實話,作者他其實並不討厭你的單頁面應用程序,他只是覺得使用單頁面應用構建程序的時機還未成熟。

也許你的單頁面應用程式是不同的,但我知道的那些單頁面應用大都破壞了瀏覽器的大部分功能,例如後退和前進按鈕、頁面刷新、書籤、發送連結或在新窗口或選項卡中打開連結。他們沒有辦法連結到我看的東西。(哦,我知道這些規則是有例外的,但是它們通常需要更多的努力 —— 遠比許多開發人員準備要努力得要多得多)。 即使它們顯示的實際信息和提供的交互非常簡單,但它們加載起來笨重而緩慢。

我是一個脾氣暴躁的老傢伙嗎?顯然是的,但我的觀點是,從架構的角度來看,大多數單頁應用是選型錯誤和缺少重要機會的產物。

如果這一切似乎對你來說非常抽象,想想是什麼使 web 成為 web 的。 網絡最重要的一個功能就是可以連結到個體的東西,應用程式中的每個重要概念都應該是一個可能的切入點。這使任何人都可以將其用作連結的目標,用戶可以通過他們訪問過的歷史記錄向前和向後移動的事實不是一個 BUG,這是一個重要的 FEATURE

我幾乎可以聽到你說:「但我不 care ,我正在構建的是一個應用程式,而不是一個網站。」我會說:然後呢,建立應用程式,使用桌面或移動作業系統的原生 toolkit,或構建一個 applet,或 Flash 或 Silverlight 應用程式,這都可以,我甚至不反對使用瀏覽器作為應用程式運行時構建相同的東西。但請注意,當你以這種方式執行操作時,你的應用程式在網絡上就像你將其構建為 Java 小程序一樣,你要知道你犧牲了什麼。

這是我認為人們選擇錯誤的地方。似乎對許多人來說,構建 SPA 已經成為構建現代 Web 應用程式的代名詞,任何批評這種方法的人顯然都沒有走向現代世界。 我不能不同意,人們選擇 SPA 而不知道這些缺點,包括不需要維護的框架,客戶端代碼幾乎無法管理的複雜性以及性能和可訪問性問題。

但更重要的是,他們錯過了選擇非 SPA 的好處。他們不知道替代品的好處,那麼替代選擇應該是什麼樣的呢?構建一個傳統的 Web 應用程式,包括伺服器端渲染 HTML,並且謹慎使用JavaScript,以儘可能增強瀏覽器的功能。在這種架構方法中,絕對要清楚的是,實際業務邏輯的責任完全在伺服器上,這包括管理頁面之間轉換的伺服器端狀態機。而且,這不是一個 BUG,而是一個 FEATURE:它能夠使伺服器端的快速更改立即生效。業務邏輯不屬於客戶端,除非你喜歡在支持的各種客戶端中冗餘維護相同的邏輯(除了在伺服器上維護它之外,請記住,你永遠不要信任任何客戶端)。從伺服器端的角度來看,你可以擁有的最佳架構是十年前可以(應該)建立的架構:遵循 REST 原則,包括無狀態通信和資源識別。

有些人反對這一點,因為他們認為 SPA 給你一個更好的架構,我不同意:使用 SPA,你的架構通常是你的框架建議的架構,因為從 Web 的角度來看,你的 SPA 是 Web 所關心的一件事。 使用非 SPA 方法(我將從現在開始稱之為 ROCA),管理你的應用程式的架構是 web 本身之一。再一次,你的伺服器承擔了渲染 HTML 的無聊任務,這是一項財富,而不是負擔。 我個人對於任何現有的客戶端 JavaScript 框架的穩定性和長期可維護性沒有太大的信任。

SPA 方法創造的問題的一個奇妙的例子是工作的並行化。如果你有一個多人的團隊或者同一個 SPA 上工作的多個團隊,你需要提出一個很好的方式來支持這一點。 相反,你可以讓每個團隊建立自己的 Web 應用程式,每個應用程式可以連接到同一個組織(以及駐留在任何地方的所有其他 Web 應用程式,只要你想)同時構建的其他應用程式 —— 實際上依賴於網絡的核心優勢。

在可訪問性方面,在伺服器端渲染語義 HTML 提供了開箱即用的支持,只有一些有限的事情可以用 HTML 做,而且這又是一個 FEATURE,而不是一個 BUG

你也可以解決 SPA 中的一些問題,但它確實需要努力,通過 ROCA 方法,你可以依靠一個知名的、非常成熟的、經過驗證的架構。

當然這並不表示你不要使用 JavaScript 和 Ajax,我完全知道你不能建立一個沒有 JavaScript 的現代用戶界面來啟用一些頁內修改,但這是一個可選的增強功能,而不是架構的驅動因素。 (即使從 REST 的角度來看,使用 JavaScript 是非常好的:在REST 論文中實際上被提及為可選約束,作為「需要代碼」,但其目的是作為擴展瀏覽器來支持內容的一種手段)幾乎每一種情況我都知道,你的 SPA 對用戶沒有好處,而只有積極的方面才能擁抱瀏覽器功能。 你可能認為開發人員有好處,但首先,你應該將這些用戶置於用戶的利益之上,其次,他們大都是相信的,特別是從長遠來看。

所以構建你的 SPA,我並不介意,只要我不必使用它們,只要你知道你放棄了什麼。

原文:Why I hate your Single Page App

擴展閱讀:

您可能感興趣
免責聲明:本文內容來源于知乎專欄,文章觀點不代表壹讀立場,如若侵犯到您的權益,或涉不實謠言,敬請向我們提出檢舉
最新文章 / 服務條款 / 私隱保護 / DMCA / 聯絡我們

壹讀/READ01.COM