JS相关总结

JS 事件流

事件

JavaScript 和 Html 发生交互是通过事件来实现的,事件,就是文档或浏览器窗口发生一些特定的交互的瞬间

事件流

事件通过捕获到达目标元素的阶段为捕获阶段,达到目标元素后是目标阶段,从目标元素将事件上传到根节点是冒泡阶段,三个阶段构成了一个事件触发的完整流程,这个流程称之为 JS 事件流。

示意图
在这里插入图片描述

JS 垃圾回收机制

什么是垃圾

  1. 没有被引用的对象或变量
  2. 无法访问到的对象(几个对象引用形成一个环,互相引用)
JS 可达对象

在一个作用域链上,只要通过根可以有路径查找到的对象都是可达对象。
可达的标准就是从根出发是否能够被找到,js 中的根就可以理解为全局变量对象

内存泄漏

内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,没有被释放,导致该内存无法被使用

垃圾回收机制(GC:Garbage Collection):

执行环境负责管理代码执行过程中使用的内存。垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。

垃圾回收方式:

引用计数
实现原理:

内部通过引用计数器,来维护当前对象的引用数,从而判断该对象的引用数是否为 0,来决定它是否是一个垃圾对象。如果引用数值为 0,GC 就开始工作,将其所在的内存空间进行回收释放和再使用

优缺点:
  1. 可以即时回收垃圾对象、减少程序卡顿时间。
  2. 无法回收循环引用的对象、会导致内存泄漏。
标记清除
实现原理:

核心思想就是将整个垃圾回收操作分为两个阶段:

  1. 遍历所有的对象找到活动对象,进行标记的操作
  2. 遍历所有的对象,找到那些没有标记的对象进行清除。(注意在第二阶段中也会把第一阶段涉及的标志给抹掉,便于 GC 下次能够正常的工作)

通过两次的遍历行为把我们当前的垃圾空间进行回收,最终交给我们的空闲列表进行维护。

优缺点:
  1. 可以回收循环引用的对象空间。
  2. 容易产生碎片化空间,浪费空间、不能立即回收垃圾对象。
引用计数
实现原理:

和标记清除一样,在 V8 中也会被频繁使用。

  1. 标记整理可以看做是标记清除的增强;
  2. 标记阶段的操作和标记清除一致;
  3. 清除阶段之前会先执行整理,移动对象位置,使得他们在地址上是一个连续的空间
优缺点:
  1. 减少碎片化空间。
  2. 不能立即回收垃圾对象。

JS 调优

减少深度作用域访问

myObj.container.property1 = conbination[0];
myObj.container.property2 = conbination[1];

优化为:如果存在大量这种对对象深层属性的访问,可以参照这种方式

let ctn = myObj.container;
ctn.property1 = conbination[0];
ctn.property2 = conbination[1];

能不使用闭包就不使用闭包

闭包所保存的数据回一直存在在内存中,如果不手动释放,就会形成内存泄漏

避免全局查找

可以将全局对象的属性(window 等)存放在局部变量中。访问局部变量的速度比全局变量更快;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值