Уменьшает ли ViewModel производительность веб-приложений?
Насколько я понимаю, использование моделей представления может сделать веб-разработчика. жизнь намного проще, в том смысле, что мы можем использовать этот подход для отображения только необходимых свойств в локализованных строках. Также я использую в mvc3 view модели JQuery проверки и т. Д.
Прямо сейчас я сомневаюсь, так как у меня есть реальное узкое место в моем веб-приложении. с запросом всех объектов (20 из них), как это
List<Domain.Property> data = session.Query<Domain.Property>().ToList();
return PropertyViewModel.FromDomainModel(data);
и этот список объектов Property отправляется моему ViewModel, где FromDomainModel, который ожидает список объектов Property, как это
List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
{
foreach (Property p in x)
{
dataVm.Add(new PropertyViewModel(p));
}
return dataVm;
}
сейчас в том же классе я использую
public PropertyViewModel(Property x)
{
Id = x.Id;
Created = x.Created;
Title = x.Title;
....
Photo = x.Photos.First();
}
но при использовании этого подхода отправка коллекции объектов в viewmodel, откуда возвращается та же самая viewmodel, с несколькими необходимыми мне свойствами, странно (по крайней мере, для меня), у меня значительно увеличилась загрузка нескольких объектов и длительность времени.
Если вам нужно больше информации. Пожалуйста спросите.
Также, если вы знаете для лучшего решения, пожалуйста, поделитесь.
Обновление: при использовании доменной модели у меня загружено 20 объектов, а при использовании описанной выше модели представления загружено 67 объектов, что значительно снижает производительность.
3 ответа
Действительно, будет дополнительное время, потраченное на отображение между моделями доменов и моделями представления, но это время будет смехотворно бесконечно малым, что не должно быть узким местом. Вызов метода установки свойств в C# является чрезвычайно быстрой операцией и абсолютно незначителен по сравнению, например, с вызовом базы данных.
Поэтому продолжайте использовать модели представления, не беспокоясь о том, что это как-то повлияет на производительность вашего приложения.
Разные виды будут иметь разные модели. Если для представления требуется большой объем данных, его не следует включать в модель представления для этого представления.
Также проверьте наличие проблем с выбором N+1 и рассмотрите возможность установки размера пакета для классов и коллекций, если вы еще не сделали процесс извлечения ссылочных объектов более эффективным.
Вы не должны замечать никаких узких мест из-за ViewModels, вместо этого это звучит как проблема с производительностью вызовов вашей базы данных, проблема n+1 - действительно распространенная проблема производительности с ORM, вы должны проверить количество вызовов вашей базы данных. Entity Framework Profiler - действительно хороший отладчик для EF, он покажет вам количество обращений к вашей базе данных, а если производительность не будет хорошей, он подскажет, как ее улучшить.