javascript - 数千个对象会损害性能吗

标签 javascript node.js oop

典型的例子是 RoBrowser 如何处理每个传入/传出数据包。

首先,RoBrowser为每个数据包使用类,有数千个数据包,每次接收或发送它们时都会实例化它们。

数据包定义为 here 。我们以#L2681为例:

// 0x204
PACKET.CA.EXE_HASHCHECK = function PACKET_CA_EXE_HASHCHECK() {
    this.HashValue  = '';

    this.build = function() {
        var pkt_len = 2 + 16;
        var pkt_buf = new BinaryWriter(pkt_len);

        pkt_buf.writeShort(0x204);
        pkt_buf.writeBinaryString(this.HashValue, 16);
        return pkt_buf;
    };
};

我们可以发现该数据包正在被实例化here .

pkt           = new PACKET.CA.EXE_HASHCHECK();
pkt.HashValue = hash;
Network.sendPacket(pkt);

虽然这是一个仅发送一次的数据包,但想象一下这是一个像 WalkAttack 数据包一样发送数千次的数据包。

我不是编程、oop 或 javascript 方面的专家,但我读过一两本书。

注释:

  • 与为浏览器编写的RoBrowser不同,我的服务器将用node.js编写,纯粹的服务器端。
  • RoBrowser 是客户端,因此它仅处理来自 1 个服务器的请求。在我的例子中,它将处理所有连接的客户端。

问题:

  • 对于服务器架构而言,RoBrowser 处理数据包的方式是否较慢?
  • 使用类与不使用类的性能是否存在巨大差异?

I'm looking for references on this topic (packet handling). If you know any, please do tell.

最佳答案

以这种方式定义对象方法将为每个实例化对象创建新函数 - 对于许多对象来说都是不利的:-(

使用原型(prototype)方式,仅在原型(prototype)对象上创建一个方法,该方法由所有实例共享:

// 0x204
PACKET.CA.EXE_HASHCHECK = function PACKET_CA_EXE_HASHCHECK() {
 this.HashValue  = '';
};

PACKET_CA_EXE_HASHCHECK.prototype.build = function() {
    var pkt_len = 2 + 16;
    var pkt_buf = new BinaryWriter(pkt_len);

    pkt_buf.writeShort(0x204);
    pkt_buf.writeBinaryString(this.HashValue, 16);
    return pkt_buf;
};

关于javascript - 数千个对象会损害性能吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040420/

相关文章:

javascript - ng 表重新加载不起作用

node.js - 如何使用 koajs 发送 http 响应

node.js - 无法使用 Spring Boot 运行 VueJS SPA

c++ - C++ 中带指针的 setter

java - 将用户数据保存在文本文件或序列化对象中

javascript - 单击时交换 <li> 的类

javascript - 制作简单纸牌游戏时如何给纸牌赋予数值(Javascript)

javascript - 拉斐尔JS :Text around path not visible

javascript - nodejs 无法设置未定义的属性 ''

python - .append() 和 .remove() 不在同一个列表中工作 - PYTHON - OOP