Jestem trochę po obu stronach, właściwie:
- Gdy po stronie javascript potrzebuję danych , korzystam z JSON
- Kiedy po stronie javascript potrzebuję prezentacji, na której nie będę wykonywać żadnych obliczeń, zazwyczaj używam HTML
Główną zaletą używania HTML jest to, że chcesz zastąpić całą część strony tym, co pochodzi z żądania Ajax:
- Ponowne zbudowanie części strony w JS jest (dość) trudne
- Prawdopodobnie masz już silnik szablonów po stronie serwera, który został użyty do wygenerowania strony w pierwszej kolejności ... Dlaczego nie użyć go ponownie?
Zasadniczo nie biorę pod uwagę strony „wydajnościowej”, przynajmniej na serwerze:
- Na serwerze generowanie części HTML lub JSON prawdopodobnie nie zrobi tak dużej różnicy
- O wielkości rzeczy, które przechodzą przez sieć: cóż, prawdopodobnie nie używasz setek KB danych / html ... Używanie gzip do wszystkiego, co przesyłasz, robi największą różnicę (nie wybierając między HTML i JSON)
- Jedną z rzeczy, które można wziąć pod uwagę, są zasoby, których potrzebujesz na kliencie, aby odtworzyć HTML (lub strukturę DOM) z danych JSON ... porównaj to z wypychaniem części HTML na stronę; -)
Wreszcie jedna rzecz, która na pewno się liczy:
- Jak długo zajmie Ci opracowanie nowego systemu, który będzie wysyłać dane w postaci kodu JSON + JS wymagany do wstrzyknięcia go jako HTML na stronę?
- Ile czasu zajmie samo zwrócenie HTML? A jak długo można ponownie wykorzystać część istniejącego kodu po stronie serwera?
I aby odpowiedzieć na inną odpowiedź: jeśli musisz zaktualizować więcej niż jedną część strony, nadal istnieje rozwiązanie / włamanie do wysłania wszystkich tych części w jednym dużym ciągu, który grupuje kilka części HTML, i wyodrębnij odpowiednie części w JS.
Na przykład możesz zwrócić ciąg znaków, który wygląda następująco:
<!-- MARKER_BEGIN_PART1 -->
here goes the html
code for part 1
<!-- MARKER_END_PART1 -->
<!-- MARKER_BEGIN_PART2 -->
here goes the html
code for part 2
<!-- MARKER_END_PART2 -->
<!-- MARKER_BEGIN_PART3 -->
here goes the json data
that will be used to build part 3
from the JS code
<!-- MARKER_END_PART3 -->
Nie wygląda to zbyt dobrze, ale jest zdecydowanie przydatne (korzystałem z niego kilka razy, głównie wtedy, gdy dane HTML były zbyt duże, aby można je było zamknąć w JSON) : wysyłasz HTML dla części strony, które potrzebujesz prezentacji, a wysyłasz JSON w sytuacji, w której potrzebujesz danych ...
... I aby je wyodrębnić, metoda JS podciągnie się, jak sądzę ;-)