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

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

May 16, 2016 pm 04:45 PM
動態載入 復用 更新 快取

使用範圍:

  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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1668
14
CakePHP 教程
1427
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
暴雪戰網更新一直卡在45%怎麼解決? 暴雪戰網更新一直卡在45%怎麼解決? Mar 16, 2024 pm 06:52 PM

  暴雪戰網更新一直卡在45%怎麼解決?近期有很多人在更新軟體的時候,都是卡在45%的進度條,重啟多次還是會卡住,那麼這種情況應該要如何解決,我們可以透過重新安裝客戶端、切換地區、刪除文件的方式來處理,本期軟體教程就來分享操作步驟,希望能帶給更多的人幫助。  暴雪戰網更新一直卡在45%怎麼解決  一、客戶端  1、首先需要確認你的客戶是官網下載的官方版本。  2、如果不是的話,使用者可以進入亞服網址來進行下載。  3、進入以後點選右上角的下載就可以了。  注意:安裝的時候一定不要選擇簡體中文。

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

Linux如何查看和刷新dns快取 Linux如何查看和刷新dns快取 Mar 07, 2024 am 08:43 AM

DNS(DomainNameSystem)是網際網路中用來將網域名稱轉換為對應IP位址的系統。在Linux系統中,DNS快取是一種將網域名稱和IP位址的映射關係儲存在本地的機制,可提高網域解析速度,減輕DNS伺服器的負擔。 DNS快取允許系統在之後存取相同網域名稱時快速檢索IP位址,而不必每次都向DNS伺服器發出查詢請求,從而提高網路效能和效率。本文不念將和大家一起探討如何在Linux上查看和刷新DNS緩存,以及相關的詳細內容和範例程式碼。 DNS快取的重要性在Linux系統中,DNS快取扮演關鍵的角色。它的存在

Windows無法存取指定裝置、路徑或文件 Windows無法存取指定裝置、路徑或文件 Jun 18, 2024 pm 04:49 PM

小夥伴電腦出現這樣的故障,開啟「此電腦」和C碟檔案會提示「Explorer.EXEWindows無法存取指定裝置、路徑或檔案。你可能沒有適當的權限存取存取專案。」包括資料夾、檔案、此電腦、回收站等,雙擊都會彈出這樣的窗口,右鍵又是正常的。這是系統更新導致,如果你也遇到這樣的狀況,下面小編教大家如何解決。一,開啟登錄編輯程式Win+R,輸入regedit,或右鍵開始選單執行輸入regedit;二,定位登錄機「電腦\HKEY_CLASSES_ROOT\PackagedCom\ClassInd

Windows永久暫停更新,Windows關閉自動更新 Windows永久暫停更新,Windows關閉自動更新 Jun 18, 2024 pm 07:04 PM

Windows更新可能導致以下一些問題:1.相容性問題:某些應用程式、驅動程式或硬體裝置可能與新的Windows更新不相容,導致它們無法正常運作或崩潰。 2.效能問題:有時,Windows更新可能會導致系統變得更慢或出現效能下降的情況。這可能是由於新的功能或改進需要更多資源來運作。 3.系統穩定性問題:某些用戶報告稱,在安裝Windows更新後,系統可能會出現意外的崩潰或藍屏錯誤。 4.資料遺失:在罕見的情況下,Windows更新可能會導致資料遺失或檔案損壞。這是為什麼在進行任何重要的更新之前,請備份您

抖音怎麼更新最新版本 抖音怎麼更新最新版本 Mar 27, 2024 am 11:06 AM

1.打開抖音app,點選右下角的【我】,點選右上角的【三條槓】圖示。 2.選擇【設定】,點選進入設定介面,找到並點選【通用設定】。 3.在通用設定介面下拉,找到並點選【檢查更新】。 4.如果使用者目前使用的版本不是最新版本,就會出現新版本的更新提示,點選【升級】。 5.等待安裝包下載完畢,系統會自動安裝,點選【繼續安裝】即可。 6.如果目前已經是最新版本,則會出現【沒有可用的更新版本】的提

微星顯卡驅動怎麼更新?微星顯示卡驅動下載安裝步驟 微星顯卡驅動怎麼更新?微星顯示卡驅動下載安裝步驟 Mar 13, 2024 pm 08:49 PM

  微星顯示卡是市面上主流的顯示卡品牌,我們知道顯示卡都需要安裝驅動才能發揮效能,並保證相容性。那麼微星顯示卡驅動要怎麼更新到最新版本呢?一般微星顯卡驅動可以官網下載驅動安裝,以下就來了解一下。  顯卡驅動更新方法:  1.首先我們進入「微星官網」。  2.進入後點選右上角「搜尋」按鈕並輸入自己的顯示卡型號。  3.然後找到對應的顯示卡點開詳情頁。  4.隨後進入上方「技術支援」選項。  5.最後在“驅動器&下載”

Outlook在更新收件匣時卡住了; Outlook在更新收件匣時卡住了; Mar 25, 2024 am 09:46 AM

當Outlook在更新收件匣時發生問題,可能會影響工作效率。本文將介紹一些簡單的故障排除步驟,幫助您解決問題並讓Outlook恢復正常。為什麼Outlook總是卡在收件匣更新上?Outlook更新收件匣時可能會出現卡頓的情況,常見原因包括網路問題、信箱容量過大,以及防毒軟體或防火牆的影響。外部插件或資料檔案損壞也可能導致這種情況發生。接下來,我們將詳細探討這些可能的原因,並提供解決方案。修正Outlook卡住更新收件匣如果Outlook無法更新你的收件匣,請參考下面列出的解決方案:重啟前景禁

See all articles