默认情况下,js是默认同步加载的也就是是JS的加载时是阻塞的,后面的元素要等待js加载完成之后加载,那么对于一些无意义的javascript,如果放在头部会导致加载速度很慢,那么会影响用户体验,那么如何解决这种情况呢?
(1)defer,但只支持IE,代码如下:
1 2 3
| <script type=”text/javascript” defer=”defer”> alert(document.getElementById(“p1″).children[0]); </script>
|
(2),async,这种方法是html5属性,这种方式只能用于外部js代码如下
1
| <script type=”text/javascript” async=”async”></script>
|
(3).创建script,插入到dom中,加载完成后回调,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function loadScript(url,callback) { var script=document.createElement(‘script’); script.type=”text/javascript”;
if(script.readyState) { script.onreadystatechange=function() { if(script.readyState==”loaded”||script.readyState==”complete”) { script.onreadystatechange=null; callback(); } } }else { script.onload=function() { callback(); } }
script.src=url; document.body.appendChild(script); }
|