2012-09-21 17 views
0

之一,我不理解資產管道中的Rails 3.2的一件事情是,我已經看到了這包含以下行的application.js文件多次提到:如何確保我的CoffeeScripts只加載到他們需要的頁面上?

//= require_tree . 

這是真的,這加載我的每個網頁上的所有JavaScript的?因爲實際上,當用戶處於「類別」頁面時(例如),我不希望將「產品」CoffeeScript加載到瀏覽器,因爲不會使用任何代碼。

如果我上面陳述的行爲是require_tree如何在資產管道中工作的準確描述,有沒有一種方法可以確保只有特定視圖所需的CoffeeScripts被加載而不是全部加載?

回答

3

這是真的,這加載了我所有的JavaScript在每一個頁面上?

是的,這就是它所做的。 Rails會將你的CoffeeScript編譯成JavaScript,然後將它們連接並縮小(製作中)成一個文件。該文件將包含在每個頁面中。

因爲說真的,我不希望有一個「產品」,當用戶是一個「類」頁面上的CoffeeScript加載到瀏覽器...

是的,你做的。這就是整個問題。這一個捆綁在上的JavaScript文件每頁加載。這樣,瀏覽器在第一次請求期間將整個網站的JavaScript一次性下載爲一個文件,並在每個其他頁面上使用緩存副本。

...因爲沒有該代碼將被用於

包括每個頁面上的額外代碼有,如果它不執行,並從緩存加載字面上沒有成本。與此同時,由於您最大限度地減少了外部JavaScript請求的數量,因此它可以節省大筆費用,這意味着您的腳本可以立即運行,並且您的DOM準備事件可以更快地啓動。

這是由你來確保這是安全的,並且你的代碼只針對它應該影響的網站部分。通常情況下,您可以通過按ID選擇特定元素並確保您的ID不在頁面之間共享,並且您不將具有特殊含義的類應用於不應該具有這些元素的元素。

有沒有一種方法,以確保只有所需要的特定視圖的CoffeeScripts被加載,而不是所有的人?

不,沒有爲每個頁面創建單獨的清單文件,這違背了使用資產管道的主要目的之一。不要這樣做。這是正確的,期望的和有意的,你的整個縮小的JavaScript包文件包含在每個頁面上。

+0

現在已經很完美了。這樣它只需要加載一次。而且這也將有助於在不同視圖上強制執行HTML元素的命名規則,這些規定我很鬆懈,導致我犯了錯誤。謝謝! – AKWF

相關問題