Вы пытаетесь отобразить миллион записей на одной странице? Независимо от того, как вы оптимизируете свой серверный код, это ОЧЕНЬ много HTML для анализа / рендеринга, особенно если он находится в таблице.
Даже использование .innerHTML никогда не спасет вас. Механизму рендеринга все еще придется анализировать / стилизовать / отображать / позиционировать многие миллионы строк / ячеек таблицы, и вам придется подождать, пока он заработает.
Если вам абсолютно НЕОБХОДИМО показывать все эти записи на одной странице, попробуйте разбить вещи на управляемые куски. Сделайте так, чтобы вызов AJAX возвращал (скажем) 100 записей за раз, помещал их в таблицу, затем извлекал еще 100 записей и т. Д. По крайней мере таким образом вы увидите, что содержимое страницы будет расти, а не сидеть. там и подождите, пока 1 000 000 строк таблицы не отобразятся в одном кадре.
Лучшим вариантом было бы сделать постраничное позиционирование, когда одновременно показывается только 100 записей, и вы представляете стандартную навигацию с кнопками << first / prev / next / last >> для переключения между «страницами» данных.