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

Chr*_*ile 23 seo progressive-enhancement graceful-degradation ember.js angularjs

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

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

我看到一些主要网站能够管理这个(gmail,stackoverflow),我看到Jeff的新网站在一个noscript标签中构建了一个简单的网站版本.

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

我认为#1就是答案,让我的DRY大脑受伤.

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

Chr*_*ola 14

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

然而,即使是"无javascript"的论点,这些日子也变得疲惫不堪,至少对于"Web应用程序"这类而言.如果我想使用Windows应用程序,我需要Windows,如果我想使用javascript驱动的Web应用程序,那么假设我需要一个没有残缺的浏览器来使用它是不合理的.

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

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

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

更新:

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

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