反SPA的後端路由三條路線
現代JavaScript 框架旨在構建單頁應用程式SPA,SPA名稱源於它不會返回後端伺服器就能在頁面之間導航的事實,因為所有路由都發生在瀏覽器中。
自從十多年前 SPA 出現以來,JavaScript 已經開啟了 Web 體驗所能達到的天花板,但它是有代價的。那些沒有最好的裝置或最快的網路的人付出的代價最大,當事情沒有按計劃那樣進行時,任何人都會感受到。
3 種不同的解決方案:
- 純 MPA可實現最佳頁面載入效能的潛力。
- “HTML框架”最適合導航到新位置。
- “伺服器元件”最類似SPA體驗。
多頁應用程式 (MPA)
那麼我們回到 PHP 和 Rails 了嗎?不,我希望這不會讓任何人失望。每次我們都和上次不一樣。
雖然完整的伺服器重新載入對於許多站點來說效果很好,但我們已經習慣了能夠在 SPA 中保留客戶端狀態並進行更平滑的轉換的好處。
MPA是讓伺服器處理路由,實現最佳的頁面載入效能,但在瀏覽器中導航,大多數JavaScript框架可以自己生成一些靜態頁面,以保持低互動性的頁面快速和輕盈。
在2010年代初,我們曾經稱之為小工具的空間有了巨大的增長,但現在被稱為島嶼Islands。這些獨立的島嶼更有能力,因為它們可以通過最新的工具(如Astro、Slinkity和Iles)進行伺服器渲染和水化。
這是一種較粗略的方法,對許多網站來說是很好的,但我們已經看到在這一領域的更復雜的工具,從一開始就考慮到這一點,如Marko或Qwik在最大的電子商務解決方案中使用。像eBay的登陸頁面,報告顯示使用MPA這種技術可以減少80-90%的程式碼大小。
HTML Frames
這種方式攔截所有的連結點選或表單提交,並禁用預設行為,然後請求螢幕的新位置,並在完成後替換<body>的內容。最明顯的是Turbo,作為Rails的Hotwire框架的一部分。
MPA是讓伺服器處理路由,但在瀏覽器中導航,保留我們的JavaScript應用狀態。當每個皮膚panel 載入時,我們對其進行水化,由於我們知道它只能在伺服器上渲染,所以上述所有的優化都適用。
然而,現在我們需要JavaScript來協調這種過渡。許多MPA框架如果支援懶惰水化,無論如何都會載入一個小的啟動載入器,但在純MPA中,有可能不需要任何執行時。
雖然這種方法不那麼重,但仍然不像SPA的順利。
從伺服器上載入HTML並替換原來的內容可能會保證應用的狀態,但在DOM中沒有任何當前滑鼠所在焦點、沒有動畫、沒有播放器在視訊標籤上的位置,等等。這就給我們帶來了下一個問題。
伺服器元件
伺服器元件就像MPA一樣,只不過你需要回到伺服器:將頁面的靜態部分 "重新渲染 "為VDOM,並讓瀏覽器接收這些變化。儘管客戶端元件被保留了下來,而且靜態HTML中從未改變的部分也沒有被替換,但我們本質上是在談論一種路由正規化。
當你點選一個連結時,它被攔截,伺服器元件的端點負責處理請求,返回新的VDOM以進行差異比較。當你執行改變資料時,更新頁面上的資料時,整個頁面在伺服器上被重新渲染,新的VDOM表現被送回來。這很像你用MPA做的一個經典的表單帖子。
每次伺服器重新渲染都要傳送大量的資料,還也需要更多的協調工作。你需要在瀏覽器中建立一個框架。所以這種方法不一定能讓你得到最快的頁面載入。但它有同樣的能力來消除不必要地傳送到瀏覽器的巨大百分比的元件程式碼。
分析
這是 3 種不同的解決方案,這不僅僅是一個取代另一個:
“純 MPA” 具有實現最佳頁面載入效能的潛力;“HTML框架”是 3 種框架中最適合導航到新位置的;只有“伺服器元件”才有可能與我們今天擁有的單頁應用程式體驗無法區分。
但是所有 3 種方法都共享相同的“導航應該如何工作”的模型。它是來自伺服器的整頁。
本質上,與其嘗試為瀏覽器帶來一堆昂貴的快取邏輯,不如採取refetch first 的心態。重新載入整個頁面進行渲染其實沒有那麼糟糕,而且無需一堆額外的客戶端程式碼即可確保頁面資料的一致性。
你見過領先的 GraphQL 客戶端的規模嗎?壓縮後大約 40kb。只需將它和 React 放在同一個頁面上,您就可以在編寫一行程式碼之前超過任何對效能至關重要的站點的預算。
MPA 作為一項技術保持不變,並繼續提高它們的能力,以更好地進行部分水合、更智慧的延遲載入、更動態的交付(流式傳輸)。
“HTML框架”是一箇中間步驟。隨著“伺服器元件”的新方法出現,尤其是非 VDOM 方法,我們將看到它們被替代。
理想的方法是讓伺服器元件既能夠提供細粒度更新的能力,又能夠為新渲染的東西傳送 HTML。對於初始頁面載入或任何大型導航來說,HTML渲染會更快。支援混合/部分格式可能是一個問題。
相關文章
- 後端說,單頁面SPA和前端路由是怎麼回事後端前端路由
- SPA 路由三部曲之核心原理路由
- 前端路由與後端路由的思考前端路由後端
- 前端路由和後端路由,前端渲染和後端渲染前端路由後端
- 前端技術週刊 2019-01-21:跨端開發的三條路線前端跨端
- Java/後端學習路線Java後端
- python後端學習路線Python後端
- Java後端學習路線Java後端
- SPA路由實現的基本原理路由
- 淺談前後端路由與前後端渲染後端路由
- Vue2+Koa2+Typescript前後端框架教程--03後端路由和三層模式配置VueTypeScript後端框架路由模式
- 登路後跳入退出前的路由路由
- Java後端學習路線乾貨分享Java後端
- 前後端分離技術路線圖後端
- 三條路線告訴你如何掌握Spring IoC容器的核心原理Spring
- React服務端渲染(前後端路由同構)React服務端後端路由
- 原生JavaScript實現的SPA單頁應用(hash路由)JavaScript路由
- 遊戲策劃的三條能力線遊戲
- 面試官:說一說前端路由,後端路由客戶端渲染與服務端渲染面試前端路由後端客戶端服務端
- SPA單頁面應用、前後端分離專案SEO優化的方法後端優化
- SPA路由機制詳解(看不懂不要錢~~)路由
- vue 單頁應用(spa)前端路由實現原理Vue前端路由
- 適合普通大學生的 Java 後端開發學習路線Java後端
- ASP.NET Core端點路由中三種讓人困惑的路由函式ASP.NET路由函式
- CAD樣條線命令然後使用
- vue-route(三)後臺管理路由配置Vue路由
- 頭條騰訊SSP大佬的學習路線
- 無線路由器接入區域網的三種方式路由器
- 容遲網路中的路由演算法筆記(三)路由演算法筆記
- 【今日頭條】高薪誠聘 架構 / 後端高薪架構後端
- 前後端高效協作開發的11條建議後端
- 仿掘金前臺 vue 服務端渲染(ssr)後臺 react (spa) 後臺服務是 koa 的一個專案Vue服務端React
- 雙非本科拿到阿里騰訊位元組,分享Java後端路線阿里Java後端
- 路由器無線網路不穩定怎麼辦?路由器無線網路速度不穩定的原因和解決方法路由器
- 三類遠端連線命令
- 也是中國首條雙線電氣化過載鐵路,首條煤運通道幹線鐵路。
- 模擬生命體,智源線蟲登上Nature子刊封面,探索AGI的第三條路徑
- Linux網路連線的三種方式Linux