surging icon indicating copy to clipboard operation
surging copied to clipboard

首次请求接口性能较差

Open liuhll opened this issue 5 years ago • 6 comments

由于首次访问的时候需要生成动态代理,建立socket连接啥的,所有感觉都会比较慢,如果一个服务的实例部署了多个(比如100个,前100次都会比较慢),给用户的体验就不会很好,有什么办法解决这个问题吗

liuhll avatar Mar 20 '19 04:03 liuhll

你可以在模块Initialize的时候做预热加载,如以下代码

    public  class CommonModule:SystemModule
    {
        public override void Initialize(CPlatformContainer serviceProvider)
        {
                //预加载
        }
  }

fanliang11 avatar Mar 20 '19 04:03 fanliang11

预热加载要怎么做?是将所有的接口做一次模拟请求吗?

liuhll avatar Mar 20 '19 06:03 liuhll

如果服务需要动态代理远程调用,动态代理先可以预生成,有两种方法 1.第一种,在Packages配置ServiceProxyModule

 "Packages": [
      {
        "TypeName": "EnginePartModule",
        "Using": "${UseEngineParts}|DotNettyModule;NLogModule;MessagePackModule;ConsulModule;WSProtocolModule;MqttProtocolModule;EventBusRabbitMQModule;CachingModule;ServiceProxyModule;KestrelHttpModule;"
      }
    ]

第二种,在ServiceHostBuilder构建添加UseProxy()

fanliang11 avatar Apr 02 '19 15:04 fanliang11

按群主说的这样,两种都加进去后,没看出有什么效果,第一次请求还是很慢,是否还需要配置其它地方? @fanliang11

ggh5270 avatar Apr 16 '19 01:04 ggh5270

预热访问一次接口把!这是.NET Core诟病

fanliang11 avatar Apr 16 '19 07:04 fanliang11

需要把ServiceProxyModule添加到Using中,具体代码如下:

  "Packages": [
      {
        "TypeName": "EnginePartModule",
        "Using": "${UseEngineParts}|DotNettyModule;NLogModule;MessagePackModule;ConsulModule;HttpProtocolModule;ServiceProxyModule;EventBusRabbitMQModule;"
      }
    ]

CreateProxy也进行了优化,经过测试之前有几ms性能消耗。

fanliang11 avatar Apr 17 '19 13:04 fanliang11