么是JS延遲加載?
JS延遲加載,也就是等頁面加載完成之后再加載JavaScript文件
為什么讓JS實現延遲加載?
js的延遲加載有助于提高頁面的加載速度。
Js延遲加載的方式有哪些?一般有以下幾種方式:
·defer屬性
·async屬性
·動態創建DOM方式
·使用jQuery的getScript方法
·使用setTimeout延遲方法
·讓JS最后加載
HTML 4.01為<script>標簽定義了defer屬性。標簽定義了defer屬性元素中設置defer屬性,等于告訴瀏覽器立即下載,但延遲執行標簽定義了defer屬性。
用途:表明腳本在執行時不會影響頁面的構造。也就是說,腳本會被延遲到整個頁面都解析完畢之后再執行在<script>元素中設置defer屬性,等于告訴瀏覽器立即下載,但延遲執行
<!DOCTYPE html>
<html>
<head>
<script src="test1.js" defer="defer"></script>
<script src="test2.js" defer="defer"></script>
</head>
<body>
<!--這里放內容-->
</body>
</html>
說明:雖然<script>元素放在了<head>元素中,但包含的腳本將延遲瀏覽器遇到</html>標簽后再執行HTML5規范要求腳本按照它們出現的先后順序執行。在現實當中,延遲腳本并不一定會按照順序執行defer屬性只適用于外部腳本文件。支持HTML5的實現會忽略嵌入腳本設置的defer屬性
HTML5 為<script>標簽定義了async屬性。與defer屬性類似,都用于改變處理腳本的行為。同樣,只適用于外部腳本文件。標簽定義了async屬性。與defer屬性類似,都用于改變處理腳本的行為。同樣,只適用于外部腳本文件。
目的:不讓頁面等待腳本下載和執行,從而異步加載頁面其他內容。異步腳本一定會在頁面 load 事件前執行。不能保證腳本會按順序執行
<!DOCTYPE html>
<html>
<head>
<script src="test1.js" async></script>
<script src="test2.js" async></script>
</head>
<body>
<!--這里放內容-->
</body>
</html>
async和defer一樣,都不會阻塞其他資源下載,所以不會影響頁面的加載。
缺點:不能控制加載的順序
//這些代碼應被放置在</ body>標簽前(接近HTML文件底部)
<script type="text/javascript">
function downloadJSAtOnload() {
varelement = document .createElement("script");
element.src = "defer.js";
document.body.appendChild(element);
}
if (window. addEventListener)
window.addEventListener("load" ,downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload) ;
else
window. onload =downloadJSAtOnload;
</script>
$.getScript("outer.js" , function(){ //回調函數,成功獲取文件后執行的函數
console.log(“腳本加載完成")
});
<script type="text/javascript" >
function A(){
$.post("/1ord/1ogin" ,{name:username,pwd:password},function(){
alert("Hello");
});
}
$(function (){
setTimeout('A()', 1000); //延遲1秒
})
</script>
把js外部引入的文件放到頁面底部,來讓js最后引入,從而加快頁面加載速度例如引入外部js腳本文件時,如果放入html的head中,則頁面加載前該js腳本就會被加載入頁面,而放入body中,則會按照頁面從上倒下的加載順序來運行JavaScript的代碼。所以我們可以把js外部引入的文件放到頁面底部,來讓js最后引入,從而加快頁面加載速度。
上述方法2也會偶爾讓你收到Google頁面速度測試工具的“延遲加載javascript”警告。所以這里的解決方案將是來自Google幫助頁面的推薦方案。
//這些代碼應被放置在</body>標簽前(接近HTML文件底部)
<script type= "text/javascript">
function downloadJSAtonload() {
var element = document.createElement("script");
element.src = "defer.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent )
window.attachEvent("onload", downloadJSAtonload);
else window.onload = downloadJSAtOnload;
</script>
這段代碼意思等到整個文檔加載完后,再加載外部文件“defer.js”。
使用此段代碼的步驟:
6.1)復制上面代碼
6.2)粘貼代碼到HTML的標簽前 (靠近HTML文件底部)
6.3)修改“defer.js”為你的外部JS文件名
6.4)確保文件路徑是正確的。例如:如果你僅輸入“defer.js”,那么“defer.js”文件一定與HTML文件在同一文件夾下。
注意:
這段代碼直到文檔加載完才會加載指定的外部js文件。因此,不應該把那些頁面正常加載需要依賴的javascript代碼放在這里。而應該將JavaScript代碼分成兩組。一組是因頁面需要而立即加載的javascript代碼,另外一組是在頁面加載后進行操作的javascript代碼(例如添加click事件。
喜歡互聯網的一點是在互聯網放置靜態頁面是如此簡單。今天有人問我該怎么做,所以我想我會快速地寫下來!
-- Julia Evans(作者)
我喜歡互聯網的一點是在互聯網放置靜態頁面是如此簡單。今天有人問我該怎么做,所以我想我會快速地寫下來!
我的所有網站都只是靜態 HTML 和 CSS。我的網頁設計技巧相對不高( https://wizardzines.com 是我自己開發的最復雜的網站),因此保持我所有的網站相對簡單意味著我可以做一些改變/修復,而不會花費大量時間。
因此,我們將在此文章中采用盡可能簡單的方式 —— 只需一個 HTML 頁面。
我們要放在互聯網上的網站只是一個名為 index.html 的文件。你可以在 https://github.com/jvns/website-example 找到它,它是一個 Github 倉庫,其中只包含一個文件。
HTML 文件中包含一些 CSS,使其看起來不那么無聊,部分復制自 https://example.com 。
有以下幾步:
上面的 index.html 頁面位于 julia-example-website.neocities.com 中,如果你查看源代碼,你將看到它與 github 倉庫中的 HTML 相同。
我認為這可能是將 HTML 頁面放在互聯網上的最簡單的方法(這是一次回歸 Geocities,它是我在 2003 年制作我的第一個網站的方式):)。我也喜歡 Neocities (像 glitch ,我也喜歡)它能實驗、學習,并有樂趣。
這絕不是唯一簡單的方式,在你推送 Git 倉庫時,Github pages 和 Gitlab pages 以及 Netlify 都將會自動發布站點,并且它們都非常易于使用(只需將它們連接到你的 GitHub 倉庫即可)。我個人使用 Git 倉庫的方式,因為 Git 不會讓我感到緊張,我想知道我實際推送的頁面發生了什么更改。但我想你如果第一次只想將 HTML/CSS 制作的站點放到互聯網上,那么 Neocities 就是一個非常好的方法。
如果你不只是玩,而是要將網站用于真實用途,那么你或許會需要買一個域名,以便你將來可以更改托管服務提供商,但這有點不那么簡單。
如果你熟悉在 Git 中編輯文件,同時想練習 HTML/CSS 的話,我認為將它放在網站中是一個有趣的方式!我真的很喜歡它的簡單性 —— 實際上這只有一個文件,所以沒有其他花哨的東西需要去理解。
還有很多方法可以復雜化/擴展它,比如這個博客實際上是用 Hugo 生成的,它生成了一堆 HTML 文件并放在網絡中,但從基礎開始總是不錯的。
via: https://jvns.ca/blog/2019/09/06/how-to-put-an-html-page-on-the-internet/
作者: Julia Evans 選題: lujun9972 譯者: geekpi 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出
/on(eve, [sel], [data], fn) 1.7 + 在選擇元素上綁定一個或多個事件的事件處理函數。
1可以多次添加相同的點擊事件
$("p").on("click", function() { console.log(1); });
$("p").on("click", function() { console.log(2); });
2可以在某個對象上同時添加多個事件處理函數
$("button").on({
click: function() { $("p").slideToggle();},
mouseover: function() {$("body").css("background-color", "red");},
mouseout: function() {$("body").css("background-color", "#FFFFFF");}
});
3通過on事件可以通過冒泡原理實現事件委托。
<script src="js/jquery.js"></script>
<div id="box" style="width:200px,height:200px,background:red">
<div id="littleBox" style="width:50px,height:50px,background:blue">內層div</div>
<div id="otherBox" style="width:50px,height:50px,background:green"></div>
</div>
<div id="msg"></div>
<script>
$(function () {
$("#box").on("click","#littleBox",function(){
$("#littleBox").css("background","black")})})
</script>
4移除on中的事件處理函數
$("p").off(); //移除所有的事件;$("p").off("mouseover mouseout");移除參數事件函數
*請認真填寫需求信息,我們會在24小時內與您取得聯系。