javascript的動態載入、快取、更新以及重複使用(一)_javascript技巧
使用範圍:
OA、MIS、ERP等資訊管理類別的項目,暫時不考慮網站。
遇到的問題:
完成一個項目,往往需要引用很多js文件,例如jQuery.js、easyUI等。還有自己寫的一些列js文件,那麼這些文件如何方便的加載,如果文件有變化如何才能讓客戶端及時更新快取?如果能夠提高點運作效率,那就更好了。
目標:
1、 可以方便的引用js檔。
2、 盡量使用各種緩存,避免頻繁從伺服器讀取檔案。
3、 如果js檔案有更新或增加、減少幾個減少js文件,需要客戶端能夠自動、立刻更新。
4、 Js檔案的複用。
頁面結構:
一般OA、MIS這一類的項目,大多採用frameset或iframe的方式來實現,這樣就有了父頁和子頁的概念。我們可以利用這一點來做文章。
網頁可分為三塊:外殼、首頁、標籤、資料清單、表單(新增、修改)。因為這裡要說的載入js的方法,需要利用這個頁面結構,也正是因為這個原因,所以暫時不支援網站。
看這張圖有點眼熟吧。恩,就是這種結構。
正文
現在做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){
好了,大功告成了嗎?當然沒有!預知後事如何,請聽下回分解。
ps:下集預告。就是具體的實現代碼,還有一些思路和想法,不知道大家還有啥想知道的沒,有的話,歡迎在下面回覆一下。謝謝先。

熱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)

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

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

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

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

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

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

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

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