JS性能优化(一)

一. 性能测试工具:Jsperf(以下代码执行都用此工具)

地址:https://jsperf.com/

二. JS性能优化方式

1. 慎用全局变量
(1)原因:
1)全局变量定义在全局执行上下文,是所有作用域的顶端

(若需查找此变量,则需找到作用域最顶端,浪费时间,降低性能)

2)全局执行上下文一直存在于上下文执行栈,直到程序退出

(到程序退出时才能被GC执行,影响内存)

3)如果某个局部作用域出现同名变量,则会遮蔽或污染全局变量
(2)示例:

在这里插入图片描述

(2)执行:

在这里插入图片描述

(4)结果:

在这里插入图片描述

(5)结论:全局变量性能低于局部变量
2. 缓存全局变量
(1)实现方式:将无法避免的全局变量缓存到局部变量中
(2)示例:

定义如下元素,访问button
在这里插入图片描述

在这里插入图片描述

(3)执行:

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

(4)结果:

在这里插入图片描述

(5)结论:把全局变量缓存为局部变量,可以提高js性能
3. 通过原型链新增方法(同1、2步,进行简单演示)
(1)示例

在这里插入图片描述

(2)执行:

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

(3)结果:

在这里插入图片描述

(3)结果: 通过原型链新增方法能提高js性能
4. 减少闭包使用
(1)原因:
1)闭包特点:外部具有指向内部的引用;在外部作用域能访问内部作用域的数据
2)闭包使用不当会造成内存泄露
(2)举例:

在这里插入图片描述

var el = document.getElementById('btn')

上行代码中,对el进行一次引用,el.onclick处又进行一次引用(现共两次),当调用foo()时,只摧毁了el的一次引用,此时根据GC的引用计数法规则来看,el不能被回收,一直占用内存,影响性能。

(3)解决:

在这里插入图片描述
将el变量置为null,根据GC引用计数法来看,此时el引用次数为0,即被回收,释放内存,提高性能。

5. 避免属性访问方法
(1)原因:
1)JS中的面向对象,不需要属性的访问方法,所有的属性都是外部可见的
2)使用属性的访问方法,只会增加一层重定义,没有访问的控制力
(2)举例:

在这里插入图片描述
上图中定义了Person函数中,age成员变量的访问函数:this.getAge,并通过此函数来方位age
在这里插入图片描述
上图直接通过属性来访问age

(3)执行:

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

(4)结果:

在这里插入图片描述

(5)结论:直接通过属性访问成员变量,比通过属性方法访问性能更快。
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
three.js是一个用于在Web浏览器上创建和显示3D图形的JavaScript库。在处理大场景时,性能优化是非常重要的,以下是一些three.js大场景性能优化的方法: 1. 模型合并:将场景中的相关模型合并为一个单独的模型,可以减少绘制调用的次数,从而提高性能。 2. 纹理压缩:通过使用压缩格式的纹理,如WebP或DDS,可以减少纹理的大小和加载时间,提高渲染性能。 3. 层级着色器:使用层级着色器技术,将复杂的3D模型分层渲染,只绘制可见的部分,隐藏掉被遮挡的部分,从而降低渲染负载。 4. LOD(细节层次):使用LOD技术,根据相机距离来自动切换不同细节层次的模型,以确保远处的物体具有较低的多边形数量,提高性能。 5. 遮挡剔除:使用遮挡剔除技术,可根据相机位置自动计算隐藏在其他物体后面的物体,避免不必要的渲染。 6. 光照优化:减少光源数量和复杂度,使用更简单的光照模型,如平行光或环境光,可以提高渲染性能。 7. 离屏渲染:使用离屏渲染技术,将不经常变化的场景渲染到一个纹理中,然后将该纹理用作场景的背景,避免重复渲染,提高性能。 8. WebGL扩展:利用WebGL的扩展功能,如VAO(顶点数组对象)和instancing(实例化)等,可以优化渲染效率和内存使用。 总之,three.js大场景性能优化的关键在于减少渲染调用次数、降低多边形数量、使用优化的纹理和光照,并合理利用WebGL的扩展功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值