位置: 编程技术 - 正文

实现高性能JavaScript之执行与加载(实现高性能化 两个字表达)

编辑:rootadmin

推荐整理分享实现高性能JavaScript之执行与加载(实现高性能化 两个字表达),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java性能调优权威指南,java高性能调优,java高性能代码,实现高性能纤维锂离子电池规模化制备,《高性能javascript》,java高性能编程,java高性能调优,实现高性能化 两个字表达,内容如对您有帮助,希望把文章链接给更多的朋友!

浏览器在处理HTML页面渲染和JavaScript脚本执行的时候是单一进程的,所以在当浏览器在渲染HTML遇到了<script>标签会先去执行标签内的代码(如果是使用src属性加载的外链文件,则先下载再执行),在这个过程中,页面渲染和交互都会被阻塞。

...虽然会有阻塞,但还是有几招可以减少JavaScript对性能的影响的。

1.script标签的位置

当<script>出现在<head>中的时候,比如:

这种加载多个js文件的时候,浏览器就会因先下载执行js代码而阻塞页面渲染从而出现白屏页面(浏览器解析到<body>标签之前,不会渲染页面任何内容),没法预览也没法交互,很差劲的用户体验。

注意:

现代浏览器支持资源并行下载,只限于<script>下载外部资源的时候不会阻塞其他<script>标签,但会阻塞其他资源的下载。下载JavaScript资源是异步的,但是执行JavaScript代码的时候仍是同步的,同样会造成阻塞。所以把<script>后置到<body>标签的底部,保证执行脚本之前已完成页面渲染,是一种比较常用的JavaScript优化手段。

2.合并多个script标签

浏览器解析HTML时遇到<script>都会因为执行脚本而有一定的延迟,对于有src属性的外链则<script>更加,多HTTP请求则会带来更多的性能开销,尽量减少这种延迟,也是一种优化手段,可以合并多个js文件来减少HTTP请求的次数,减少三次握手的次数和多余的HTTP头传输,降低响应时间提高用户体验。网上有许多合并js的方案以及工具,在这不叙述了。

3.使用无阻塞下载JavaScript的方法

使用script标签的defer和async属性 使用动态创建的script标签来下载执行JavaScript代码 使用XHR对象下载JavaScript代码并注入页面

3.1.使用script标签的defer和async属性

async和defer属性都是用于异步加载js文件,期间不会才生阻塞浏览器其他进程,区别在于async是加载完之后自动执行,而defer需要等到页面加载之后再执行,需要注意的一点是这两个属性必须在有src属性的<script>标签中(外链脚本)才有效。下面是demo:

//defer.js的文件下只有alert("defer");一行代码async的例子也是相同的页面结构,这里就不摆例子了,可以戳下面的链接。defer example的链接戳这里!async example的链接戳这里!

实现高性能JavaScript之执行与加载(实现高性能化 两个字表达)

虽然页面结构一样,但不一样的是

打开defer.html依次看到是: 弹出"script"的alert框=>页面渲染出文字=>弹出"defer"的alert框=>弹出"load"的alert框打开async.html依次看到是: 弹出"script"的alert框=>弹出"async"的alert框=>页面渲染出文字=>弹出"load"的alert框

3.2.使用动态创建的script标签来下载执行JavaScript代码

file.js在script元素添加到页面时就启动下载,使用这种方式的优势在于file.js的下载和执行不会阻塞页面其他进程。

从demo上可以明显的看出动态加载方式可以在alert框弹出之前先看到页面上的文字,但是普通的方式只有在alert框弹出之后才可以看到页面上的文字。

我们可以封装一个跨浏览器的读取script脚本并动态创建script标签的函数:

这类动态加载脚本的方法兼容性好,也比较简单,是一种常用的无阻塞解决方案。

3.3.使用XHR对象下载JavaScript代码并注入页面

另一种无阻塞加载脚本的方式是使用XMLHttpRequest(XHR)对象获取脚本并注入页面中。这种技术会先创建一个XHR对象,然后用他下载JavaScript文件,最后通过常见动态<script>元素将代码注入页面中。

以上代码发送GET请求file.js文件,onReadyStateChange检测readyState是否为4(4表示请求完成)和HTTP状态吗是否有效(表示有效响应,表示读取缓存)。判断响应有效之后,就动态创建一个<script>标签,内容就是服务器接收到的responseText。

这种方法的优点以及缺点:

优点:下载JavaScript代码可以不立即执行,且兼容性好适合所有主流浏览器。缺点:JavaScript文件必须与所请求页面处于同一个域,这种情况下JavaScript文件不能从CDN下载,不适合大型的Web应用。

4.一种推荐的无阻塞方案

如果页面有大量的JavaScript代码需要添加,可以先在页面中去外链之前我们封装好的动态读取script脚本的函数loadScript,然后再使用它去加载其他所需脚本,例如:

这样只需在第一个<script>下载比较精简的loader.js文件时对页面有些许影响,之后的<script>并不会有太多影响。

JavaScript中的this机制 JavaScript有自己的一套this机制,在不同情况下,this的指向也不尽相同。全局范围console.log(this);//全局变量全局范围使用this指向的是全局变量,浏览器环

JS排序方法(sort,bubble,select,insert)代码汇总 最近开始学习数据结构。一点一点整理,希望能坚持下来。因为方向是前端,所以用JavaScript实现。//sort排序vartestArr1=[3,,,5,,,,,,2,,4,,,];var

Javascript实现的SHA-加密算法完整实例 本文实例讲述了Javascript实现的SHA-算法。分享给大家供大家参考,具体如下:/****SecureHashAlgorithm(SHA)*

标签: 实现高性能化 两个字表达

本文链接地址:https://www.jiuchutong.com/biancheng/369968.html 转载请保留说明!

上一篇:深入分析Javascript事件代理(深入分析的成语)

下一篇:JavaScript中的this机制(JavaScript中的变量名不区分大小写)

  • 组织员工活动方案
  • 跨月的增值税专用发票怎么作废重开
  • 税务师考试税法一章节
  • 中国的税收制度是什么
  • 公司间借款利息增值税进项能否抵扣
  • 住宿费抵扣进项税怎么报税
  • 可供出售金融资产新准则叫什么
  • 未抵扣的进项发票是什么意思
  • 异地开发房地产会一直待在那个城市吗
  • 食堂买菜未取得消费凭证
  • 产品报废怎么做账
  • 退预收账款需要什么原始凭证
  • 以前年度的负债没挂账怎么办
  • 注册资本未到位转让股权
  • 工资税后扣款
  • 公司拖欠工资还要继续工作吗?
  • 活动策划税费
  • 待抵扣进项税额是什么情况下用的
  • 补发工资补缴公积金一直没到账
  • 公账转私账备注借款
  • 不动产进项税额转出分录
  • 公司车贷款还款怎么操作
  • 主营业务成本怎么算出来的
  • 企业开增值税普通发票 电子版
  • 进项税加计扣除申报表怎么填
  • 纳税人拒绝代扣代缴,扣缴义务人应当
  • 出差补贴怎么算
  • 预付的各种押金
  • 多交的增值税怎么处理
  • 结转出租设备的会计分录
  • 联想g40开机屏幕一直闪
  • linux运行后出现乱码
  • 如何使用windows的记事本创建文件
  • BIOS里没有USB-HDD选项
  • 长期待摊费用是当月摊销还是次月摊销
  • 贷款房屋评估费怎么收
  • 补充协议是否缴纳印花税
  • 营改增全面推开为什么还叫试点
  • uniapp 安卓原生
  • Micheldever Wood的蓝铃花,英国汉普郡 (© Hursley/Getty Images Plus)
  • 收到投标保证金利息如何账务处理
  • java+php
  • oracleupdate关联表
  • 借管理费用贷应交税费个人所得税
  • jasperreports入门
  • 附加税减免申报表怎么填
  • 专利申请费用能计入无形资产吗
  • 待摊费用的明细
  • 城市维护建设税属于什么会计科目
  • 共同开发产品
  • php sql 教程
  • 被投资企业清算,长期股权投资处理
  • mongorepository排序
  • 未开票收入缴纳增值税吗
  • 应付现金股利属于什么账户
  • 现金流量表的本期数是本月数还是本年数
  • 个税免税部分
  • 小规模增值税纳税人优惠政策
  • 小规模租金可以抵税吗
  • 会计处理方法是什么意思
  • 小规模纳税人出售使用过固定资产
  • 以货换货什么意思
  • 土地测绘费计入开发间接费?
  • 固定资产可资本化的后续支出
  • 对公账户往来款需要开票吗
  • 领用自产产品用于固定资产
  • 项目成本的估算与预算有什么区别和联系?考试资料网
  • 新手会计建账的资料在哪里弄
  • 终端运行mysql
  • mysql查询表语句
  • 使用u盘安装macos
  • dwm占用内存过高 进程处理
  • win73d设置怎么设置
  • Windows系统通过注册表实现打开CMD并定位到指定文件夹
  • 安装linux出现grub的原因
  • 简单射击原理
  • css使用教程
  • javascript 基础篇4 window对象,DOM
  • javascript 对象
  • 个人所得税怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设