2

私はAngular.jsアプリケーションを書いています。私はそれを本当に速くしたいので、最初に読み込まれたときにサーバー側で完全に生成されたものを提供します。その後、すべての変更は、サーバーとの非同期通信を使用して Angular によってクライアント側で処理される必要があります。

私はng-view中央に属性を持っています<div>。しかし、Angular<div>は最初の読み込み時でも、リンクをクリックする前に、このコンテンツを再生成します。サーバー側でのページの生成は役に立たないため、この動作は望ましくありません。

それを達成する方法は?

4

3 に答える 3

1

Gloopy の提案は場合によっては機能しますが、他の場合には失敗します (つまりng-repeat)。AngularJS には現在、サーバー上でレンダリングする機能はありませんが、これは (私の知る限り) 他の JavaScript フレームワークにもありません。また、AngularJS の開発者がサーバー側のレンダリングを検討していることも知っています。:)

アプリケーションを「非常に高速」にする必要があると言うときは、この速度が必要な場所を正確に検討する必要があります。アプリのブートストラップにかかる時間、応答にかかる時間、リソースの集中度など、速度を考慮する場所はたくさんあります (ブートストラップ時間に注目しているようです)。多くの場合、アプリケーションのパフォーマンスのバランスをとるために行う必要があるさまざまなトレードオフがあります。このテーマの詳細については、AngularJS のパフォーマンスに関する別の質問に対するこの回答を読むことをお勧めします: Angular.js Backbone.js またはどちらがパフォーマンスが優れているか

実際にパフォーマンスの問題が発生していますか、それとも単に問題になると予測しているだけですか? 後者の場合は、アプリケーションのタイプを代表するプロトタイプを作成して、それが本当に問題であるかどうかを確認することをお勧めします。前者で、アプリがクライアント側でブートストラップするのに時間がかかりすぎる場合は、いくつかの最適化を行うことができます (たとえば、モデル データをインライン化して追加のラウンド トリップを回避したり、Gloopy の提案を使用したりします)。Chrome のプロファイリング ツールやAngularJS Batarangを使用して、アプリケーションの遅い領域を探すこともできます。

于 2012-08-16T23:15:51.707 に答える
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 に答える
0

btford: これが時期尚早の最適化のように聞こえるというあなたの意見はまったく正しいです。私にはそのように聞こえます :)。もう 1 つの理由は、アプリケーションが JS なしで非常に単純な方法で動作する必要があるためです。したがって、この基本的なレイアウト (および angular は他のすべてのページでそれを行います) により、サーバー上で常にレンダリングが行われます。

非常にハックな醜い解決策を見つけました - 内部リンクを最初にクリックした後、アプリケーションをブートストラップします。クリックした後、この最初のコールバックのバインドを解除し、URL を更新しHistory.pushStateてアプリをブートストラップします。新しい URL が取得され、再生成はまったく問題ありません。まあ、私はそう遠くない未来を探し続けます:)。

于 2012-08-17T07:57:42.123 に答える