javascript - 向数组原型添加函数
问题描述
为什么将这个简单的 JavaScript 函数添加到数组原型会导致我的动画显着变慢?
注意要绘制单个帧确实使用了很多数组。将您自己的函数添加到 Array 原型中是否重要?
Array.prototype.last = function()
{
return this[this.length - 1];
};
解决方案
此答案假定代码已被分析并且此处确定了瓶颈。如果不是这种情况,请先这样做:Chrome | 火狐| 边缘
下面的技巧侧重于 V8 特定的优化,但通常也会提高其他引擎的性能。
虽然功能相同,但我建议对以下内容进行两项更改last()
:
- 它应该是一个接受数组作为参数的静态方法,而不是
Array
. - 它应该避免越界访问。
考虑到这一点,试试这个:
function last (array) {
var lastIndex = array.length - 1;
if (lastIndex === -1) return undefined;
return array[lastIndex];
}
这个时候你可能会想
酷,现在我可以将它重新用于类似数组的对象,例如
arguments
.
如果您避免泛型使用,则函数可以保持优化,否则优化器必须退出并使用效率较低的抽象,以允许Array
输入以外的类型。
推荐阅读
- java - Spring Boot 千分尺计数已取消
- python - Python:我在哪里可以找到像 Anaconda Navigator 的“gf”这样的软件包,我该如何安装它们?Python 3.6 版
- javascript - 如何动态地将元素添加到对象数组中?
- c# - 是否可以在不修改 Program.cs 的情况下发布适用于 Linux 和 Windows 的 .Net Core Worker 服务?
- git - 当它在另一个连接上正常工作时,如何通过连接诊断 Git / Git-lfs 源推送问题?
- swift - Swift材料组件填充文本字段背景颜色不起作用
- regex - .htaccess - 递归地将斜杠映射到下划线
- javascript - 第一次单击后不会触发 Jquery 单击事件
- ios - Swift Dictionary UIPickerView (key) 和 (value) Swift
- python - 为数据库查询超时错误创建异常