Здесь два фактора - длина ответа (пакета), и трудоемкость обработки скриптом, так вот, длина гораздо меньше критична, к тому же зависит как писать HTML и JSON, достаточно не использовать inline CSS и JS, чтобы пакет с HTML "весил" не намного больше, а то и меньше.
Что касается до качества архитектуры, например, статуса ошибки, который надо как-то передавать клиенту, то можно сделать "гибридный" формат, то есть HTML просто "завернуть" в JSON.
Это все в общем случае, а в каждом конкретном надо отталкиваться от задачи.