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

标签 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 等人的问题。根本就没有设计为允许优雅降级?

它伤害了我的DRY大脑认为#1 是答案。

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

最佳答案

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

然而,如今即使是“无 javascript”的论点也变得乏味和无力,至少对于“web 应用程序”类而言是这样。如果我想使用 Windows 应用程序,我需要 Windows,如果我想使用 javascript 驱动的 Web 应用程序,假设我将需要一个没有缺陷的浏览器来使用它并不是不合理的。

但是回到你的问题,我只能谈论 AngularJS,因为我对它最熟悉。在大多数情况下,它确实允许您支持渐进式增强方法,但如果您希望支持这种方法,则不要指望使用 URL 路由之类的东西。您可以做的是使用 AngularJS Controller 、绑定(bind)和指令,类似于您可能使用 jQuery 的方式来增强页面的交互和行为。

请记住,这种方法会严重限制您使用 Angular(或 Ember 就此而言)可以做的事情,并且您可能会开始怀疑您从这种方法中获得的是您无法单独使用 jQuery 轻松完成的事情。

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

更新:

为了它的值(value),我们选择了 Year of Moo方法并使用 PhantomJS 呈现需要 SEO 的页面,并将它们的缓存初始状态粘贴在某处以提供它们。我们有一个在部署上运行的 rake 任务来更新它。同样,这只是初始状态,但它有助于暂时解决这个问题。

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

关于angularjs - 具有渐进增强功能的基于混合页面/单页的网络应用程序(Angularjs、Ember.js)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064113/

相关文章:

php - 如何从此网址中删除 id 和 title?

xml - 自动站点地图.xml

ember.js - 观察者不会触发创建的对象

javascript - AngularJS 表单验证不起作用

angularjs - Jasmine 测试中未声明的 Controller

angularjs - 使用 Angular JS 打印表格的所有数据

javascript - 写作助手: What's the use of the end arguments

angularjs - Angular - ng-messages 中的多个字段

asp.net-mvc - MVC SEO 从 .uk.com 域瞄准意大利

javascript - 使用 ember 数据在投票后保留在屏幕指示器上