У меня есть простой вызов ajax из файла Javascript на контроллер MVC5.Этот вызов занимает около 2 секунд.Задачи как в JavaScript, так и в контроллере чрезвычайно просты.Я не могу показать свой полный код, но я произвел измерения производительности для всего стека вызовов.
Откуда берется эта задержка, если все действия завершаются менее чем за 10 мс?Вы можете видеть на изображении ниже, где TTFB равен 2,12 с, мой контроллер явно завершает это действие раньше, чем за 2,12 с (2 мс согласно моему тесту перфорации).
Я что-то упустил из-за проблемы с сетью - сомнительнокак это все сделано на моем ПК разработчика.Я также попробовал то же самое с полностью скомпилированным приложением, развернутым на автономном сервере IIS (UAT, но все же ...), и результаты те же.
Единственное, что приходит мне в голову - это asp.net делаетчто-то после того, как метод контроллера завершен и перед тем, как фактически вернуть данные JSON обратно в браузер?
Выполнение Javascript:
1: 1.2000 milliseconds (get values)
2: 2.4000 milliseconds (validation)
3: 2.9000 milliseconds (just before Ajax call)
4: 2172.3 milliseconds (inside Ajax Success)
5: 2174.3 milliseconds (last step in Ajax Success)
6: 0, 0, 1 (see below, these are controller values)
Выполнение контроллера:
1: 0 milliseconds (Controller init, constructor completed)
2: 0 milliseconds (Action start)
3: 1 milliseconds (Action end (just before return)
Код Javascript:
// previous steps omitted, you can see the times for steps 1-3.
$.ajax({
type: "POST",
url: $("#appPath").val() + "/MyController/TrivialAction",
data: req,
cache: false,
global: false,
success: function (response) {
console.log("4: " + (performance.now() - t0) + " milliseconds.")
// some code here...
console.log("5: " + (performance.now() - t0) + " milliseconds.")
console.log(response.StepsInCtrlr);
},
error: function (errorxhr, status, error) {
BootBoxDiplayHtml(errorxhr.responseText);
}
});
Вот метод возврата контроллера (согласно ответу Питера Б)
return Json(new
{
IsError = resp.IsError,
ErrorMessage = string.Join("<br>", resp.ErrorMessages),
Amount = resp.Amount.ToString("n2")
}, JsonRequestBehavior.AllowGet);
(не точный запрос выше, а аналогичный)
![enter image description here](https://i.stack.imgur.com/XpjBb.png)