簡體   English   中英

延遲加載JavaScript的最佳做法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM