成千上万的物体会伤害性能

时间:2014-07-30 15:09:25

标签: 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 处理服务器架构的数据包的方式是否很慢?
  • 使用类之间的性能差异不大吗?
  

我正在寻找有关此主题的参考资料(数据包处理)。如果您知道,请告诉我们。

1 个答案:

答案 0 :(得分:1)

以这种方式定义对象方法会为每个实例化对象创建新函数 - 对许多对象都不好: - (

使用prototype-way,只在原型对象上创建一个方法,由所有实例共享:

// 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;
};