2015-09-10 125 views
4

我正在構建一個通用/同構JavaScript應用程序(Express/Redux/React)。我正在考慮使用React Router在客戶端進行路由和/或使用Express在服務器上進行路由。客戶端路由的缺點?

我知道客戶端路由已經成爲單頁應用的流行,因爲它們使得用戶交互更加無縫。

但是,我試圖更好地瞭解客戶端與服務器端路由。在構建任何應用程序(單個頁面或不是單個頁面)時,有人可能遇到的客戶端路由的潛在缺點是什麼?什麼時候最好考慮在服務器上路由?大規模應用程序是否僅在一側(客戶端/服務器)路由或者他們經常混合這兩者?

謝謝!

+2

您的應用程序的狀態是否可通過網址訪問?如果是這樣,你應該使用兩者。想象一下,你去app/foo/bar,這隻能通過客戶端綁定,如果我複製並與某人分享這個URL,除非你的客戶端已經佔據了這個URL,它將失敗。網址是您應用程序當前狀態的訪問點,請務必記住這一點。 –

+0

@DanielTate是對的,如果網址是訪問您的應用程序狀態的訪問點,則必須在雙方都這樣做,否則如果他們訪問該頁面,則會出現錯誤。 –

回答

1

一些客戶端路由的缺點的(可能是)認爲:

  • 雖然服務器端的路由是一個嘗試和真正的技術,有許多可用的技術和庫選項,客戶端可能會是不太健壯和可管理。

  • 監測。雖然服務器端路由頁面可以通過任何基本的Web刮板軟件進行驗證,但客戶端路由頁面需要通過更高級的工具進行監控,該工具實際呈現HTML並觸發客戶端腳本。

  • 服務SEO內容的困難。雖然這是可能的,但是更加困難。

  • 資源。根據構建應用程序的方式,服務器端路由可能更具資源效率,因爲每個頁面加載客戶端的開銷較小。

  • 兼容性。根據您定位的瀏覽器,您的首選客戶端路由方法可能不受支持。

對於路由頁面不需要或不應該被搜索引擎編入索引的應用程序,您仍然可以使用客戶端路由。

對於對搜索引擎優化至關重要的頁面,不需要成爲SPA(例如,他們只是提供信息內容),沒有理由不去服務器端。

3

我認爲沒有理由遠離客戶端路由。如果你使用的是類似react-router的東西,那麼這是這兩個客戶端和服務器路由,並沒有什麼困難。有些人可能會告訴你的一些具體領域將會很困難:

  • SEO。這是免費的,無論您打到哪個URL都會正確呈現在服務器上併發送到客戶端,因此Googlebot會正確地查看頁面。如果您在服務器端進行重複處理,那麼SEO對客戶端路由的困難是毫無道理的。
  • 分析。簡單的說,只要你在客戶端處理導航(就在你觸發路由器改變路徑之前),就把ga('send', 'pageview', path)
  • 資源,如果您的整個網站相當大,您不希望在頁面首次加載時將整個事件發送到客戶端。這需要更多的複雜性(例如使用webpack定義多個入口點)。如果你的網站有數百頁,那麼客戶端路由會給你帶來的好處不大。

This site(我自己的)使用客戶端渲染。你會注意到,它在JavaScript關閉的情況下工作得很好(最好的方法是某些谷歌認爲它是正確的)。來源是here如果你想看看有什麼特別的作品。