[英]Best practice for lazy loading in JavaScript
動態加載HTML內容並將其注入頁面的最佳方法是什么(當HTML同時包含<script src="..." />
標記和對這些腳本的函數調用時)?
考慮這種方法(為簡單起見,我將考慮使用jQuery):
<script>
$.ajax({
url: 'http://...',
success: function(html) {
$("body").append(html);
}
});
</script>
假設返回的html包含以下內容:
<script src="some_script.js"></script>
<script>
some_function(); // function defined in some_script.js
</script>
由於some_function()
是在some_script.js中定義的,因此只有在some_script.js加載后才可用,但(通常)它將在some_script.js加載之前執行(從而導致錯誤)。
顯然,有一些解決方案可以解決此問題,但是這種情況下的最佳實踐是什么? 應該改用諸如RequireJS之類的庫嗎?
上面的示例是我使用模式的結果:我有一個僅在將要使用它時才加載的組件(那時,我進行Ajax調用以同時檢索HTML和所需的腳本)。 盡管如此,仍然可能會需要許多腳本,並且將它們作為一組標簽寫在HTML模板中要比通過JavaScript加載更為容易(這也是首選方法,因為腳本URL可能在應用程序內部生成,因此使用純JS腳本可能不知道絕對腳本URL)。
實際上,Safari和Internet Explorer(以及最有可能的其他瀏覽器)不會執行通過Ajax注入的<script>
作為安全措施。
我的建議是,當您需要一個相當大的庫(但實際使用Web應用程序並不需要)時,是將包含該庫的.js文件加載到文檔中,之后您可以使用所有庫中定義的屬性和方法。 將回調偵聽器附加到腳本加載器,並執行回調中的所有代碼,而不是外部.js文件本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.