【问题标题】:Can thousands of objects hurt performance成千上万的对象会损害性能吗
【发布时间】:2014-07-30 15:09:24
【问题描述】:

例如 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 处理数据包的方式是否很慢?
  • 使用类和不使用类在性能上是否存在巨大差异?

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

【问题讨论】:

  • 取决于...什么是class?如果你保持它很小,它不会显着变慢。如果您将整个环境注入到一个类中,那就大了。你为什么不简单地做一些基准测试并创建 1kk 对象和 1kk 变量并用简单的函数测试性能?

标签: javascript node.js oop


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 2010-12-17
    • 1970-01-01
    • 2011-01-10
    • 2013-11-26
    • 2011-01-11
    • 1970-01-01
    • 2017-01-19
    • 2014-06-17
    相关资源
    最近更新 更多