么是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小时内与您取得联系。