我正在编写 Angular.js 应用程序。我希望它非常快,因此我在最初加载时为它提供完全生成的服务器端。之后,每个更改都应由 Angular 在客户端处理,并与服务器进行异步通信。
我ng-view
对 central 有属性<div>
。但是现在 Angular<div>
甚至在第一次加载时,在点击任何链接之前都会重新生成它的内容。我不想要这种行为,因为那样服务器端的页面生成是无用的。
如何做到这一点?
我正在编写 Angular.js 应用程序。我希望它非常快,因此我在最初加载时为它提供完全生成的服务器端。之后,每个更改都应由 Angular 在客户端处理,并与服务器进行异步通信。
我ng-view
对 central 有属性<div>
。但是现在 Angular<div>
甚至在第一次加载时,在点击任何链接之前都会重新生成它的内容。我不想要这种行为,因为那样服务器端的页面生成是无用的。
如何做到这一点?
尽管 Gloopy 的建议在某些情况下会起作用,但在其他情况下(即ng-repeat
)会失败。AngularJS 目前不具备在服务器上呈现的能力,但这是(据我所知)其他 JavaScript 框架也没有。我也知道服务器端渲染是 AngularJS 开发人员正在研究的东西,所以你可能会在不远的将来看到它。:)
当您说您希望应用程序“非常快”时,您应该考虑您希望这个速度的确切位置。有很多地方需要考虑速度,例如引导应用程序所需的时间、响应所需的时间、资源密集度等(您似乎专注于引导时间)。通常必须进行不同的权衡以平衡应用程序的性能。我建议阅读对另一个关于 AngularJS 性能问题的回复,以了解更多关于该主题的信息:Angular.js Backbone.js or which has better performance
您是否真的遇到了性能问题,或者这只是您预测的问题?如果是后者,我建议构建一个代表您的应用程序类型的原型,看看它是否真的是一个问题。如果是前者,并且您的应用程序在客户端引导上花费的时间太长,那么您可以进行一些优化(例如,内联一些模型数据以避免额外的往返,或使用 Gloopy 的建议)。您还可以使用 Chrome 中的分析工具以及AngularJS Batarang来查找应用程序中的慢速区域。
btford:你说得对,这听起来像是过早的优化——对我来说也是这样:)。另一个原因是,应用程序应该以非常简单的方式在没有 JS 的情况下工作,所以这个基本布局(并且 Angular 对我来说所有其他页面都是如此),所以总是会在服务器上呈现。
我发现了一个非常丑陋的解决方案——我在第一次点击任何内部链接后启动应用程序。单击它后,我取消绑定此初始回调,更新 URLHistory.pushState
并引导应用程序 - 它获取新 URL 并且重新生成绝对可以。好吧,我会继续研究不久的将来:)。
我能够想出一个解决方案来做到这一点。它不能完美地工作,也不能适用于所有事情,但至少就路由和我使用 ng-repeat 所做的指令而言,它是可以的。