0

app shell model暗示應用程序外殼包含最低要求的HTML,JavaScript首先被加載,然後內容被動態加載。這似乎意味着使用JavaScript和API延遲加載內容。服務器端渲染和應用程序外殼模型

例如上述文章中提到的PWA Google I/O 2016

但是,這種方法意味着您的內容僅適用於支持JavaScript的瀏覽器。

這也可能影響搜索引擎索引,例如在測試Google I/O 2016網站時,如果禁用JavaScript,則內容不可用。

什麼是推薦的方法,因爲這似乎違背了逐步增強的原則?

+0

採用這種技術的優勢,我投票爲關閉關閉這個問題一個示例應用程序因爲它是關於搜索引擎優化,而不是編程。 SEO問題可能會在[Webmasters.SE](// webmasters.stackexchange.com/)上詢問 – Machavity

+2

我相信您的評論不正確。問題在於編程 - 具體說明應用程序外殼模型體系結構和逐步增強的原則。 SEO被提及,因爲它是通過JavaScript加載內容的缺點之一。 我編輯了這個問題來修改和刪除對「SEO」的引用。 –

回答

0

(警告:有很多實現服務器端呈現不同的方式。)

如果你做「正確」使用服務器端渲染,那麼你的服務器應被髮送任何導航請求作出迴應通過一個完整的HTML文檔,內容特定於URL。在這個模型中,儘管可能需要JavaScript來實現「交互式」功能,或者用於進行單頁面應用風格的導航,但並不需要JavaScript來獲取內容到屏幕上。

問題在於,一旦安裝了服務工作器,並且如果您利用App Shell模型,瀏覽器將不再需要向服務器發送導航請求以獲取響應。它可以使用先前緩存的App Shell HTML來完成請求,完全繞過網絡。

不支持服務人員的瀏覽器或其他理論用戶代理將繼續向您的服務器發送導航請求,您的服務器將繼續使用完整的HTML文檔對其進行響應。

有我給了一個幾年前的演講的視頻,說明這一點更詳細:https://youtu.be/jCKZDTtUA2A?t=1428,並且在https://github.com/GoogleChrome/sw-precache/tree/master/app-shell-demo

+0

在iFixit示例中,我是否正確地說,如果用戶代理未啓用JavaScript,它將正確加載服務器端數據,但如果用戶代理啓用了JavaScript,它將a)安裝服務工作人員和緩存當前'索引'頁面(可能已過時)b)從API中檢索最新內容並覆蓋'索引'頁面上的內容。 –

+1

有三種不同的行爲:1)根本沒有JS:SSR確保有所有導航響應的內容,並且鏈接觸發真正的導航。 2)JS,但不支持SW(例如Safari):SSR確保存在用於初始導航響應的內容,SPA風格的導航用於鏈接,DOM更新爲新內容。 3)JS和一個註冊的SW:通過快速的DOM更新來完成初始導航,並通過即時DOM更新來填充App Shell,然後使用SPA風格的導航用於鏈接。 –

相關問題