Лучше использовать sort()
. Это нативная, а потому быстрая, функция. Своя функция, если опустить время на создание массива, будет на порядок медленнее.
Таким образом, всё упирается в копирование данных. И здесь могу посоветовать только одно: данные должны быть уже в переменных JS на момент загрузки страницы. Конечно, в самой таблице - тоже, на случай отсутствия JS у пользователя. И каждая сортировка просто формирует таблицу заново.
Ещё вариант, сделать массив непосредственно из DOM-элементов, как-то так (пример):
[...document.querySelectorAll('tr')]
А после применения sort()
, можно с помощью insert'ов сделать новую таблицу или даже пушить в существующую. Здесь плюс в том, что вы не меняете оформление и формат таблицы. То есть если другой программист (или вы в будущем) добавит новый столбец, то код, вероятно, не сломается.
К слову, если у вас 100-500 элементов, а на странице редко бывает больше 500, то сортировать можно как угодно, пользователь не заметит разницы.