在JavaScript應用程式中實作延遲載入的方法_基礎知識
無論簡單或複雜的網頁應用,都由一些HTML、JavaScript、CSS檔案組成。通常開發者會透過JQuery、Knockout、Underscore等等這樣的第三方JavaScript框架來提高開發速度。由於這些JavaScript框架都針對特定的用途開發而且已經得到了“驗證”,所以直接使用它們就比自己從頭實現所需的功能顯得更為合適。然而,伴隨著應用的複雜度不斷上升,寫出乾淨、低耦合、可維護的程式碼變得越來越重要。在這篇文章裡,我將解釋RequireJS框架如何幫助應用開發者寫出更模組化的程式碼,以及它是如何透過延遲載入JavaScript檔案來提高應用程式效能的。
開始的部分我們先不用RequireJS框架,然後在下一個章節用RequireJS來重構它。
下面的這個HTML頁麵包含了一個id為「message」的
元素。當使用者造訪這個頁面的時候,它將展示訂單Id和客戶姓名資訊。
Common.JS檔案包含了兩個模組的定義-Order和Customer。函數showData和頁面的body結合在一起,它透過呼叫write函數來把要輸出的資訊放入頁面中。作為範例,我在showData函數裡硬編碼了Id為1,客戶姓名為Prasad。
<!DOCTYPE html> <html> <head> <title>JavaScript NonRequireJS</title> <script src="common.js" type="text/javascript"></script> </head> <body> <strong>Display data without RequireJS</strong> <p id="message" /> <script type="text/javascript"> showData(); </script> </body> </html> Common.JS
function write(message) { document.getElementById('message').innerHTML += message + '</br>'; } function showData() { var o = new Order(1, "Prasad"); write("Order Id : " + o.id + " Customer Name : " + o.customer.name); } function Customer(name) { this.name = name; return this; } function Order(id, customerName) { this.id = id; this.customer = new Customer(customerName); return this; }
在瀏覽器中開啟這個頁面,你將會看到如下的資訊。
雖然上面的程式碼能夠顯示輸出,但是它仍有一些問題:
- Common.JS檔案包含了所有需要定義的函數(write,showData),而且模組(Order,Customer)很難維護和重複使用。假如你想在其它頁面裡復用write函數並引用了上面的JavaScript文件,那麼你也導入了這個頁面可能不需要的其它函數和模組。
- Order模組(或在物件導向中稱為「類別」)在初始化過程中創造了一個Customer模組的實例。這意味著Order模組依賴Customer模組。這些模組間的緊密耦合使得將來在最佳化時很難重構與維護。
- 每當客戶端要求此頁面時,Common.JS檔案就會被載入DOM。在上面這個例子中,儘管我們只需要在頁面上輸出訊息,但我們仍把那些不需要的模組(Customer,Order)載入了記憶體。載入不必要的應用資源(JavaScript、CSS、圖片檔案等等)會降低應用程式的效能。
- Common.JS檔案裡的模組可以被分離到不同的JavaScript檔案裡,但是當應用變得越來越複雜時,很難判斷JavaScript檔案之間的依賴關係與需要被載入的檔案的載入順序。
RequireJS框架處理了JavaScript檔案間的依賴關係,並且根據需要按順序載入它們。
用RequireJS搭建應用程式
現在讓我們來看看重構過的程式碼。下面的HTML程式碼引用了Require.JS檔。 data-main屬性定義了這個頁面的唯一入口點。在下面這個場景中,它告訴了RequireJS在啟動的時候載入Main.js。
<!DOCTYPE html> <html> <head> <title>JavaScript RequireJS</title> <script src="Require.Js" type="text/javascript" data-main="Main.js"></script> </head> <body> <strong>Display data using RequireJS</strong> <p id="message" /> </body> </html>
Main.JS
由於這個檔案已經透過data-main屬性指定,RequireJS將會盡快的載入它。這個檔案使用了RequireJS框架的函數來決定和定義對於其它JavaScript檔案的依賴關係。在下面的程式碼片段裡,第一個參數表示依賴關係(依賴Order.JS檔),第二個參數為一個回調函數。 RequireJS分析所有的依賴關係並載入它們,然後執行這個回呼函數。請注意,第一個參數的值(Order)必須和檔案名稱一致(Order.JS)。
require(["Order"], function (Order) { var o = new Order(1, "Prasad"); write(o.id + o.customer.name); });
Order.JS
RequireJS框架提供了一個定義和維護JavaScript檔案間依賴關係的簡單途徑。下面程式碼中的define函數宣告了Customer.JS必須在處理Order回呼函數前載入。
define(["Customer"], function (Customer) { function Order(id, custName) { this.id = id; this.customer = new Customer(custName); } return Order; } );
Customer.JS
這個文件不依賴任何其它JavaScript文件,所以define函數的第一個參數的值是一個空數組。
define([], function () { function Customer(name) { this.name = name; } return Customer; } );
好了,現在用你的瀏覽器打開這個應用,你將會看到如下的輸出。要注意的是RequireJS只載入了必要的JavaScript檔案。
總結
在這篇文章裡,我們分析了RequireJS框架是如何處理JavaScript檔案間的依賴關係並根據需要載入它們的。它能夠幫助開發者寫出更鬆散耦合、更模組化且更具可維護性的程式碼。
謝謝
下載原始碼: Lazy Loading using RequireJS (Prasad Honrao, Codetails)

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
![在Illustrator中載入插件時出錯[修復]](https://img.php.cn/upload/article/000/465/014/170831522770626.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
啟動AdobeIllustrator時是否會彈出載入插件時出錯的訊息?一些Illustrator用戶在打開該應用程式時遇到了此錯誤。訊息後面緊跟著一系列有問題的插件。此錯誤提示表示已安裝的插件有問題,但也可能是由於VisualC++DLL檔案損壞或首選項檔案受損等其他原因所引起。如果遇到此錯誤,我們將在本文中指導您修復問題,請繼續閱讀以下內容。在Illustrator中載入外掛程式時出錯如果您在嘗試啟動AdobeIllustrator時收到「載入外掛程式時出錯」的錯誤訊息,您可以使用以下用途:以管理員身

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

字幕在你的WindowsPC上不能在Stremio上運行嗎?一些Stremio用戶報告說,影片中沒有顯示字幕。許多用戶報告說他們遇到了一條錯誤訊息,上面寫著「載入字幕時出錯」。以下是與此錯誤一起顯示的完整錯誤訊息:載入字幕時出錯載入字幕失敗:這可能是您正在使用的插件或您的網路有問題。正如錯誤訊息所說,可能是您的網路連線導致了錯誤。因此,請檢查您的網路連接,並確保您的網路運作正常。除此之外,這個錯誤的背後可能還有其他原因,包括字幕加載項衝突、特定影片內容不支援字幕以及Stremio應用程式過時。如

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

如果您在插入超連結時出現在Outlook時遇到凍結問題,可能是因為網路連線不穩定、Outlook版本舊、防毒軟體幹擾或加載項衝突等原因。這些因素可能導致Outlook無法正常處理超連結操作。修正插入超連結時Outlook凍結的問題使用以下修復程式解決插入超連結時Outlook凍結的問題:檢查已安裝的加載項更新Outlook暫時停用您的防毒軟體,然後嘗試建立新的使用者設定檔修復辦公室應用程式卸載並重新安裝Office我們開始吧。 1]檢查已安裝的加載項可能是Outlook中安裝的某個加載項導致了問題。

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We
