2013-05-30 4 views
1

Я очень новичок в разработке ASP.NET MVC, начавшемся 5 дней назад. Вы можете сказать только в R & D фазе. Мне нравится стиль разработки MVC, но мое замешательство началось, когда один из моих друзей сказал мне, что производительность ASP.NET MVC не сопоставима с WebForms из-за использования Reflection. например:ASP.NET MVC 4 Влияние отражения на производительность

@Html.EditorFor(model => model.FieldName) 

MVC использует отражение. Поэтому, по его словам, мы должны использовать обычные HTML-теги для преодоления отражения. например

<input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" /> 

Я пытался удалить неразберихой путем поиска через Интернет и обнаружили следующее:

ASP.NET MVC Performance
Why use lambdas in ASP.NET MVC instead of reflection?
Reflection and performance in web

Но эти темы не говорит мне ясно ли с помощью обычного HTML будет дайте мне больше производительности или нет, и какой будет лучший метод в крупномасштабном приложении MVC.

+2

Thats микрооптимизация. Вы уверены, что вам нужна эта производительность? Вы, вероятно, получаете гораздо больше скорости, настраивая свои индексы DB. – jgauffin

+0

@jgauffin Так я и думал. Но мне нужно было устранить свою путаницу, спросив экспертов, поскольку я совершенно новый. Спасибо, что нашли время. :) –

+2

Возможный дубликат [Тест отражения не отображает ожидаемые числа] (http://stackoverflow.com/questions/5239310/reflection-test-does-not-show-expected-numbers) – jgauffin

ответ

6

Вы гарантированно гарантируете, что версия без отражения будет быстрее, так как ей нужно меньше работать. Однако я ожидал, что разница будет совсем небольшой. Я провел несколько базовых тестов с двумя разными шаблонами.

Шаблон 1 с помощью Html помощников:

@for (int i = 0; i < 10000; i++) 
{ 
    @Html.EditorFor(model => model.FieldName) 
} 

шаблона 2 с помощью обычного HTML:

@for (int i = 0; i < 10000; i++) 
{ 
    <input id="FieldName" class="text-box single-line" type="text" value="" name="FieldName" data-val-required="FieldName is required." data-val="true" /> 
} 

Для тестирования производительности я использовал MiniProfiler библиотеки, которая дает нам представление о том, как много времени тратится на создание шаблонов. При усреднении результатов, я получаю следующие значения:

  • шаблон 1 (с HTML-хелперов): 405,8 мс
  • Шаблон 2 (простой HTML): 82,1 мс

Таким образом, разница равна 323,7 мс, разность факторов 5. Тем не менее, мы выполнили наш тест, используя 10000 итераций, которые, вероятно, не являются поведением по умолчанию в шаблоне. Если мы изменим шаблоны к более разумной умолчанию, как в 10 раз, мы получаем следующие результаты:

  • Template 1 (с HTML-хелперов): 3,7 мс
  • Шаблон 2 (простой HTML): 0.5 мс

Теперь вы можете увидеть некоторые различия (3,2 мс), но по моему скромному мнению, это ничтожно мало. На данный момент я бы не смотрел на производительность вообще, а только посмотрел, какой стиль вы предпочитаете. Если вы хотите полностью контролировать свой HTML, перейдите к простой HTML-версии. Если вы хотите иметь все дополнительные функции, предлагаемые HTML-помощниками (например, автоматически переводить аннотации в атрибуты проверки jQuery), перейдите для этого метода.Разница между этими двумя методами в большинстве случаев будет достаточно низкой, чтобы не иметь большого влияния.

+0

Спасибо Эрик. Я предпочту использовать оба варианта, как в случае, когда я просто хочу отображать данные в таблице, тогда я думаю, что простой HTML является хорошим выбором вместо HTML-помощника для отображения метки, но в случае вставки и обновления данных, я думаю, что HTML-помощник будет хороший кандидат с его встроенными функциями. :) Спасибо, что помогли мне и рассказали об этом удивительном инструменте MiniProfiler. Я не знал об этом. –

+1

@UsmanKhalid Конечно, комбинация действительна. Ваш случай использования звучит как действительный случай для использования обоих. Наслаждайтесь MiniProfiler, он фактически разработан парнями, которые создали Stackoverflow.com. –

Смежные вопросы