Javascript 试图了解在这种情况下,我可以从异步/等待模式中获得什么(如果有的话)性能提升
我有一个使用Ajax的JS函数,它通常每3秒钟访问一次服务器,以便更新页面上的几个元素 JS调用类似于: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({
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它不是创建新线程,而是将工作添加到线程池中,以供其中一个池线程使用。给一个新工人什么也不做,只为另一个工人创建新工作的工作并不会增加并行性。它只是给一个线程一些无意义的工作要做,而它本来可以完成请求的工作。