我在寫Angular.js應用程序。我希望它的速度非常快,因此我在初次加載時將其完全生成在服務器端。之後,每次更改都應該通過Angular與服務器進行異步通信來處理客戶端。如何在沒有初始刷新的情況下爲服務器準備好Angular.js應用程序
我在中央<div>
上有ng-view
屬性。但是現在,在點擊任何鏈接之前,即使在第一次加載時,Angular也會再生此<div>
的內容。我不想要這種行爲,因爲那時服務器端的頁面生成是無用的。
如何實現這一目標?
我在寫Angular.js應用程序。我希望它的速度非常快,因此我在初次加載時將其完全生成在服務器端。之後,每次更改都應該通過Angular與服務器進行異步通信來處理客戶端。如何在沒有初始刷新的情況下爲服務器準備好Angular.js應用程序
我在中央<div>
上有ng-view
屬性。但是現在,在點擊任何鏈接之前,即使在第一次加載時,Angular也會再生此<div>
的內容。我不想要這種行爲,因爲那時服務器端的頁面生成是無用的。
如何實現這一目標?
雖然Gloopy的建議在某些情況下會起作用,但在其他情況下會失敗(即ng-repeat
)。 AngularJS目前沒有在服務器上渲染的能力,但是這是(據我所知)其他JavaScript框架都沒有。我也知道服務器端渲染是AngularJS開發人員正在研究的內容,所以你可能在不久的將來會看到它。 :)
當你說你想讓應用程序「非常快」時,你應該考慮到你想要的速度。有很多地方需要考慮速度,例如啓動應用程序所需的時間,響應時間,資源密集度等(您似乎將重點放在引導時間上)。爲了平衡應用程序的性能,必須做出不同的折衷。我建議閱讀這篇文章,回答關於AngularJS性能的另一個問題:Angular.js Backbone.js or which has better performance
您是否真的遇到了性能問題,或者這只是您預測的問題?如果是後者,我建議建立一個你的類型的應用程序的原型代表,看看它是否真的是一個問題。如果它是前者,並且在客戶端引導應用的時間過長,則可能會進行一些優化(例如,內聯一些模型數據以避免額外往返或使用Gloopy的建議)。您還可以使用Chrome中的分析工具以及AngularJS Batarang來查找應用程序中的緩慢區域。
不知道的很有必要知道'ng-repeat'限制。 +1和Batarang那個東西真棒! – Gloopy 2012-08-17 20:42:34
Derby.js做到了 – 2013-06-03 01:05:41
btford:你說得對,這聽起來像不成熟的優化 - 這聽起來對我來說也是:)。另一個原因是,應用程序應該以非常簡單的方式工作,沒有JS,所以這個基本的佈局(和角度爲我做所有其他頁面),所以總是會呈現在服務器上。
我發現了一個非常醜陋的醜陋解決方案 - 首次點擊任何內部鏈接後,我會自舉應用程序。點擊它後,我解除了初始回調,更新網址爲History.pushState
和bootstrap應用程序 - 它抓取了新的URL並且重新生成絕對可以。那麼,我會繼續研究不太遙遠的未來:)。
我能夠想出一個解決方案來做到這一點。它不能完美地工作或者不能完成任何工作,但至少就路由和我製作的使用ng-repeat的指令而言,這是沒問題的。
這篇文章可能會有幫助:http://stackoverflow.com/questions/11838639/html-template-filled-in-server-side-and-updated-client-side – Gloopy 2012-08-16 16:37:36