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