Зависит от того, как будут использоваться данные.
Для большого набора данных, для которого была достаточна функция поиска браузера, достаточно было просто вернуть прямую таблицу HTML. Загрузка занимает некоторое время, но дисплей реагирует на старые, более медленные клиенты, и вам никогда не придется беспокоиться о его поломке.
Когда клиент выполнил сортировку и поиск, а вы не видите всю таблицу сразу, я заставил сервер отправить таблицы с разделителями табуляции через XMLHTTPRequest, проанализировал их в браузере с помощью list = String.split ('\ n ') и обновил отображение повторными вызовами $ (' node '). innerHTML =' blah '. Двигатель JS может хранить длинные строки довольно эффективно. Это работало намного быстрее на клиенте, чем показ, скрытие и перестановка узлов DOM. Создание и уничтожение новых DOM-узлов на лету оказалось очень медленным. Разделение каждой строки на поля по запросу, кажется, работает; Я не экспериментировал с такой степенью свободы.
Я никогда не пробовал очевидный трюк предварительной выборки и фона, потому что эти другие методы работали достаточно хорошо.