js异步加载的方式有哪些?

JavaScript014

js异步加载的方式有哪些?,第1张

方法一:Script Dom Element

(function(){

var scriptEle = document.createElement("script")

scriptEle.type = "text/javasctipt"

scriptEle.async = true

scriptEle.src = "http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.min.js"

var x = document.getElementsByTagName("head")[0]

x.insertBefore(scriptEle, x.firstChild)

})()

方法二:onload时的异步加载

function(){

if(window.attachEvent){

window.attachEvent("load", asyncLoad)

}else{

window.addEventListener("load", asyncLoad)

}

var asyncLoad = function(){

var ga = document.createElement('script')

ga.type = 'text/javascript'

ga.async = true

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'

var s = document.getElementsByTagName('script')[0]

s.parentNode.insertBefore(ga, s)

}

})()

方法三:$(document).ready()

首先引用jquery.scrollLoading.js(上一篇博文有)和jquery.js

把下面代码放到标签里,就会得到异步加载图片的效果

//这个在我上一篇博文有这个

$(document).ready(function () {

//实现图片慢慢浮现出来的效果

$("img").load(function () {

//图片默认隐藏

$(this).hide()

//使用fadeIn特效

$(this).fadeIn("5000")

})

// 异步加载图片,实现逐屏加载图片

$(".scrollLoading").scrollLoading()

})

注意img里的class,在这里就不细说了

data-url表示将要异步加载的图片,src表示首先加载的图片(一般会是小图片,或者是一个动画,网页中全部的src链接同一个图片,这样网页就加载快好多,这个时候再异步的加载要加载的图片,也就现在要说的功能)

<img class="scrollLoading" data-url="image/logo.jpg" src="/Images/120.gif" />

关于JavaScript脚本加载的问题,相信大家碰到很多。主要在几个点——

1>同步脚本和异步脚本带来的文件加载、文件依赖及执行顺序问题

2>同步脚本和异步脚本带来的性能优化问题

深入理解脚本加载相关的方方面面问题,不仅利于解决实际问题,更加利于对性能优化的把握并执行。

先看随便一个script标签代码——

复制代码代码如下:

<script src="js/myApp.js"></script>

如果放在<head>上面,会阻塞所有页面渲染工作,使得用户在脚本加载完毕并执行完毕之前一直处于“白屏死机”状态。而<body>末尾的打脚本只会让用户看到毫无生命力的静态页面,原本应该进行客户端渲染的地方却散布着不起作用的控件和空空如也的方框。拿一个测试用例——

代码如下:

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>异步加载script</title>

<script src="js/test.js"></script>

</head>

<body>

<div>我是内容</div>

<img src="img/test.jpg">

</body>

</html>

其中,test.js中的内容——

代码如下:

alert('我是head里面的脚本代码,执行这里的js之后,才开始进行body的内容渲染!')

我们会看到,alert是一个暂停点,此时,页面是空白的。但是要注意,此时整个页面已经加载完毕,如果body中包含某些src属性的标签(如上面的img标签),此时浏览器已经开始加载相关内容了。总之要注意——js引擎和渲染引擎的工作时机是互斥的(一些书上叫它为UI线程)。

因此,我们需要——那些负责让页面更好看、更好用的脚本应该立即加载,而那些可以待会儿再加载的脚本稍后再加载。