空氣中瀰漫一種感覺, SPA(single-page app) 已經不再是 10 年前的酷孩子了。
像 Astro、Qwik 和 Elder.js 這樣的新框架都在宣傳他們的 MPA 功能是「預設 0kB JavaScript」。 四處流傳部落格文章,列出了 SPA 的所有挑戰:歷史、焦點管理、滾動恢復、Cmd/Ctrl-click、記憶體洩漏等。
不過,我認為討論較少的是近年來環境發生了怎樣的變化,從而使 MPA (multi-pagep app) 在對抗 SPA 方面更具優勢。 尤其是:
這並不是說 SPA 沒有自己的位置。 Rich Harris 就“過渡性應用程式”進行了精彩的演講,其中概述了您可能仍想使用 SPA 的一些原因。例如,您可能想要一個在頁面導航中倖存下來的無所不在的元素,例如音頻/視頻播放器或聊天小零件。或者您可能有一個無限加載列表,按下後退按鈕時,它會返回到列表中的上一個位置。
即使沒有明確使用這些功能的團隊也可能仍然選擇使用 SPA,只是因為“未知”因素。 “如果有一天我們想實現導航動畫怎麼辦?” “如果我們想添加一個無所不在的視頻播放器怎麼辦?” “如果我們想要一些現有瀏覽器 API 不支援的自定義設置怎麼辦?”選擇 MPA 是一個重大的架構決策,在瀏覽器 API 無法滿足要求的情況下,它可能會有效地切斷未來控制頁面的可能性。到最後,因為 SPA 讓您有完全的控制權,所以許多團隊都不願放棄它。
也就是說,我們之前已經看到過類似的情況。長期以來,jQuery 提供了瀏覽器沒有的 API,想要晚上睡個好覺的團隊選擇了 jQuery。最終瀏覽器迎頭趕上,為我們提供了 querySelector
和 fetch
等 API,而 jQuery 開始看起來像是不必要的包袱。
我懷疑類似的故事可能會發生在 SPA 上。為了說明這一點,讓我們考慮一下 Rich 的示例,這些示例是您“需要” SPA 來完成的:
content-visibility
,並在必要時將狀態存儲在 Service Worker 中。不過,需要明確的是,我認為 SPA 不會完全消失。 我不確定如何合理地將 Photoshop 或 Figma 之類的東西實現為 MPA。 但如果新的瀏覽器 API 和功能不斷落地,慢慢削弱了 SPA 的優勢,那麼未來可能會有越來越多的團隊選擇構建 MPA。
就我個人而言,我認為我們有這麼多可供選擇的選擇令人興奮(而且它們都比 10 年前好多了!)。 我希望人們保持開放的心態,繼續推動 SPA 和 MPA(以及“過渡性應用程式”,或者我們將稱之為 the next thing 的任何東西),讓它們在未來變得更好。
© Copyrights 從想像到創造. All Rights Reserved.