2013-12-18 4 views
0

Я хочу конвертировать мое приложение ASP.NET MVC в одно приложение с нокаутом.Является ли нокаут медленным каркасом?

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

<html> 
<head> 
    <script src="../../Assets/knockout/js/knockout-3.0.0.js" ></script> 
</head> 
<body> 
    <ul data-bind="foreach: lists, visible: lists().length > 0"> 
     <li> 
      <strong data-bind="text: title" ></strong>    
     </li> 
    </ul> 
    <script type="text/javascript">  
     function List(data) { 
      this.title = ko.observable(data.Title); 
     } 

     function ListViewModel() { 
      var self = this; 
      self.lists = ko.observableArray([]); 

      $.getJSON("/home", function (json) { 
       var data = JSON.parse(json); 
       var mappedlists = $.map(data, function (item) { 
        return new List(item); 
       }); 
       self.lists(mappedlists); 
      }); 
     } 
     ko.applyBindings(new ListViewModel()); 
    </script> 
</body> 

Я уверен, что нокаута не могу быть, что медленно, есть что-то я здесь отсутствует

Примечание: Для сравнения я использовал оба на одной и той же точки зрения (бок о бок) в см., который появляется первым

+2

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

+0

@ Emil спасибо, это было неправильно с моей стороны, чтобы проверить производительность на той же странице. даже если нокаут быстрее, он будет отображаться позже. –

ответ

2

Это медленнее из-за дополнительного вызова (и загрузки страницы) для вашей страницы.

Я предлагаю, чтобы избавиться от getJSON вызова и ввести модель во время рендеринга вида:

<script type="text/javascript"> 
    // our model data 

    var data = @Html.Raw(JsonConvert.SerializeObject(this.Model)); 

    // start knockout 

    MyEntity.Init(data); 
</script> 
+0

вам может понадобиться «установить пакет Newtonsoft.Json» –

0

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

В методе контроллера:

return View(<viewmodel class name>); 

, а затем в окне вы можете использовать это перед применением связывания нокаута:

var jsonData = new HtmlString(new JavaScriptSerializer().Serialize(this.Model)); 

и затем может передать этот объект в нокаут ViewModel.

2

В этом простом случае бессмысленно использовать нокаут, потому что вы не пользуетесь двусторонней привязкой данных. Все, что вы делаете, это просто отображение некоторых данных. Вы можете отображать эти данные со стороны сервера с помощью Razor, если вы используете ASP.NET MVC. Имеет смысл использовать нокаут, тогда вы хотите сделать интерактивные экраны. Также вы можете использовать фреймворк, например Durandal, для создания одностраничных приложений уровня предприятия. Он использует нокаут для привязки данных и, на мой взгляд, обеспечивает реальные преимущества в производительности для стандартного приложения ASP.NET MVC.

+0

код, которым я пользуюсь, я использую для проверки производительности нокаута против mvc. полное приложение само по себе является приложением lob. –

1

Вы не можете сравнить производительность между нокаутом и ASP.NET MVC. Одна из них - клиентская, а другая - серверная.

Они оба работают в разных условиях, поэтому сравнение бесполезно для начала.

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

+0

это два из многих способов сделать приложение для веб-ловушек и производительность - это критерии, которые помогут решить. поэтому я не буду называть его бесполезным. Хотя я согласен с тем, что работа бок о бок - это не способ сравнить производительность. –

+0

Хотя вы можете проверить, будет ли конкретная страница работать быстрее с использованием MVC или Knockout, то, о чем вы просите, - это сравнение скорости между MVC и Knockout. Это просто невозможно, потому что они очень разные вещи – Kenneth

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