現在有許多成熟的js模組載入器,例如requirejs和seajs等,但是對一些小的專案來說,它們的功能可能太過於“強大”,也許我們只是想要有一個能動態載入js的功能,或許我們只是想裝B一下,讓自己寫出的頁面沒有一大堆的這樣的東西。前面說的兩種js載入器都是比較強調模組性,也就是比較強調js檔案的組織和管理,比較適用於大的專案。
就像剛剛說的,我只想有一個js檔案載入器,我只需提供給它一個js檔案的位址就行了的那種呢?那就進入我們的主題了,使用headjs。 headjs其實是一整套的工具,但我只想介紹的是它其中的Javascript Loader功能。以下是它的基本用法:
head.js("/path/to/file.js");
最簡單的用法,提供一個js的檔案的位址給它作為參數,然後它就會默默的在背後進行無阻塞的加載了,至於什麼時候加載完可用了,誰也不知道。
head.js("/path/to/file.js", function() { /*js加载完成*/ });
最基本的用法,除了提供一個位址參數外,還提供一個回呼函數作為第二個參數。在js載入完成後,回呼叫回呼函數,你可以把依賴該js的程式碼寫在回呼函數裡。
head.js("file1.js", "file2.js", ... "fileN.js");
提供多個js檔案位址,這些js會並行的加載,但會按照參數給定的先後順序執行這些文件,例如即使file2.js比file1.js先載入完成,但它還會一直等到在file1.js載入和執行完後再執行。
head.js("file1.js", "file2.js", function() { });
並行載入多個js,並依參數順序執行,所有js準備完成時,執行回呼函數。
head.js("file1.js"); head.js("file2.js"); head.js("file3.js");
多個js並行加載,並且誰先加載完就先執行誰
head.js("file1.js").js("file1.js").js("file3.js ");
上一種方法的鍊式呼叫法
這樣的話用headjs來載入js檔案基本上都夠用了,而且還能處理依賴關係。當是如果你繼續裝B,弄一個網站,巴不得什麼特效都用上,這裡找一個jquery插件,那裡再找一個,總之就是弄非常多的文件,其中又有復雜的依賴關係,那該腫麼辦?這還用問嗎,以上的那幾個用法完全能解決。但轉念一想,既然裝B那就一裝到底吧,現在不是流行模組什麼的吧,那咱也整個模組吧,但不是像commonJS說的那麼複雜,就是定義一個模組,然後規定這個模組是有那幾個js檔案組成的,其中的依賴關係又如何等等。那就動手吧,headjs使用的是MTI協議,修改下它應該也是沒問題的吧。屌絲又裝高富帥了,其實說是修改,不如說是增加幾段程式碼進去,而且載入依賴等功能完全是用headjs的api實現的。
這裡,我給headjs的新增了兩個方法,一個是add(name,file,preload)添加模組,參數name是模組名稱,file是要用到的js文件地址,如果有多個文件,並且存在依賴關係,則file可以是一個數組,這個數組的里元素就是用到的文件地址,並且按數組元素的順序進行依賴。第三個參數preload用指定是否預先載入模組文件,如果為false,則在使用該模組的時候才會載入文件,為true時則在定義模組時就會立即載入所用到的文件,預設為false
另一個是use(name,callback),這個方法用來使用模組。 name是用add()方法定義的模組名,callback是模組已經載入完成後呼叫的回呼函數。
於是我們就可以這樣來使用headjs了:
head.add('jqueryui',[jquery.js,jqueryui.js]);//定义模块 head.use('jqueryui',function(){ //可以使用jqueryui啦 });
如果模組很多,則模組的定義碼可以單獨寫在一個檔案裡,並且引入了headjs的後,就立即載入該模組。這個過程可以很簡單的像這樣來實現:
看到那個init屬性沒有,我把它叫做初始化屬性,init的值表示檔名,例如上面init就代表與headjs同目錄的init.js這個檔。所謂的初始化就是在使用use()之前,init檔一定是已經載入好了的。所以可以把模組的定義寫在初始化檔中。
尼瑪,這是要鬧哪樣啊,怎麼又多了個main屬性,好吧,我承認是看到別人有這個東西於是手賤也跟風弄了一個。這個main屬性代表的是模組名,就是head.js與init.js檔案都載入完成後,就會自動執行main屬性指定的模組(當然要先在init中定義該模組)。所以有了這兩個東東後,我們就可以在頁面沒有一句js程式碼的情況下(除了引入headjs那段標籤),執行很複雜的程式碼了。
還有一個要說明的地方,就是模組檔案的存放位置。模組檔案應該和head.js存放在同一個目錄,例如head.add('a','a.js'),這裡的a.js的路徑是和head.js相同的,就是說模組檔案的路徑是相對於head.js存放的路徑的,而且只可以往下走,不可以往上走,比如:
head.add('a','a/a.js')//正確
head. add('a','../a.js')//錯誤,不能往上定位
最後,放上修改過後的head.js來源文件,不是壓縮版,裡面改的地方都有註解。
以上就是本文的全部內容,希望對大家有幫助,同時也希望多多支持PHP中文網!
更多用headjs來管理和載入js 提高網站載入速度相關文章請關注PHP中文網!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。