Próbuję znaleźć najlepsze sposoby korzystania z KnockoutJS i potrzebuję twojej porady.Knockout JS i duże modele
Mój model widoku zawiera zestaw "dokumentów", każdy z nich ma zestaw "wartości". Każdy „dokument” jest wyświetlany jako osobnej tabeli przy użyciu następującej formy:
<div data-bind="foreach: Documents">
<table data-bind="foreach: Values">
<tr data-bind="foreach: $data">
<td data-bind="attr: {colspan: Colspan}">
<label data-bind="text: Label"></label>
<br />
<span data-bind="html: Value"></span>
</td>
</tr>
</table>
</div>
Wszystko działa poprawnie z wyjątkiem gdy widok modele są duże.
Na przykład, jeśli rozmiar modelu widoku wynosi około 1 megabajt (i zawiera 80 dokumentów po 60 wartości), renderowanie zajmuje więcej niż dwie minuty na moim komputerze.
Zastanawiam się, czy istnieje sposób, aby znacząco poprawić wydajność ... Albo to będzie szybciej zrezygnować z Knockout i po prostu zbudować html na stronie serwera i po prostu wcisnąć go do przeglądarki ...
Renderowanie "tylko" modelu widoku 300kb zajmuje blisko 30 sekund.
"Dokumenty" są definiowane przez użytkowników, więc są nawet scenariusze> 2 megabajty (nie wiem, dlaczego to robią).
Czy ktoś ma doświadczenie z dużymi modelami widoku w JavaScript?
Dzięki. Więc gra z tym, w jaki sposób mój model widoku jest zorganizowany, nie pomoże tak naprawdę zgodnie z twoją odpowiedzią? Mam na myśli, jeśli wykonuję wiązania dwufazowe: najpierw należy związać pustą tabelę, a następnie powiązać tę tabelę, aby wypełnić ją danymi itp.? –
Również z twojego doświadczenia, czy sensowne jest wypróbowanie innych frameworków MVVM lub silników szablonów (takich jak szkielet, jQuery.tmpl itd.) Czy wydajność jest prawie taka sama? Innymi słowy, czy jest to ogólny problem JavaScript/Browser/Dom, czy jest to po prostu Knockout, że jest wolny? Oczywiście sam spróbuję co najmniej jednego innego systemu, ale próbowanie wszystkich z nich zajmuje dużo czasu, dlatego proszę o radę doświadczonych gości :) –
@Alexey Raga - Za każdym razem, gdy robisz powiązanie po stronie klienta Twoja wydajność będzie ograniczona przez przeglądarkę. Co jeśli ktoś używa IE8 (wolny silnik JavaScript), a model jest ogromny, renderowanie go zajmie kilka minut. Naprawdę nie dałeś żadnych ograniczeń, jeśli uważasz, że "znacznie poprawisz wydajność", jeśli jQuery.tmpl jest o 50% szybszy, czy to wystarczy? ... –