gpt4 book ai didi

javascript - 在 Javascript 中更快地实现 C++(如 Map)

转载 作者:行者123 更新时间:2023-12-03 06:00:52 48 4
gpt4 key购买 nike

我只是 javascript 的初学者。我需要类似于 C++ map 的东西。所以,我用了这个 -

var map = new Object();
map['key'] = 'value';

虽然效果很好,但我对表现不满意。我用10万条左右的数据集测试的时候花了很长时间。您能提出更好的解决方案来提高性能吗?

最佳答案

这是您所看到的内容的截图。听起来您是一个 C++ 人员,但对 JS 不熟悉,所以我将向您介绍一些基础知识,最后我们将提供一个精彩的演示。

1) map 并不是您正在做的事情的术语。

使用“map”这个词会让一些人感到困惑,因为在 JS 中,map is actually a function在一个数组上,您可以使用它来更改其数据的形状。相反,您正在做的是创建一个对象。 Javascript 对象是动态的,因此动态添加属性是完全合理的,这是您情况的前提。您想要向动态对象添加大量属性。

2)没有例子,你的问题很模糊

很难破译什么东西需要“很长时间”才能在你的机器上运行。这是服务器端JS还是客户端?你用过很酷的新多核东西吗?您是要创建 100,000 个对象还是只是向单个对象添加 100,000 个属性?作为一名 C++ 人员,您应该知道不能如此含糊。创建对象会分配内存,C++的人都知道内存分配很重。因此一点信息就可以产生巨大的影响。

3)JS的速度比C++慢

期间。 C++ 是一种较低级语言。为了自动为您做事(例如分配内存),高级语言本质上速度较慢。更不用说浏览器带来的开销了。

4)大多数优化都不在您的掌控之中

除非您使用二进制文件(注意:不是汇编,二进制文件),否则您正在使用的命令将由软件解释。您无法对口译员的速度产生巨大影响。举个轻量级的例子,客户端 JS 受到浏览器速度、用户处理器速度、用户和服务器网络的速度、请求数量、AJAX 调用的延迟时间,甚至用户在给定时间在计算机上执行的其他操作的数量。

5)速度并没有那么慢。让我们看一些真实的数据点。

在下面您将看到,向一个对象添加 100,000 个属性只需不到 1/10 秒(在我的机器 atm 上),并且创建 100,000 个属性仅稍慢一些(仍然不到 1/10 秒)对象并为每个对象添加 1 个属性。

通过将其记录到控制台,我们大大延长了时间(几乎 2/10 秒),但即使这也不是我们的错,或者您应该在优化代码中遇到的问题。

警告,运行此代码片段将使您的浏览器挂起几秒钟

var start = new Date().getTime();
var obj1 = {};
for (var i = 0; i < 100000; ++i) {
obj1[i.toString()] = 'test';
}
var end = new Date().getTime();
var time1 = end - start;
console.log(obj1);
end = new Date().getTime();
var time2 = end - start;

start = new Date().getTime();
for (var i = 0; i < 100000; ++i) {
var obj2 = {};
obj2[i.toString()] = 'test';
}
end = new Date().getTime();
var time3 = end - start
console.log(time1);
console.log(time2);
console.log(time3);

关于javascript - 在 Javascript 中更快地实现 C++(如 Map),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753939/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com