混合基于页面/单页面的网络应用程序(Angularjs,Ember.js),具有渐进增强功能?

时间:2013-04-17 15:27:35

标签: angularjs seo ember.js progressive-enhancement graceful-degradation

我想知道是否有人找到了这个问题的解决方案。有没有办法让两全其美:

  • 构建一个基于页面的网站,具有永久链接,可访问性,SEO和优雅的后备/渐进增强(基本上所有best practices of web development
  • 并且,对于那些使用javascript,具有ajax内容加载的响应式前端体验,在导航底层网站页面时没有页面刷新,脚本/内容/ css /等的冗余下载最少。 (像AngularJs或Ember.js这样的客户端框架的所有好处)

我看到一些主要网站能够管理这个(gmail,stackoverflow),我看到Jeff's new site在noscript标记中构建了一个简单的网站版本。

  1. 基于混合页面/单页面应用程序的解决方案是构建网站的两个版本,发送两个版本,并让客户决定它可以显示哪个版本? (这是gmail的功能吗?)
  2. 或者是AngularJS等人的问题。根本不是为了让优雅的降级而设计的?
  3. 我认为#{3}大脑认为#1就是答案。

    (我关注AngularJs的原因是我喜欢它支持html模板,声明式样式,以及它修复js范围的尝试.Ember和其他框架也很棒;也许其中一个更适合混合网站?)

2 个答案:

答案 0 :(得分:14)

这个问题有点细致,因为答案是“它取决于”。例如,您提到Gmail,没有任何理由要求像Gmail这样的应用程序需要为SEO编制索引,但取决于您想要或需要支持的内容可能希望确保您可以支持没有Javascript。

然而,即使是“没有javascript”的论点现在也变得疲惫不堪,至少在“网络应用程序”类中是这样。如果我想使用Windows应用程序,我需要Windows,如果我想使用javascript驱动的Web应用程序,那么假设我需要一个没有残缺的浏览器来使用它是不合理的。

然而回到你的问题我只能和AngularJS说话,因为我最熟悉它。在大多数情况下,它确实允许您支持渐进增强方法,但如果您希望支持,则不要使用URL路由之类的东西。你可以做的是使用AngularJS控制器,绑定和指令,类似于你如何使用jQuery来增强页面的交互和行为。

请记住,这种方法将严重限制你可以用Angular(或Ember)做的事情,并且你可能会开始有争议的是你从这种方法得到的,你不能单独使用jQuery。

这些天的替代方案是做Twitter之类的网站。对于初始加载的任何视图,这基本上是从服务器提供完全呈现的HTML,然后使用Javascript进行后续加载和增强的UI行为。如果您确实需要支持使用和不使用Javascript进行浏览,并且具有改进第一个请求的呈现/加载时间的额外好处,那么这非常有效(尽管实现可能非常具有挑战性)。再次“它取决于”,因为它很大程度上取决于您的网站如何实际工作,如果可以使用它。你必须为它设计,它不会是微不足道或容易的。

更新

我们正在采取Year of Moo方法,并使用PhantomJS渲染需要搜索引擎优化的页面,并将缓存的初始状态保留在某个地方为他们提供服务。我们在部署上运行了一个rake任务来更新它。这只是初始状态,但它现在有助于解决问题。

事情总是在变化,我相信我会在一年左右的时间内改变主意。

答案 1 :(得分:2)

您是否阅读了Google的Making AJAX Applications Crawlable。您可以拥有JavaScript单页应用和可抓取内容。

如果你坚持使用棱角分明,那就有一篇有趣的文章:Turns out it is possible to have your AngularJS application indexed