2012-03-14 42 views
0

我正在門戶環境中工作。我想讓多個portlet使用一些常見的YUI模塊。我也希望讓portlet 100%自成體系。換句話說,我不希望在門戶級別將YUI.add調用放入通用JS中。因此,每個porlet都有相同JS代碼的副本(通過構建過程添加到公共依賴項中,我不需要讓代碼跨Portlet同步)。如果多個portlet位於同一頁面上,則這意味着YUI.add將被每個調用。這會導致問題嗎?我可能會把所有的JS放在一個單獨的servlet中,並讓YUI動態加載器來處理它,但是這會導致外部依賴。爲了讓這些Portlet工作時,servlet將不得不部署...在同一頁面上多次調用相同模塊的YUI.add是否安全?

回答

0

YUI跟蹤模塊,它已經加載:

http://yuilibrary.com/yui/docs/api/files/yui_js_yui.js.html#l568

每次你打電話YUI.add(模塊它通過YUI實例循環並檢查是否已加載模塊。如果實例尚未加載模塊,則add方法將模塊提供給實例的加載程序。

因此,在冗餘調用add時有一個小小的開銷,但並不嚴重。

+0

謝謝,這就是我讀代碼的方式,我只是擔心'env.mods [name] = mod;'在線[560](http://yuilibrary.com/yui/docs/ api/files/yui_js_yui.js.html#l560)盲目地將新的模塊定義添加到'YUI.Env'全局對象,而不檢查它是否已經定義。假設對此沒有負面影響是否安全? – Lucas 2012-03-15 10:36:11

+0

@Lucas只要所有多餘的「add」調用都是相同的,我不會看到任何負面影響。這只是分配〜因此比通過YUI實例的循環更小的開銷。 – Shad 2012-03-15 16:16:14

+0

,所以他們必須保持相同...這就是我的想法。雖然現在如果portlet使用該模塊的較新版本進行更新,它會使事情變得更加困難,但該頁面上的所有其他portlet也必須更新,因爲它會按名稱放置定義並忽略版本號......不像我想的那樣便攜,但似乎是我別無選擇。猜猜我可以在調用add之前檢查YUI.Env,但是這似乎是應該在框架中的東西... – Lucas 2012-03-16 17:01:09

相關問題