搜尋
首頁web前端js教程javascript的動態載入、快取、更新以及重複使用(一)_javascript技巧

使用範圍:

  OA、MIS、ERP等資訊管理類別的項目,暫時不考慮網站。

遇到的問題:

  完成一個項目,往往需要引用很多js文件,例如jQuery.js、easyUI等。還有自己寫的一些列js文件,那麼這些文件如何方便的加載,如果文件有變化如何才能讓客戶端及時更新快取?如果能夠提高點運作效率,那就更好了。

目標:

1、  可以方便的引用js檔。

2、  盡量使用各種緩存,避免頻繁從伺服器讀取檔案。

3、  如果js檔案有更新或增加、減少幾個減少js文件,需要客戶端能夠自動、立刻更新。

4、  Js檔案的複用。

頁面結構:

  一般OA、MIS這一類的項目,大多採用frameset或iframe的方式來實現,這樣就有了父頁和子頁的概念。我們可以利用這一點來做文章。

  網頁可分為三塊:外殼、首頁、標籤、資料清單、表單(新增、修改)。因為這裡要說的載入js的方法,需要利用這個頁面結構,也正是因為這個原因,所以暫時不支援網站。

  看這張圖有點眼熟吧。恩,就是這種結構。

javascript的動態載入、快取、更新以及重複使用(一)_javascript技巧

正文

  現在做web版的應用,越來越依賴各種js了,第三方的jQuery、easyUI、my97等,還有自己寫的各種js。要實現的功能越來越多,需要使用的js也越來越多,js檔案的修改也很頻繁。於是就出現了許多問題,例如每個頁面都要寫一大堆

動態載入

  在頁面裡使用<script>載入js,顯然很麻煩,那怎麼辦呢?想來想去還是用動態載入的方法來解決。在網路上也搜尋了一番,有很多種方法,有自己手動寫的,有整理成框架的(比如seejs)。有的時候還是覺得自己弄一個更加的應手,所以打算自己寫一套。 </script>

  如何動態載入呢?使用jQuery提供的方法嗎?這個倒是可以,但是頁面必須引用jQuery和我寫的載入js檔的js。也就是說一個頁面要寫兩個<script>,這就很麻煩了。能寫一個,就一定不要寫兩個,雖然只是多了一個,但是多了這麼一個就真的很麻煩。所以決定自己手寫一個動態載入的小方法。 </script>

  不會寫怎麼辦呢?百度大嬸來幫忙吧。各種搜呀,終於找到了比較理想的方法,恩就用這個了。

複製程式碼 程式碼如下:

/*實現動態載入js的函數,來自於互聯網,做了一點修改,可以相容於IE10 */
var loadscript =
{
    $$: function(id) { return document.getElementById(id); },
    tag: function(element) { return document.getElementsByTagName(element); },
    ce: function(element) { return document.
    js: function(url, callback) {
        var s = loadscript.ce('script');
   
        if (document.documentMode == 10 || document.documentMode == 9) {
        
            s.onreadystatechange = ready;
            s.onerror = s.onload = loaded;
        }
       
        function ready() { /*IE7.0/IE10.0*/
                    callback() ;            }

        }

        function loaded() { /*chrome/IE10.0*/
            callback();

載入順序

  和新程式碼已經搞定了,下面就是如何載入其他js檔案了,由於檔案比較多,還有一定的依賴關係,想來想去還是弄個js檔案的字典吧,然後做一個載入順序,按照這個順序來載入。

  為了更穩定一點,決定採用一個一個載入的方式,即載入完一個js,然後在載入另一個js。這樣就可以確保依賴關係。當然缺點是載入速度會比較慢。一般網頁載入js是可以多個js檔案一起下載的,這個速度就會比較快。

使用快取

  一般瀏覽器對於各種資源(例如網頁、圖片、js、css等)會有一個緩存,已經有了就不會再向伺服器去下載了。看似很好,但有兩個問題:

    A、瀏覽器如何判斷快取的js檔案是不是最新的?

    B、js檔案更新了,如何強制瀏覽器更新?

  瀏覽器是怎麼判斷的呢?具體步驟我也不太清楚,只是知道有一個步驟是要到伺服器問問,我快取的js檔案是不是最新的,然後才能夠確定本地的快取是否是最新的,如果是最新的就不折騰了,如果不是再去下載最新的。是說呢,即使客戶端已經有了js檔案的緩存,但是瀏覽器要確認一下是否最新,還是會跑到伺服器去問問。這個,折騰呀。當然一般情況下,這個過程會很快,但是有時候這個過程會很慢。

  所以呢,還是盡量避免加載js的好。於是就引出來的「js檔的複用」。

更新js檔

  Js文件更新了,但是瀏覽器卻還在用以前的js文件,因為有緩存了,而且還固執的認為緩存的js文件就是最新的,哎咋辦呀?

  最簡單的方法就是在載入js的時候,後面跟一個版本號,有更新了,就版本號 1。如 xxx.js?v=1。 Js檔案更新後就是 xxx.js?v=2。這樣js就一定會被更新了。

  看起來似乎很簡單,但是這個版本號碼如何加上去?版本號碼本身又如何更新呢?

復用

  這個就要先看看上面那個圖了,就是頁面結構,有一個外殼頁(或者首頁),我們叫做父頁。裡面還有若干iframe載入的頁面,我們加做子頁。

  一般的做法是,父頁裡載入jQuery.js,然後子頁也要載入jQuery.js。當然當子頁在載入jQuery.js的時候,直接從快取裡面提取,一般不會再去折騰伺服器了。

  但是,既然父頁裡面已經加載了,子頁為啥還要再加載一次?直接用父頁裡載入好的行不行呢?上網搜了一下,似乎沒有人這麼做。也許是我太另類了吧,我就是想實作這個方法。優點就是,所有的js檔案都在父頁裡加載,子頁直接使用父頁裡加載好的js,這樣子頁就不需要在折騰js檔案了。這樣效率也可以更高一些,畢竟即使用快取裡加載,也是要判斷一下,然後在做個加載的動作,還是會有一點點損耗,js檔案越多也就越明顯。

  那麼如何實現呢,想想似乎很簡單。

  父頁裡使用jQuery

  Var aa = $('div');  //找到父頁裡的所有div

  子頁裡是不是可以這麼做?

  Var  bb = top.$ ('div') ; //能夠找到div,但是不是子頁的div而是父頁裡的div。

  咋回事呢?原因就在於搜尋範圍。 jQuery是有三個參數的,我們平常只用了第一個,後面的就被忽略了。那第二個參數是啥呢?就是搜尋範圍。沒有指定的時候,jQuery會在哪裡搜尋呢?載入jQuery的頁裡面搜索,而不是呼叫$的頁面裡搜尋。

  解法也很簡單,加個參數就好了

  Var  bb = top.$ ('div',document) ; //指定搜尋範圍:子頁的document

  等等,這個似乎很煩人,我們在寫腳本的時候,還要考慮一下,這個腳本是在父頁裡執行還是在子頁裡執行嗎?

  好了,做一個簡單的封裝,避免這個麻煩。子頁裡寫個函數

複製碼 代碼如下:

function $ (p1){


function $ (p1){
function $ (p1){function $ (p1){ . $ (p1,document);}
 

  好了,大功告成了嗎?當然沒有!預知後事如何,請聽下回分解。

ps:下集預告。就是具體的實現代碼,還有一些思路和想法,不知道大家還有啥想知道的沒,有的話,歡迎在下面回覆一下。謝謝先。

javascript的動態載入、快取、更新以及重複使用(一)_javascript技巧
 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

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

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。