Skip to content

Commit 49ef85b

Browse files
authored
Merge pull request #28 from jay602/master
js插件对频繁new的对象应该用对象池 #974
2 parents 53f4bc8 + adb3b2d commit 49ef85b

1 file changed

Lines changed: 108 additions & 45 deletions

File tree

kbengine.js

Lines changed: 108 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,27 @@ KBEngine.Event = new KBEngine.Event();
467467
/*-----------------------------------------------------------------------------------------
468468
memorystream
469469
-----------------------------------------------------------------------------------------*/
470+
471+
/*
472+
union PackFloatXType
473+
{
474+
float fv;
475+
uint32 uv;
476+
int iv;
477+
};
478+
*/
479+
KBEngine.PackFloatXType = function()
480+
{
481+
this._unionData = new ArrayBuffer(4);
482+
this.fv = new Float32Array(this._unionData, 0, 1);
483+
this.uv = new Uint32Array(this._unionData, 0, 1);
484+
this.iv = new Int32Array(this._unionData, 0, 1);
485+
};
486+
487+
KBEngine._xPackData = new KBEngine.PackFloatXType();
488+
KBEngine._yPackData = new KBEngine.PackFloatXType();
489+
KBEngine._zPackData = new KBEngine.PackFloatXType();
490+
470491
KBEngine.MemoryStream = function(size_or_buffer)
471492
{
472493
if(size_or_buffer instanceof ArrayBuffer)
@@ -481,22 +502,6 @@ KBEngine.MemoryStream = function(size_or_buffer)
481502
this.rpos = 0;
482503
this.wpos = 0;
483504

484-
/*
485-
union PackFloatXType
486-
{
487-
float fv;
488-
uint32 uv;
489-
int iv;
490-
};
491-
*/
492-
KBEngine.MemoryStream.PackFloatXType = function()
493-
{
494-
this._unionData = new ArrayBuffer(4);
495-
this.fv = new Float32Array(this._unionData, 0, 1);
496-
this.uv = new Uint32Array(this._unionData, 0, 1);
497-
this.iv = new Int32Array(this._unionData, 0, 1);
498-
};
499-
500505
//---------------------------------------------------------------------------------
501506
this.readInt8 = function()
502507
{
@@ -632,8 +637,8 @@ KBEngine.MemoryStream = function(size_or_buffer)
632637

633638
this.readPackXZ = function()
634639
{
635-
var xPackData = new KBEngine.MemoryStream.PackFloatXType();
636-
var zPackData = new KBEngine.MemoryStream.PackFloatXType();
640+
var xPackData = KBEngine._xPackData;
641+
var zPackData = KBEngine._zPackData;
637642

638643
xPackData.fv[0] = 0.0;
639644
zPackData.fv[0] = 0.0;
@@ -669,7 +674,7 @@ KBEngine.MemoryStream = function(size_or_buffer)
669674
{
670675
var v = this.readUint16();
671676

672-
var yPackData = new KBEngine.MemoryStream.PackFloatXType();
677+
var yPackData = KBEngine._yPackData;
673678
yPackData.uv[0] = 0x40000000;
674679
yPackData.uv[0] |= (v & 0x7fff) << 12;
675680
yPackData.fv[0] -= 2.0;
@@ -832,7 +837,7 @@ KBEngine.MemoryStream = function(size_or_buffer)
832837
buf.set(new Uint8Array(stream.buffer, offset, size), 0);
833838
this.wpos += size;
834839
}
835-
840+
836841
//---------------------------------------------------------------------------------
837842
this.readSkip = function(v)
838843
{
@@ -869,6 +874,13 @@ KBEngine.MemoryStream = function(size_or_buffer)
869874
return this.buffer.slice(this.rpos, this.wpos);
870875
}
871876

877+
//---------------------------------------------------------------------------------
878+
this.setbuffer = function(buffer)
879+
{
880+
this.clear();
881+
this.buffer = buffer;
882+
}
883+
872884
//---------------------------------------------------------------------------------
873885
this.size = function()
874886
{
@@ -884,15 +896,33 @@ KBEngine.MemoryStream = function(size_or_buffer)
884896
if(this.buffer.byteLength > KBEngine.PACKET_MAX_SIZE)
885897
this.buffer = new ArrayBuffer(KBEngine.PACKET_MAX_SIZE);
886898
}
899+
900+
this.reclaimObject = function()
901+
{
902+
this.clear();
903+
904+
if(KBEngine.MemoryStream._objects != undefined)
905+
KBEngine.MemoryStream._objects.push(this);
906+
}
887907
}
888908

909+
KBEngine.MemoryStream.createObject = function()
910+
{
911+
if(KBEngine.MemoryStream._objects == undefined)
912+
KBEngine.MemoryStream._objects = [];
913+
914+
return KBEngine.MemoryStream._objects.length > 0 ? KBEngine.MemoryStream._objects.pop() : new KBEngine.MemoryStream(KBEngine.PACKET_MAX_SIZE_TCP);
915+
}
916+
917+
918+
889919
/*-----------------------------------------------------------------------------------------
890920
bundle
891921
-----------------------------------------------------------------------------------------*/
892922
KBEngine.Bundle = function()
893923
{
894924
this.memorystreams = new Array();
895-
this.stream = new KBEngine.MemoryStream(KBEngine.PACKET_MAX_SIZE_TCP);
925+
this.stream = KBEngine.MemoryStream.createObject();
896926

897927
this.numMessage = 0;
898928
this.messageLengthBuffer = null;
@@ -960,10 +990,13 @@ KBEngine.Bundle = function()
960990
{
961991
var tmpStream = this.memorystreams[i];
962992
network.send(tmpStream.getbuffer());
993+
tmpStream.reclaimObject();
963994
}
964-
995+
965996
this.memorystreams = new Array();
966-
this.stream = new KBEngine.MemoryStream(KBEngine.PACKET_MAX_SIZE_TCP);
997+
this.stream = KBEngine.MemoryStream.createObject();
998+
999+
this.reclaimObject();
9671000
}
9681001

9691002
//---------------------------------------------------------------------------------
@@ -972,7 +1005,7 @@ KBEngine.Bundle = function()
9721005
if(v > this.stream.space())
9731006
{
9741007
this.memorystreams.push(this.stream);
975-
this.stream = new KBEngine.MemoryStream(KBEngine.PACKET_MAX_SIZE_TCP);
1008+
this.stream = KBEngine.MemoryStream.createObject();
9761009
}
9771010

9781011
this.messageLength += v;
@@ -1050,6 +1083,32 @@ KBEngine.Bundle = function()
10501083
this.checkStream(v.length + 4);
10511084
this.stream.writeBlob(v);
10521085
}
1086+
1087+
this.clear = function()
1088+
{
1089+
this.stream = KBEngine.MemoryStream.createObject();
1090+
this.memorystreams = new Array();
1091+
this.numMessage = 0;
1092+
this.messageLengthBuffer = null;
1093+
this.messageLength = 0;
1094+
this.msgtype = null;
1095+
}
1096+
1097+
this.reclaimObject = function()
1098+
{
1099+
this.clear();
1100+
1101+
if(KBEngine.Bundle._objects != undefined)
1102+
KBEngine.Bundle._objects.push(this);
1103+
}
1104+
}
1105+
1106+
KBEngine.Bundle.createObject = function()
1107+
{
1108+
if(KBEngine.Bundle._objects == undefined)
1109+
KBEngine.Bundle._objects = [];
1110+
1111+
return KBEngine.Bundle._objects.length > 0 ? KBEngine.Bundle._objects.pop() : new KBEngine.Bundle();
10531112
}
10541113

10551114
/*-----------------------------------------------------------------------------------------
@@ -1866,7 +1925,7 @@ KBEngine.EntityCall = function()
18661925
this.newCall = function()
18671926
{
18681927
if(this.bundle == null)
1869-
this.bundle = new KBEngine.Bundle();
1928+
this.bundle = KBEngine.Bundle.createObject();
18701929

18711930
if(this.type == KBEngine.ENTITYCALL_TYPE_CELL)
18721931
this.bundle.newMessage(KBEngine.messages.Baseapp_onRemoteCallCellMethodFromClient);
@@ -2920,6 +2979,8 @@ KBEngine.KBEngineApp = function(kbengineArgs)
29202979
this.fragmentDatasFlag = KBEngine.FragmentDataTypes.FRAGMENT_DATA_UNKNOW;
29212980
this.fragmentDatasRemain = 0;
29222981

2982+
this.msgStream = new KBEngine.MemoryStream(KBEngine.PACKET_MAX_SIZE_TCP);
2983+
29232984
this.resetSocket = function()
29242985
{
29252986
try
@@ -3019,7 +3080,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
30193080

30203081
this.hello = function()
30213082
{
3022-
var bundle = new KBEngine.Bundle();
3083+
var bundle = KBEngine.Bundle.createObject();
30233084

30243085
if(KBEngine.app.currserver == "loginapp")
30253086
bundle.newMessage(KBEngine.messages.Loginapp_hello);
@@ -3092,8 +3153,10 @@ KBEngine.KBEngineApp = function(kbengineArgs)
30923153

30933154
this.onmessage = function(msg)
30943155
{
3095-
var stream = new KBEngine.MemoryStream(msg.data);
3156+
var stream = KBEngine.app.msgStream;
3157+
stream.setbuffer(msg.data);
30963158
stream.wpos = msg.data.byteLength;
3159+
30973160
var app = KBEngine.app;
30983161
var FragmentDataTypes = KBEngine.FragmentDataTypes;
30993162

@@ -3305,7 +3368,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
33053368
{
33063369
if(KBEngine.messages.Loginapp_onClientActiveTick != undefined)
33073370
{
3308-
var bundle = new KBEngine.Bundle();
3371+
var bundle = KBEngine.Bundle.createObject();
33093372
bundle.newMessage(KBEngine.messages.Loginapp_onClientActiveTick);
33103373
bundle.send(KBEngine.app);
33113374
}
@@ -3314,7 +3377,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
33143377
{
33153378
if(KBEngine.messages.Baseapp_onClientActiveTick != undefined)
33163379
{
3317-
var bundle = new KBEngine.Bundle();
3380+
var bundle = KBEngine.Bundle.createObject();
33183381
bundle.newMessage(KBEngine.messages.Baseapp_onClientActiveTick);
33193382
bundle.send(KBEngine.app);
33203383
}
@@ -3381,7 +3444,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
33813444

33823445
if(!KBEngine.app.loginappMessageImported)
33833446
{
3384-
var bundle = new KBEngine.Bundle();
3447+
var bundle = KBEngine.Bundle.createObject();
33853448
bundle.newMessage(KBEngine.messages.Loginapp_importClientMessages);
33863449
bundle.send(KBEngine.app);
33873450
KBEngine.app.socket.onmessage = KBEngine.app.Client_onImportClientMessages;
@@ -3403,7 +3466,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
34033466

34043467
if(!KBEngine.app.loginappMessageImported)
34053468
{
3406-
var bundle = new KBEngine.Bundle();
3469+
var bundle = KBEngine.Bundle.createObject();
34073470
bundle.newMessage(KBEngine.messages.Loginapp_importClientMessages);
34083471
bundle.send(KBEngine.app);
34093472
KBEngine.app.socket.onmessage = KBEngine.app.Client_onImportClientMessages;
@@ -3428,7 +3491,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
34283491
{
34293492
KBEngine.INFO_MSG("KBEngine::onImportClientMessagesCompleted(): send importServerErrorsDescr!");
34303493
KBEngine.app.serverErrorsDescrImported = true;
3431-
var bundle = new KBEngine.Bundle();
3494+
var bundle = KBEngine.Bundle.createObject();
34323495
bundle.newMessage(KBEngine.messages.Loginapp_importServerErrorsDescr);
34333496
bundle.send(KBEngine.app);
34343497
}
@@ -3449,7 +3512,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
34493512
if(!KBEngine.app.entitydefImported)
34503513
{
34513514
KBEngine.INFO_MSG("KBEngineApp::onImportClientMessagesCompleted: start importEntityDef ...");
3452-
var bundle = new KBEngine.Bundle();
3515+
var bundle = KBEngine.Bundle.createObject();
34533516
bundle.newMessage(KBEngine.messages.Baseapp_importClientEntityDef);
34543517
bundle.send(KBEngine.app);
34553518
KBEngine.Event.fire("Baseapp_importClientEntityDef");
@@ -3869,7 +3932,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
38693932
}
38703933
else
38713934
{
3872-
var bundle = new KBEngine.Bundle();
3935+
var bundle = KBEngine.Bundle.createObject();
38733936
bundle.newMessage(KBEngine.messages.Loginapp_reqCreateAccount);
38743937
bundle.writeString(KBEngine.app.username);
38753938
bundle.writeString(KBEngine.app.password);
@@ -3880,7 +3943,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
38803943

38813944
this.bindAccountEmail = function(emailAddress)
38823945
{
3883-
var bundle = new KBEngine.Bundle();
3946+
var bundle = KBEngine.Bundle.createObject();
38843947
bundle.newMessage(KBEngine.messages.Baseapp_reqAccountBindEmail);
38853948
bundle.writeInt32(KBEngine.app.entity_id);
38863949
bundle.writeString(KBEngine.app.password);
@@ -3890,7 +3953,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
38903953

38913954
this.newPassword = function(old_password, new_password)
38923955
{
3893-
var bundle = new KBEngine.Bundle();
3956+
var bundle = KBEngine.Bundle.createObject();
38943957
bundle.newMessage(KBEngine.messages.Baseapp_reqAccountNewPassword);
38953958
bundle.writeInt32(KBEngine.app.entity_id);
38963959
bundle.writeString(old_password);
@@ -3910,7 +3973,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39103973

39113974
this.logout = function()
39123975
{
3913-
var bundle = new KBEngine.Bundle();
3976+
var bundle = KBEngine.Bundle.createObject();
39143977
bundle.newMessage(KBEngine.messages.Baseapp_logoutBaseapp);
39153978
bundle.writeUint64(KBEngine.app.entity_uuid);
39163979
bundle.writeInt32(KBEngine.app.entity_id);
@@ -3929,7 +3992,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39293992
}
39303993
else
39313994
{
3932-
var bundle = new KBEngine.Bundle();
3995+
var bundle = KBEngine.Bundle.createObject();
39333996
bundle.newMessage(KBEngine.messages.Loginapp_login);
39343997
bundle.writeInt8(KBEngine.app.args.clientType); // clientType
39353998
bundle.writeBlob(KBEngine.app.clientdatas);
@@ -3947,7 +4010,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39474010

39484011
if(!KBEngine.app.loginappMessageImported)
39494012
{
3950-
var bundle = new KBEngine.Bundle();
4013+
var bundle = KBEngine.Bundle.createObject();
39514014
bundle.newMessage(KBEngine.messages.Loginapp_importClientMessages);
39524015
bundle.send(KBEngine.app);
39534016
KBEngine.app.socket.onmessage = KBEngine.app.Client_onImportClientMessages;
@@ -3978,7 +4041,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39784041
}
39794042
else
39804043
{
3981-
var bundle = new KBEngine.Bundle();
4044+
var bundle = KBEngine.Bundle.createObject();
39824045
bundle.newMessage(KBEngine.messages.Loginapp_reqAccountResetPassword);
39834046
bundle.writeString(KBEngine.app.username);
39844047
bundle.send(KBEngine.app);
@@ -3992,7 +4055,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
39924055

39934056
if(!KBEngine.app.baseappMessageImported)
39944057
{
3995-
var bundle = new KBEngine.Bundle();
4058+
var bundle = KBEngine.Bundle.createObject();
39964059
bundle.newMessage(KBEngine.messages.Baseapp_importClientMessages);
39974060
bundle.send(KBEngine.app);
39984061
KBEngine.app.socket.onmessage = KBEngine.app.Client_onImportClientMessages;
@@ -4019,7 +4082,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
40194082
}
40204083
else
40214084
{
4022-
var bundle = new KBEngine.Bundle();
4085+
var bundle = KBEngine.Bundle.createObject();
40234086
bundle.newMessage(KBEngine.messages.Baseapp_loginBaseapp);
40244087
bundle.writeString(KBEngine.app.username);
40254088
bundle.writeString(KBEngine.app.password);
@@ -4053,7 +4116,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
40534116
KBEngine.INFO_MSG("KBEngineApp::onReOpenBaseapp: successfully!");
40544117
KBEngine.app.currserver = "baseapp";
40554118

4056-
var bundle = new KBEngine.Bundle();
4119+
var bundle = KBEngine.Bundle.createObject();
40574120
bundle.newMessage(KBEngine.messages.Baseapp_reloginBaseapp);
40584121
bundle.writeString(KBEngine.app.username);
40594122
bundle.writeString(KBEngine.app.password);
@@ -4619,7 +4682,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
46194682
player.entityLastLocalDir.y = player.direction.y;
46204683
player.entityLastLocalDir.z = player.direction.z;
46214684

4622-
var bundle = new KBEngine.Bundle();
4685+
var bundle = KBEngine.Bundle.createObject();
46234686
bundle.newMessage(KBEngine.messages.Baseapp_onUpdateDataFromClient);
46244687
bundle.writeFloat(player.position.x);
46254688
bundle.writeFloat(player.position.y);
@@ -4647,7 +4710,7 @@ KBEngine.KBEngineApp = function(kbengineArgs)
46474710
entity.entityLastLocalPos = position;
46484711
entity.entityLastLocalDir = direction;
46494712

4650-
var bundle = new KBEngine.Bundle();
4713+
var bundle = KBEngine.Bundle.createObject();
46514714
bundle.newMessage(KBEngine.messages.Baseapp_onUpdateDataFromClientForControlledEntity);
46524715
bundle.writeInt32(entity.id);
46534716
bundle.writeFloat(position.x);

0 commit comments

Comments
 (0)