Обычно в Node.js весь код на JavaScript выполняется в одном потоке. Для асинхронного выполнения задача помещается в очередь задач. Иными словами, при создании 1000+ сокет соединений, JS будет создавать очередь и тормозить. И это ограничение производительности распространяется буквально на всё, в том числе при работе с файлами, а не только на REST приложения.
JavaScript — это высокоуровневый ЯП, а компьютер понимает только единицы и нули. Проще говоря, JS проходит через
интерпретатор, который построчно преобразует исходный код в эквивалентный машинный код.
Java в умелых руках работает с байт-кодом. Java проходит через
компилятор и окончательный код, который выдает компилятор, оптимизирован и выполняется намного быстрее.
Плюсы и минусы интерпретатора и компилятора
Кроме того, невзирая на все нарекания фронтов, гораздо проще и удобней использовать jQuery в сочетании с Ajax и Java сервером, когда речь идёт о web разработке.