Производительность при использовании Partials в представлениях Razor - PullRequest
9 голосов
/ 21 апреля 2011

Мне нравится использовать партиалы в моих представлениях Razor.Это делает код красивым и чистым.Но есть ли какие-либо существенные затраты производительности при использовании партиалов?Я создал простой тест.Это показывает, что использование партиалов медленнее .

test.cshtml:

@{
   var stopwatch = new System.Diagnostics.Stopwatch(); 
   stopwatch.Start();         
   for(var i=0; i<1000; i++) {
      var str = "my string #" + i;        
      @Html.Partial("_MyPartial",str)  // replace with @str on second test
      <br />        
   }
   stopwatch.Stop();
   <br />
   @: Time elapsed (ms): @(stopwatch.ElapsedMilliseconds)
}

_MyPartial.cshtml:

@Model

Код счастичное выполнение за 340 мс, в то время как встроенный код @str показывал 0 или 1 мс.Это действительно шокирует меня, потому что это означает, что я должен избавиться от всех моих милых пристрастий, по крайней мере, от петель.

Если кто-то захочет подтвердить или критиковать мой эксперимент, добро пожаловать.

Ответы [ 3 ]

9 голосов
/ 21 апреля 2011
  1. Убедитесь, что вы не запускаете свой сайт в режиме отладки и что проект MVC компилируется в конфигурации выпуска. Запуск сайта в режиме отладки заставляет MVC пропустить кучу кеширования
  2. Вы не предоставили свой базовый код, поэтому сложно определить, обоснованы ли ваши выводы.
  3. Считаете ли вы, что наличие 1000 вызовов на частичный является обычным явлением? Похоже, вы измеряете сценарий, который не является реалистичным. На любом достаточно сложном веб-сайте стоимость вызовов базы данных обычно превосходит любой код представления.
  4. Пожалуйста, посмотрите это видео: http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance
2 голосов
/ 21 апреля 2011

В этой операции у вас есть секундомер, который проходит через цикл 1000 раз и получает доступ к этой части. Эта часть находится в отдельной ячейке памяти, и для загрузки может потребоваться даже доступ с дискового ввода-вывода. Это явно хуже, чем размещать этот код на самой странице.

Но не отвергайте частички везде. Если вы находитесь в ситуации, когда у вас нет кода, который загружается несколько раз на странице (в отличие от того кода, который вы показали), тогда партиалы довольно полезны, и снижение производительности, которое они наносят, не настолько серьезно, что вам следует быть обеспокоенным.

0 голосов
/ 21 апреля 2011

Да, использование партиалов приводит к снижению производительности; новый файл должен быть открыт и прочитан, а IO всегда медленный / дорогой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...