我在现有应用程序中有一个场景,在单击“保存”按钮时会调用Javascript函数。这个javascript函数在内部对webservices进行了4-5次异步调用。由于某些原因,我们现在有很多业务逻辑的大javascript文件。此外,我们还面临应用程序中的性能问题。为了减少我们对服务器进行的XHR调用次数,我们考虑在服务器端整合这些调用,只需从我们的Javascript调用一次。 在服务器端,我们使用Async Await来使这个调用异步。所以我们用一个方法创建了一个包装器服务,现在使用HTTPClient公开的SendAsync方法调用不同的服务方法。 我们的底层服务都是同步的,为了实现我们使用HTTPClient的异步功能。我们测量了性能并且显示了可观的收益。 但是,我们的一位同事指出,我们实际上会有序列化和反序列化的开销,以及我们现在从服务器发起的其他web服务调用最终会同步运行。所以为什么不直接调用方法而不是新的HTTP调用。 我们的方法都是同步的,为了使它们异步,我们将不得不使用将再次开销的任务。 这两种方法都是开销,但我们看到使用异步等待新的HTTP请求需要更多地与微服务概念一致。 有一场辩论,我想知道其他想法。
答案 0 :(得分:0)
我的两分钱:
在服务器端聚合信息的方法很好。 从我的角度来看,只有当你想要连接到传统服务并且你没有能力直接集成它时,才能在服务器端内部使用HTTPClient。 HTTPClient易于使用且功能强大,但从技术上讲,它比使用Task要多得多(考虑错误处理,序列化,测试,网络/套接字资源)。
任务也很好,因为它允许正确取消,HTTPClient无法实现(HTTPClient只能关闭套接字,其他端仍然可以阻止资源)。
除了一般资源方面,使用Futures使任务成为完美匹配: https://msdn.microsoft.com/en-us/library/ff963556.aspx