2013-12-13 70 views
1

我通常在這裏尋找答案,但我最終得到了我無法找到一個好答案的地步。懶惰加載灰燼的應用程序

我正在尋找建立一個燼應用程序,最初只加載它只需啓動和打開主要路線的東西。所有其他控制器,視圖,模板等將在特定路由被觸發時延遲加載。

我已經找到了一個很好的例子,如何在這裏做到這一點: http://madhatted.com/2013/6/29/lazy-loading-with-ember

我的主要問題是確定什麼建設工具,有支持這一理論的延遲加載應用程序代碼?到目前爲止,我已經看到Brunch,Yeoman和Ember App Kit似乎縮小並連接了所有的腳本和模板。我對縮小感到非常滿意,但需要將這些文件分開。我曾考慮過將這些代碼放入應用程序/資產位置,以便它可以在沒有concat的情況下被複制,但不會被縮小。

有沒有人有解決方案?謝謝!

回答

1

您可以通過添加與早做以下到您的早午餐配置

files: { 
    javascripts: { 
     joinTo: { 
      'javascripts/app.js': /^app(\/|\\)(?!admin)/, // concat everything in app, except /app/admin 
      'javascripts/vendor.js': /^vendor/, 
      'javascripts/admin.js': /^app(\/|\\)admin/ // concat only /app/admin 
     } 
    } 
} 

咕嚕(在自耕農和灰燼應用套件中使用)是可笑靈活,所以我敢肯定,你可以設置相同通過潛入Gruntfile.js的東西

+0

「我相信你可以通過潛入Gruntfile.js中設置相同的東西」:當然 - 但有更多的配置。通常,gruntfiles有大約300行代碼,而不是這六行代碼。雖然它們確實更加靈活,但使用更簡單的工具可以實現同樣的靈活性。 –

+0

@rallrall我會嘗試你的解決方案,並將標記的答案正確的,如果它確實會這樣工作。我想我的配置文件可能會變得非常冗長,如果我選擇編譯我的每個控制器和這樣的意見 –

+0

雖然這種解決方案不理想,它會工作。爲了完成我期望做的事情,我需要列出控制器,視圖和模板中的每個文件。另外,在早午餐時,每個創建的文件都有很多腳本。實際上,這是應用數萬行代碼的巨大補充。我會看看是否有其他人提出一個解決方案,在接受這個解決方案之前可能會更好。 –

-1

問題是:「我正在尋找構建一個只需要啓動並打開主路由的初始負載應用程序的應用程序,所有其他控制器,視圖,模板等將在特定路線被觸發時延遲加載。「

Ember期望在頁面加載時擁有它所需的任何東西。我不會錯,但延遲的路由加載似乎不是Ember的一個功能。 Ember CLI是一樣的。它使用捆綁和縮小來減少過載。但是,一切都應該在那裏,以使其工作。

相反,像我這樣的人只想在需要時才加載東西。

當您嘗試在Ember中實現延遲加載時,所有內容都應該由模塊(file.js)表示:路由,模塊;一個控制器,一個模塊;等等。 你應該遵循一個模式(比如POD),它應用一種機制來找到他們應該在的地方。 每個模塊都應該知道它的依賴關係。但其中一些非常頻繁(路線,控制器,模板)。 您應該爲瀏覽器使用模塊加載器。它可以是requirejs或任何你喜歡的。但ES6在門口。我們來考慮一下。

很多人使用beforeModel掛鉤來實現結果。我做到了,如果你不使用link-to組件,它就可以工作。否則一切崩潰。爲什麼?由於href計算的屬性。當插入link-to時,會計算一個href。因此,Ember尋找鏈接指向的路線。如果路線不存在,則從route:basic創建一個。

一個解決方案可以是預先加載頁面中插入的所有link-tos代表的所有路由。太貴了!

的整合,這個答案可以在Lazy loading route definitions in Ember.js

對於初步的解決方案,以在POD組織路線的延遲加載可以發現,看看https://github.com/ricottatosta/ember-wiz。這是一個基於ES6的方法,它將SystemJS作爲模塊加載器進行中繼。

+0

鼓勵與外部資源的鏈接,但請在鏈接的周圍添加上下文,以便您的同行用戶瞭解它是什麼以及它爲什麼在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。 – davejal