2015-10-22 160 views
2

我有一些抽象的問題。 可以說我有一個使用1000多個JS腳本文件的網站。 (不一次,但如果用戶通過所有現有的流程,則需要總共1000多個JS腳本)。動態JavaScript加載

我知道使用RequireJS我可以動態加載任何我需要的腳本,並且這爲我節省了很長時間。 但是!

爲了讓RequireJS加載JS文件,它們需要由客戶端下載。 因此,第一次打開網頁時,我下載了超過1000個JS腳本文件,這也需要很長時間!

我想知道是否有任何動態加載的方式來從遠程動態下載它們。 我知道爲了最好地工作,必須有一些巧妙的機制,它會在之前完成下載它們,否則它會放慢速度。

無論如何,我希望你能理解我的問題,我想避免在第一次打開頁面時下載1000多個文件。我希望他們按需下載。

我不能使它們像許多網站做的一樣單個文件。

感謝您的幫助和討論:)

+3

你矛盾自己。是的,RequireJS可以根據需要動態加載腳本。這實際上與第一次打開頁面時加載所有1000多個文件相反。 – JJJ

+0

我想我們不在同一頁面,當你說RequireJS動態加載腳本時,你的意思是腳本需要從遠程服務器上下載,然後加載到可用的狀態? – johni

+2

我覺得你的困惑來的地方是這樣的:*「爲了讓RequireJS加載JS文件,它們需要被客戶端下載。」*「RequireJS加載JS文件」和「客戶端下載「 - 下載*是RequireJS加載文件的方式。當他們實際上是同一件事情時,您將「下載」和「加載」視爲單獨的東西。如果您在RequireJS可以「加載」它們之前必須預先加載所有文件,那麼將會使RequireJS完全無法使用,您不覺得嗎? – JJJ

回答

0

我的猜測是,你正在努力實現「延遲加載」。 您可以使用此插件需要: https://github.com/nikospara/require-lazy

在這裏閱讀更多: http://www.joezimjs.com/javascript/lazy-loading-javascript-with-requirejs/

這裏的主要思想是,而不是加載所有的依賴加載網頁時,您加載的方法需要

時必要的項目,並且您調用該方法例如:(用戶點擊一個按鈕,加載文件後)

$('#somebutton').on('click', loadFiles); 

function loadFiles() { 
    require(['every', 'javascript', 'dependency', 'for', 'other', 'screen'], 
    function(ev, js, dep, fr, othr, scrn){ 
      // Create the screen with your dependencies 
    }); 
} 
+1

雖然此鏈接可能會回答問題,但最好在此包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

ok thx,我編輯了帖子 –