Небольшой тест с ASP.NET MVC. Код страницы просмотра:
public string Bechmark(Func<string> url)
{
var s = new Stopwatch();
var n = 1000;
s.Reset();
s.Start();
for (int i = 0; i < n; i++)
{
var u = url();
}
s.Stop();
return s.ElapsedMilliseconds + " ms, " + ((s.ElapsedMilliseconds) / (float)n) + " ms per link<br/>";
}
Посмотреть код:
<%= Bechmark(() => Url.Action("Login", "Account")) %>
<%= Bechmark(() => Url.Action("Login", "Account", new {username="bla", password="bla2", returnurl="blabla32", rememberme=false} )) %>
<%= Bechmark(() => Html.BuildUrlFromExpression<AccountController>(a=>a.ChangePassword("bla", "bla", "ya")) ) %>
Выполнение этого на типичном ноутбуке Core2 в новом шаблоне проекта по умолчанию с ASP.NET MVC Beta дает следующие результаты:
38 мс, 0,038 мс на ссылку
120 мс, 0,12 мс на ссылку
54 мс, 0,054 мс на ссылку
Выполнение одного и того же теста производительности в производственном проекте с 10 контроллерами, имеющими всего около 100 методов и 30 записей таблицы маршрутизации, значительно снижает производительность для метода на основе выражений:
31 мс, 0,031 мс на ссылку
112 мс, 0,112 мс на ссылку
450 мс, 0,45 мс на ссылку
Мы довольно часто используем этот метод (ремонтопригодность) и проводим некоторый сравнительный анализ производительности, что значительно снижает производительность сайта - страницы быстро содержат около 30 или более таких ссылок, что означает 10 мс дополнительной нагрузки на одну страницу. Даже 0,112 мс на URL составляет около 4 мс чистой загрузки процессора.
Следует отметить, что производительность всех трех вызовов генерации URL между MVC Preview 3 и Beta (выпущенной вчера) улучшилась в 5 раз.
Stack Overflow предположительно работает на той же платформе, как вы, ребята, решили эту проблему масштабирования? Либеральное кеширование главной страницы (множество ссылок) и предварительно обработанные элементы управления?
Есть ли другие рабочие сайты в ASP.NET MVC с проблемами производительности или полезными советами?