23

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

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

我看到一些主要站点能够管理这个(gmail、stackoverflow),并且我看到Jeff 的新站点在 noscript 标记中构建了该站点的基本版本。

  1. 混合页面/单页面应用程序的解决方案是构建站点的两个版本,发送两个版本,然后让客户决定它可以显示哪个版本?(这就是gmail的作用吗?)
  2. 或者是 AngularJS 等人的问题。根本就没有设计为允许优雅降级?

认为#1是答案,这让我的大脑感到痛苦。

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

4

2 回答 2

14

这个问题有点微妙,因为答案是“视情况而定”。例如,您提到了 Gmail,没有任何理由需要为 SEO 编制像 Gmail 这样的应用程序的索引,但根据您想要或需要支持的内容,您可能希望确保您可以不支持 Javascript。

然而,即使是“无 JavaScript”的论点,这些天也越来越乏力,至少对于“Web 应用程序”类来说是这样。如果我想使用 Windows 应用程序,我需要 Windows,如果我想使用 javascript 驱动的 Web 应用程序,那么假设我将需要一个不会瘫痪的浏览器来使用它并不是不合理的。

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

请记住,这种方法将严重限制您可以使用 Angular(或 Ember)做的事情,并且您从这种方法中获得的东西可能会开始引起争议,而您无法单独使用 jQuery 轻松做到这一点。

如今,另一种选择是做 Twitter 等网站正在做的事情。这基本上是从服务器为初始加载的任何视图提供完全呈现的 HTML,然后使用 Javascript 进行后续加载和增强的 UI 行为。如果您确实需要支持使用和不使用 Javascript 进行浏览,并且具有改善第一个请求的呈现/加载时间的额外好处,这将非常有效(尽管实现起来可能相当困难)。再次“取决于”,因为它在很大程度上取决于您的网站是否可以使用它。你必须为它设计,它不会是微不足道的或容易的。

更新:

值得一提的是,我们采用Moo 年方法并使用 PhantomJS 渲染需要 SEO 的页面,并将它们缓存的初始状态粘贴在某个地方以提供服务。我们有一个在部署上运行的 rake 任务来更新它。同样,这只是初始状态,但它有助于暂时解决此问题。

事情总是在变化,我相信我会在一年左右的时间里改变我对这种方法的看法。

于 2013-10-14T17:50:48.560 回答
2

您是否阅读过 Google 的使 AJAX 应用程序可抓取。您可以拥有 JavaScript 单页应用程序和可抓取的内容。

如果你坚持使用 Angular,有一篇有趣的文章:原来可以让你的 AngularJS 应用程序被索引

于 2013-05-02T23:38:34.120 回答