2

我正在编写 Angular.js 应用程序。我希望它非常快,因此我在最初加载时为它提供完全生成的服务器端。之后,每个更改都应由 Angular 在客户端处理,并与服务器进行异步通信。

ng-view对 central 有属性<div>。但是现在 Angular<div>甚至在第一次加载时,在点击任何链接之前都会重新生成它的内容。我不想要这种行为,因为那样服务器端的页面生成是无用的。

如何做到这一点?

4

3 回答 3

1

尽管 Gloopy 的建议在某些情况下会起作用,但在其他情况下(即ng-repeat)会失败。AngularJS 目前不具备在服务器上呈现的能力,但这是(据我所知)其他 JavaScript 框架也没有。我也知道服务器端渲染是 AngularJS 开发人员正在研究的东西,所以你可能会在不远的将来看到它。:)

当您说您希望应用程序“非常快”时,您应该考虑您希望这个速度的确切位置。有很多地方需要考虑速度,例如引导应用程序所需的时间、响应所需的时间、资源密集度等(您似乎专注于引导时间)。通常必须进行不同的权衡以平衡应用程序的性能。我建议阅读对另一个关于 AngularJS 性能问题的回复,以了解更多关于该主题的信息:Angular.js Backbone.js or which has better performance

您是否真的遇到了性能问题,或者这只是您预测的问题?如果是后者,我建议构建一个代表您的应用程序类型的原型,看看它是否真的是一个问题。如果是前者,并且您的应用程序在客户端引导上花费的时间太长,那么您可以进行一些优化(例如,内联一些模型数据以避免额外的往返,或使用 Gloopy 的建议)。您还可以使用 Chrome 中的分析工具以及AngularJS Batarang来查找应用程序中的慢速区域。

于 2012-08-16T23:15:51.707 回答
0

btford:你说得对,这听起来像是过早的优化——对我来说也是这样:)。另一个原因是,应用程序应该以非常简单的方式在没有 JS 的情况下工作,所以这个基本布局(并且 Angular 对我来说所有其他页面都是如此),所以总是会在服务器上呈现。

我发现了一个非常丑陋的解决方案——我在第一次点击任何内部链接后启动应用程序。单击它后,我取消绑定此初始回调,更新 URLHistory.pushState并引导应用程序 - 它获取新 URL 并且重新生成绝对可以。好吧,我会继续研究不久的将来:)。

于 2012-08-17T07:57:42.123 回答
0

我能够想出一个解决方案来做到这一点。它不能完美地工作,也不能适用于所有事情,但至少就路由和我使用 ng-repeat 所做的指令而言,它是可以的。

https://github.com/ithkuil/angular-on-server/wiki/Running-AngularJS-on-the-server-with-Node.js-and-jsdom

于 2013-03-15T06:44:41.747 回答