作者 | 葡萄城技术团队
前言
过去,我们浏览静态网站时无须过多关注内存管理,因为加载新页面时,之前的页面信息会从内存中删除。然而,随着单页 web 应用(spa)的兴起,应用程序消耗的内存越来越多,这不仅会降低浏览器性能,甚至会导致浏览器卡死。因此,在编码实践中,开发人员需要更加关注与内存相关的内容。因此,小编今天将为大家介绍 javascript 内存泄漏的编程模式,并提供一些内存管理的改进方法。
什么是内存泄漏以及如何发现它?
什么是内存泄漏?
javascript 对象被保存在浏览器内存的堆中,并通过引用方式访问。值得一提的是,javascript 垃圾回收器则运行于后台,并通过识别无法访问的对象来释放并恢复底层存储空间,从而保证 javascript 引擎的良好运行状态。 当内存中的对象在垃圾回收周期中应该被清理时,若它们被另一个仍然存在于内存中的对象通过一个意外的引用所持有,就会引发内存泄漏问题。这种情况下,冗余对象会继续占据内存空间,导致应用程序消耗过多的内存资源,并可能导致性能下降和表现不佳的情况出现。因此,及时清理无用对象并释放内存资源是至关重要的,以确保应用程序的正常运行和良好的性能表现。
如何发现内存泄漏?
那么如何知道代码中是否存在内存泄漏?内存泄漏往往隐蔽且很难检测和定位。即使代码中存在内存泄漏,浏览器在运行时也不会返回任何错误。如果注意到页面的性能逐渐下降,可以使用浏览器内置的工具来确定是否存在内存泄漏以及是哪个对象引起的。
任务管理器(不要与操作系统的任务管理器混淆)提供了浏览器中所有选项卡和进程的概览。chrome 中,可以通过在 linux 和 windows 操作系统上按 shift+esc 来打开任务管理器;而在 firefox 中,通过在地址栏中键入 about:performance 则可以访问内置的管理器,它可以显示每个标签的 javascript 内存占用情况。如果网站停留在那里什么都不做,但 javascript 内存使用量逐渐增加,那很可能是存在内存泄漏。
开发者工具提供了一些先进的内存管理方法,例如,使用 chrome 浏览器的性能记录工具,可以对页面的性能进行可视化分析。在这个过程中,可以通过一些指标来判断是否存在内存泄漏问题,比如堆内存使用量增加的情况,并及时采取措施解决这些问题,以确保应用程序的正常运行和良好的性能表现。
另外,通过 chrome 和 firefox 的开发者工具提供的内存工具,可以进一步探索内存使用情况。队列内存使用快照的比较可以显示在两个快照之间分配了多少内存以及分配的位置,并提供额外信息来帮助识别代码中存在问题的对象。这些工具为开发者提供了便利,能够更好地进行内存管理和性能优化,提高应用程序的质量和性能。
javascript 代码中常见的内存泄漏的常见来源: 研究内存泄漏问题就相当于寻找符合垃圾回收机制的编程方式,有效避免对象引用的问题。下面小编就为大家介绍几个常见的容易导致内存泄漏的地方: 1. 全局变量 全局变量始终存储在根目录下,且永远不会被回收。而在 javascript 的开发中,一些错误会导致局部变量被转换到了全局,尤其是在非严格的代码模式下。下面是两个常见的局部变量被转化到全局变量的情况:
为未声明的变量赋值
使用 this 指向全局对象。
腾讯全面开放5G能力,构建5G与边缘计算全链条解决方案
企业组织部署WiFi 6的方法及优势
基于传感器的无源传感RFID标签增长强劲,销售量将超过500万个
未来教育服务机器人产业的发展趋势
广东扬尘监测系统、噪音检测BYQL-YZ介绍
什么是内存泄漏?如何避免JavaScript内存泄漏
可切换光线感应夜灯的制作
车内语音识别数据在智能驾驶中的应用与挑战
欧司朗在中国新建LED组装厂扩大产能
谷歌正式推送Chrome 89稳定版
酷炫黑科技!能让Macbook Air一秒钟变成触屏的
“一带一路”战略,电线电缆新机遇
三大运营商2020年5G网络首轮采购吹起了5G新基建落地的号角
FDD LTE频段划分
MWD随钻测井中高温加速度计应用介绍
E96贴片电阻标准表一览
电容式智能油位传感器的工作原理以及应用
谷歌和苹果谁将赢得智能车载系统大战?
预测2019年实现L5全自动驾驶
感受下华为Mate9保时捷版和Mate9/9 Pro的不一样,“机皇”一脚踩!