23

我想知道是否有人找到了解決這個問題的方法。有沒有一種方法來獲得兩全其美:具有漸進式增強功能的混合頁面/單頁網頁應用程序(Angularjs,Ember.js)?

  • 構建基於頁面的網站,永久鏈接,可訪問性,搜索引擎優化,和優美的回退/漸進增強(基本上所有的best practices of web development
  • 和,對於那些使用javascript的人來說,使用Ajax加載內容的響應式前端體驗,在瀏覽底層網站頁面時不會刷新頁面,腳本/內容/ css /等的最小冗餘下載。 (所有類似AngularJs或Ember.js一個客戶端框架的好處)

我看到幾個各大網站都能夠管理這個(Gmail時,計算器),我看到Jeff's new site建立一個裸機noscript標籤中的網站版本。

  1. 解決方案是基於混合頁面/單頁面應用程序構建網站的兩個版本,同時發送,並讓客戶決定它可以顯示哪些? (這是什麼Gmail?)
  2. 或者是AngularJS等人的問題。根本沒有設計爲允許優雅退化?

它傷害了我的DRY大腦認爲#1是答案。 (我之所以關注AngularJs的原因是我喜歡它對HTML模板,聲明式樣式的支持,以及它試圖修復js範圍的問題,Ember和其他框架也非常出色;也許其中一個會更好一些對於混合網站?)

回答

14

這個問題是一個有點微妙的一個,因爲答案是「看情況」。例如,您提到Gmail,沒有任何理由像Gmail那樣的應用程序需要爲搜索引擎優化索引,儘管取決於您想要什麼或需要支持您可能希望確保您可以支持沒有Javascript。

但是,即使是「no-javascript」的說法,至少對於「Web應用程序」類來說,這些日子已經越來越乏力和虛弱了。如果我想使用Windows應用程序,那麼我需要Windows,如果我想使用一個支持JavaScript的Web應用程序,假設我將需要一個不會被癱瘓的瀏覽器來使用它,這並不是不合理的。

但是回到你的問題,我只能說AngularJS,因爲我最熟悉它。大多數情況下,它確實允許您支持漸進式增強方法,但如果這是您想要支持的功能,則不要期望使用URL路由等功能。你可以做的是使用AngularJS控制器,綁定和指令,類似於你如何使用jQuery來增強頁面的交互和行爲。

請記住,這種方法將嚴重限制您可以使用Angular(或Ember)做什麼,並且可能開始引起爭議,您從這種方法中獲得的結果是,您無法輕易使用jQuery 。

這些日子的選擇是做Twitter這樣的網站。這基本上是從服務器爲初始加載的任何視圖提供完全呈現的HTML,然後使用Javascript進行後續加載和增強的UI行爲。如果您確實需要支持使用和不使用Javascript進行瀏覽,並且具有提高首次請求的呈現/加載時間的額外好處,則這非常有效(但實現起來可能相當具有挑戰性)。再次「取決於」,因爲它很大程度上取決於您的網站如何實際運作,如果有可能使用它。你必須爲它設計,它不會變得微不足道或簡單。

更新:

對於它的價值,我們正在採取的Year of Moo方法和渲染需要使用PhantomJS和地方堅持他們的緩存初始狀態爲他們服務了搜索引擎優化的網頁。我們在部署上運行一個rake任務來更新它。再次,這只是初始狀態,但它現在有助於解決問題。

事情總是在變化,我相信在一年左右的時間裏我會改變主意。

2

你看過谷歌的Making AJAX Applications Crawlable。您可以擁有JavaScript單頁面應用程序和可抓取內容。

如果你堅持的角度,有一篇有趣的文章:Turns out it is possible to have your AngularJS application indexed

+0

現在Google索引器的行爲與瀏覽器相同,呈現頁面的方式與之相似,因此您並不需要做任何事情來使您的Angular更適合索引:https://googlewebmastercentral.blogspot.no/2015/10 /deprecating-our-ajax-crawling-scheme.html –

相關問題