Skip to content
This repository has been archived by the owner on Sep 25, 2023. It is now read-only.

建议:Handler返回的是函数,pomelo-loader会多次执行该函数,建议只执行一次! #1167

Open
sss316 opened this issue Aug 20, 2020 · 6 comments

Comments

@sss316
Copy link

sss316 commented Aug 20, 2020

module.exports = function(app) {
return new Handler(app);
};
这个是demo的写法,如果该Handler需要读取文件,项目会多次创建Handler并且多次读取文件,导致性能下降。
程序员自己写逻辑难免出现这种问题,
建议:从底层防范,让module.exports永远执行一次。

@wangkunmeng
Copy link

pomelo\lib\common\service\handlerService.js你看看这个服务内代码

@whtiehack
Copy link
Contributor

let handler
module.exports = function(app) {
if(handler)return handler;
return handler = new Handler(app);
};

你自己改成这样不就完了.

@sss316
Copy link
Author

sss316 commented Aug 27, 2020

@wangkunmeng 看代码干啥,直接测试就能看到一直调用。
@whtiehack 目前我就是这么干的,直接拿demo改项目,容易误导新手。

@raoyaoiau
Copy link

只是执行了两次,启动一次,加载一次。

@sss316
Copy link
Author

sss316 commented Sep 15, 2020

同一个类型服务器只调用2次,但是别的服务器类型为了rpc远程调用,启动时也会调用该module.exports。所以会执行很多次!

如果该函数有大量运算或文件读写,就需要判断服务器类型,并且使用 @whtiehack 的写法。

let handler;
module.exports = function(app) {
if(handler)return handler;
handler = new Handler(app);
if(app.getServerType()!='conn'){
/////do sth./////
}
return handler;
};

@raoyaoiau
Copy link

除handle所在服务器,只有connector会去,new其他的服务器的handler. 这是为了远程调用,但是这也没有多次执行该函数,一个connector只是执行一个而已, 疑惑,

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants