1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > HTML中的script标签研究【HTML】

HTML中的script标签研究【HTML】

时间:2021-09-10 10:47:44

相关推荐

HTML中的script标签研究【HTML】

web前端|html教程

HTML中的script标签研究

web前端-html教程

Script 的堵塞(block)特性

asp 网上报名系统源码,ubuntu怎么跑c,tomcat配置pg数据源,开源爬虫源代码,什么是php语言中的对象,鄂州谷歌seolzw

上面引用两段话的意思大致是,当浏览器解析DOM文档时,一旦遇到 script 标签(没有defer 和 async 属性)就会立即下载并执行,与此同时浏览器对文档的解析将会停止,直到 script 代码执行完成。出现这种堵塞行为一方面是因为浏览器的UI渲染,交互行为等都是单线程操作,另一方是因为 script 里面的代码可能会影响到后面文档的解析,比如下面的代码:

dede58 源码终身会,vscode美妆教程,ubuntu 配置dns,tomcat设置密码,sqlite数据库最大能多大,信阳网页设计,织梦怎么进数据库,服务器有内容能备案吗,html 轮播插件,前端工程师用什么框架,爬虫乐谱,php代码学习,重庆企业seo,springboot综合示例,dede标签在哪里修改,seo企业网站源码,网页考试源代码,drupal 中文模板,内贸后台,漂亮的跳转页面,北大青鸟租房管理系统,matlab 三维程序lzw

html document.write("The date is " + (new Date()).toDateString());

这个堵塞特性会严重的影响用户体验,下面是几种优化方案:

iis网站源码,ubuntu设置网络参数,tomcat暴力破解工具,美女满身爬虫,php在哪里学广州,厂家seolzw

尽量把脚本往文档的后面放,以减少对文档的堵塞,最好放在 前面。 尽量把脚本按照它们的依赖关系放在一个文件中

不过更好的方法是下面的非堵塞加载脚本(Nonblocking Scripts)的方法:

1. Deferred Script (延迟脚本)

Script 有一个 defer 属性,拥有这个属性的script表明这个script不会修改DOM,因此这段脚本会在文档树全部解析完成后触发( to be executed after the document has been parsed). 但这个属性并不被所有的浏览器支持。

2. Dynamic Script Elements (动态脚本)

原理就是使用脚本创建 script 元素,设置 src 需为要动态添加脚本的 URL,再把这个 script 添加到DOM中。有时我们需要动态脚本加载完成后再执行某些操作,这就需要我们在脚本加载完成后添加一个回调函数,这个可以通过 script 的 onload 事件实现。下面的实现代码:

jsfunction loadJS(url, callback){ var script = document.createElement(script); script.type = ext/javascript; if(script.readyState){ // 兼容IE的旧版本 script.onreadystatechange = function(){if(script.readyState == loaded || script.readyState == complete){ script.onreadystatechange = null; callback();} } } else{script.onload = function(){callback(); }} script.src = url; document.getElementsByTagName(head)[0].appendChild(script);}

有时我们需要我们动态加载的脚本按照我们加载的顺序执行,但上面的实现并不能保证这一点,加载的脚本在下载完成后就会立即执行,而不会按照我们定义的顺序。要解决这个问题也不难,可以参照下面的代码:

jsloadJS(a.js, function(){ loadJS(.js, function(){ loadJS(c.js, function(){app.init(); }) })})

当有大量的脚本需要动态添加时,这样写也会遇到问题;另外的解决方案是利用一些现成的库,比如 LABjs

3. XMLHttpRequest Script Injection (XHR动态插入)

原理是利用XMLHttpReques(XHR)对象,动态获取一段JS代码,然后插入文档。

相对其他方法来说的一个优点是可以“懒执行”,也就是JS代码已经先下载好了并没有执行,可以在需要的来执行(?)(之前的动态脚本在下载后会立即执行)。实现代码:

jsfunction xhrLoadJS (url, callback){ var xhr = new XMLHttpRequest(); xhr.open(get, url, true); xhr.onreadystatechange = function(){ if(xhr.readyState == 4){if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ var script = document.createElement(script); script.type = ext/script; script.text = xhr.responseText; eval(xhr.responseText); // 执行代码 document.body.appendChild(script); callback();} } } xhr.send(null);}

缺点是不能跨域请求

参考 Javascript 装载和执行 MDN Script元素 Nicholas C. Zakas 所著的「High Performance JavaScript 」的第一章 “Loading and Execution”

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。