2012-01-12 53 views
9

在我以前的Web應用程序中,當用戶從一個「頁面」(無頁面重新加載,只是一個新的div)轉換到另一個時,我只隱藏了一個div以備後用,創建+展示了新的。當用戶從地址管理返回到事件管理時,我只需要隱藏當前的div並重新顯示已經使用的div。當然,這需要記憶,但速度更快。內存與JavaScript的Web應用程序的速度

在我的新Web應用程序中,我使用了Backbone.js,Require.js和jQuery。我所有的模塊都是AMD(jquery 1.7.1,backbone.js 0.5.3-optamd3,...)。

在閱讀Derick Bailey的有趣博客(http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/)之後,我現在在轉換到新的「頁面」之前清理我的div並在用戶返回時重新創建它。

同樣,關於requirejs和amd模塊,我曾經有一個超過內存策略的速度:我的web應用程序導航的核心是我唯一的路由器對象。如果用戶第一次選擇「頁面」/特性,我加載amd模塊(它是一個backbone.js視圖對象)和它與require命令的所有依賴關係,並存儲這個結果視圖對象(使用它的模型對象)以供稍後在路由器對象中的數組中使用。當用戶回來時,我將存儲的視圖對象並重新渲染視圖。

我想我會從這種行爲切換到總是重新加載模塊(從緩存),但我不確定。

爲了最好的一段路要走,我希望得到一個更好的瞭解,並要問兩個問題:

  1. 我有5個AMD模塊。當用戶需要一個功能時,我加載並執行一個模塊,並得到一個backbone.js視圖對象作爲結果,我將其存儲在我的路由器對象中的一個數組中。每個AMD模塊都有Backbone.js(AMD版本)作爲依賴項。當用戶訪問了所有5個「頁面」並且我的所有5個視圖對象都存儲在我的數組中時,我的瀏覽器內存中是否有5個backbone.js副本,因爲每個backbone.js依賴項都從緩存中獲取並重新執行,或者垃圾收集器已被刪除嗎?
  2. 其他Web應用程序開發人員如何看待這種速度超過內存策略?

續 今天我發現了一個計算器類似的問題(http://stackoverflow.com/questions/7866971/how-does-amd-specifically-requirejs-handle-dependancies-across-multiple-module)。 答案是:「它只會被加載一次,上述兩個模塊將得到相同的模塊值 ...」。

所以看起來好像存儲已經加載+執行的amd模塊的結果以備後用。

Wolfgang

回答

2

緩存所有內容(可能會多次使用)。 (寫入畫布/ ImageData)。 您應該在內存中只有1個框架副本。如果您擔心的還有更多,請重寫它以強制所有AMD使用單一源骨幹。

內存速度。

如果你想更好的速度:

  • 的extern您的js文件的瀏覽器緩存。
  • 使用localStorage的
  • 在用戶
  • 最大限度地減少服務器做大部分的計算和簡化請求流
相關問題