Javascript 试图了解在这种情况下,我可以从异步/等待模式中获得什么(如果有的话)性能提升

Javascript 试图了解在这种情况下,我可以从异步/等待模式中获得什么(如果有的话)性能提升,javascript,c#,asp.net,asynchronous,Javascript,C#,Asp.net,Asynchronous,我有一个使用Ajax的JS函数,它通常每3秒钟访问一次服务器,以便更新页面上的几个元素 JS调用类似于: $.ajax({ type: 'GET', dataType: 'json', contentType: 'application/json', url: './Updater/GetJsonRes', data: {}, success: function (response) { clientinfo = response;

我有一个使用Ajax的JS函数,它通常每3秒钟访问一次服务器,以便更新页面上的几个元素

JS调用类似于:

$.ajax({
    type: 'GET',
    dataType: 'json',
    contentType: 'application/json',
    url: './Updater/GetJsonRes',
    data: {},
    success: function (response) {
        clientinfo = response;
        processUpdate();
    }
});
代码隐藏函数使用

返回Json(客户端,JsonRequestBehavior.AllowGet)

我想知道的是,我是否能够通过以下异步模式获得任何性能提升:

我没有直接调用返回JsonResult的函数,而是按照如下方式设置了一个函数:

public async Task<JsonResult> GetJsonRes() {
  return await Task.Run(() => getClientsInfo());
}
公共异步任务GetJsonRes(){ 返回等待任务。运行(()=>getClientsInfo()); }
函数
getClientsInfo()
仅定义为
publicjsonresult getClientsInfo()

我想我也在想这个模式一开始是否正确。如果说有10个人打开了这个页面,那么这个函数大约每3秒钟就会被打开的每个页面调用一次

在此模式中调用
getClientsInfo()
是否完全无阻塞

我想我也应该问,如果这是错误的/无效的,那么什么是更有效的模式

编辑:

仅从纯粹的观察角度来看,我将更新速度从3秒改为100毫秒,并打开了一堆页面。我注意到Ajax调用直接转到
getClientsInfo
,要快速更新所有页面有些困难


在以100毫秒的延迟调用异步函数时,所有浏览器窗口似乎都能轻松更新。

现在,您要求每个线程不处理任何给定的响应,而是安排另一个线程完成的工作,等待另一个线程去接它,让该线程执行该工作,然后将其发送回另一个线程以完成原始请求


因此,您增加了大量的调度开销,却没有得到任何回报。这只会影响性能。

仅对大的和严重的请求使用AJAX,以加载页面、图像等的大部分内容。要更新页面上的几个元素,最好使用
长轮询
COMET
之类的方法。Google it,也许这就是你想要的。我可能会在某个时候研究SignalR,但对于这个项目的范围来说,一个简单的Ajax调用是非常合适的。这就是我所怀疑的,但现在也弄不明白为什么调用async函数后页面的行为会更正常?100毫秒的更新时间在任何情况下都是不合理的,但调用异步函数后性能似乎要好得多。至于我在原始帖子中提出的其他问题,在这种情况下,是否有一种异步/等待模式可以让我受益?@Yelnik如果你有一个实际的异步操作,那么当然可以。如果不是,那么不是。当您说“而不是每个线程只处理任何给定的响应”时,是否意味着每次请求此函数时,.NET都会为每个函数调用生成一个“线程”?如果函数在同一时刻被调用10次会怎么样?它们是连续处理还是同时处理?如果我正在做的当前异步模式确实为每个调用生成了一个新线程,那么这不是比非异步模式更并发吗?很抱歉,我没有收集我所要求的原始信息far@Yelnik它不是创建新线程,而是将工作添加到线程池中,以供其中一个池线程使用。给一个新工人什么也不做,只为另一个工人创建新工作的工作并不会增加并行性。它只是给一个线程一些无意义的工作要做,而它本来可以完成请求的工作。