javascript
来源:互联网 发布:印刷设计排版软件 编辑:程序博客网 时间:2024/06/03 14:59
1 关于js数据的内存
- 我们的代码运行在机器上,通过处理器来运行,但程序的变量存储在内存中。处理器操作内存来处理数据。
- js中有两种类型的数据
- 值类型数据:独立存在互不影响。赋值等于是克隆了一份值类型数据的副本,然后放在内存中。
- 引用类型数据:数据存放在内存中,赋值时,是将数据在内存中的地址赋值给变量,使变量保持对数据的引用。就像C中的指针。js中的函数也是对象,也就是引用类型。
- v8引擎的运行环境中存在自动垃圾回收机制,若数据没有变量引用,则会被自动回收。
- v8引擎会根据内存使用情况逐渐申请内存,64位设备最大支持1.4G内存,32位最大支持0.7G内存。
2 优化
根据上面提到的js数据的内存知识及js语言的特点,来提供内存优化方案。
2.1 善用函数
- js中创建作用域的有
- 函数
- with (严格模式下禁用)
- 全局作用域
- 由于全局作用域内变量无法销毁,除非关闭浏览器,而with在严格模式下禁用,所以只能从函数身上下手来优化。
- 使用函数有以下好处:
- 可将部分实现抽象,逻辑清晰。
- 避免变量污染,因为函数在执行后若局部变量没有被保持引用则会被销毁。
- 匿名函数一般不会被赋值给变量,也就是没有被引用,执行后匿名函数被销毁,不占用内存。
- 多利用自执行函数,若无闭包,则不论是匿名函数还是内部作用域都将被销毁。
- 善用回调函数,回调函数是匿名函数,执行后被销毁,且可解决异步的问题。
2.2 闭包
我们可以通过闭包来保持对局部变量的引用,这可以解决一些问题。但由于局部变量一直被引用,所以无法被垃圾回收机制自动回收,所以使用闭包是要慎重。
若无法避免使用闭包,局部变量是值类型,应该使用自执行函数将局部变量作为实参穿进来,避免因闭包引用局部变量导致一些问题。
2.3 避免在全局作用域下创建对象。
这个不用多说,因为全局作用域只有在浏览器关闭或退出运行环境时才会销毁,所以在全局作用域内定义的对象会一直被引用,直至程序退出。
另外在全局作用域下定义变量也容易造成污染。
2.4 手动优化
可以将不再使用的变量赋值为null,解除对数据的引用。js垃圾回收机制会自动回收他们。
0 0
- Javascript
- JavaScript
- javascript
- javascript
- javascript
- javascript
- javascript
- JavaScript
- javascript
- JavaScript
- Javascript
- javascript
- javascript
- JavaScript
- javascript
- javascript
- JavaScript
- javascript
- 一些经典的ACM模板
- MFC中设置ListControl选中某一行,并且滑动(跳转)到选择行位置
- oracle 多表联合查询
- MKL学习——基本操作C++实现
- android 使用retrofit和okhttp3总结(附gson和json的解析)
- javascript
- MODELSIM10.1C仿真带有IP的工程失败
- Oracle 11g 新特性
- 时间复杂度和空间复杂度
- 一个简单servlet程序
- Apache 配置局域网的访问
- 打造网络营销利器-第5篇-提升网站打开速度,启用CDN
- c++作业四
- 在杨氏矩阵中找一个数