Насколько быстро клиентская сторона javascript или серверная Java?

Мне интересно, насколько быстрый Javascript на стороне клиента сравнивается с Java на стороне сервера с точки зрения вычислительной мощности.

Например, сортировка. Должно ли все это быть сделано на стороне сервера, если это возможно? А как насчет перебора коллекции?

Ответы

Ответ 1

Ответ очень сложный и зависит от каждой конкретной ситуации.

Сервер, как правило, будет на порядок более мощным, чем клиентская машина; и управляемый код, как правило, намного быстрее, чем скрипты.

Однако - клиентская машина также обычно имеет много запасных вычислительных мощностей, которые не используются, в то время как сервер может запускать запросы для тысяч пользователей. Поэтому в этом случае предпочтительнее большая часть работы, которая может быть выгружена клиенту.

Вы должны понимать потребности и ожидания своих пользователей для каждой отдельной функциональности вашего приложения и смотреть на относительную нагрузку и затраты на разработку для вашей организации, чтобы разделить развитие между двумя средами и выяснить, что лучше всего работает. Например, ваши пользователи, вероятно, ожидают, что ваш сайт не замораживает свой браузер или вызывает неудачные диалоги "эта веб-страница ест ваш компьютер", поэтому ваши клиентские скрипты должны быть написаны разумно. Чтобы не сказать, что вы не можете выполнить тонную работу с клиентом (вы можете), вам просто нужно быть умным о том, как вы это делаете, и помнить, что он блокирует поток пользовательского интерфейса.

Ответ 2

Серверная Java-платформа, безусловно, будет работать намного быстрее, вам нужно будет сравнить свой конкретный случай, но вы, вероятно, смотрите на преимущество 10-20x.

Однако это, вероятно, не имеет большого значения:, несмотря на необработанную вычислительную мощность, я бы порекомендовал попробовать сделать как можно больше расчетной клиентской стороны в Javascript по следующим причинам:

  • Даже 20-кратное замедление по-прежнему остается незаметным для пользователя.
  • Когда вы учитываете задержку обмена данными между клиентом и сервером, его локальное выполнение на клиенте почти наверняка будет более восприимчивым к пользователю.
  • Клиентские машины, вероятно, не привязаны к ЦП, поэтому выполнение некоторого дополнительного кода на них эффективно бесплатно
  • Если вы можете отключить работу с сервера на клиент, вам понадобится меньше инфраструктуры на стороне сервера, что может стать дорогостоящим, когда вам нужно начать масштабирование.
  • Наличие большого количества сообщений от клиента к серверу, скорее всего, усложнит вашу архитектуру и затруднит разработку новых функций в будущем.
  • Выполнение вычислений на клиенте часто снижает требования к пропускной способности.

Есть, конечно, веские причины, чтобы держать вещи на сервере, например:

  • Последствия для безопасности (если клиенту нельзя доверять)
  • Очень большой набор данных (требуется слишком много времени для загрузки на клиент)
  • Необходимо использовать массовые параллельные вычисления (например, для поиска Google).
  • Избегайте необходимости учитывать различия в клиентах (например, версии Javascript)

Но если они не применяются, я попытаюсь как можно больше нажать на клиента.

Ответ 3

Большая разница здесь не в скорости виртуальных машин. Разница в том, что один сервер должен обслуживать десятки или сотни клиентов. Еще один фактор: круглые поездки на сервер добавляют много накладных расходов, поэтому вы хотите минимизировать их.

В принципе, все, что не критично для безопасности и может быть сделано на клиенте легко, должно выполняться на клиенте.

Ответ 4

Эти две вещи нельзя сравнивать бок о бок.

Слишком много факторов, и языки слишком разные и служат слишком различным целям для эффективного сравнения их скорости.

Вам действительно нужно решить, где вы делаете свои расчеты в каждом конкретном случае.

Если клиентская машина должна выполнять слишком много работы, это ухудшит производительность приложения, но если серверу будет предложено сделать слишком много, это может замедлить время отклика для всех.

Ответ 5

Javascript достаточно быстрый, чтобы сортировать данные на клиенте. Я использовал его с наборами данных из 5000 строк, по 11 полей в строке и использовал их для сортировки таблиц на клиенте (с разбивкой на страницы). Эти типы использовали функции сравнения, чтобы сортировать строки по полю и типу данных. Фактическая часть Javascript процесса взяла что-то порядка высоких десятков миллисекунд (~ 80, если я помню).

Я предпочел бы скорее отправить эту повседневную задачу клиенту в любой день, а не забивать на нем очень загруженный сервер. YMMV.

Ответ 6

Не смешивайте Java с Javascript - имя похоже, но они совершенно разные языки. Javascript - это клиентская сторона, интерпретируемый язык, Java - это язык байтового кода, запущенный внутри виртуальной машины, с гораздо большей оптимизацией для обработки больших данных. Что касается того факта, что на серверах, на которых работают Java-сервисы, как правило, гораздо больше мощности (более быстрые процессоры и диски-ввод-вывод, больше оперативной памяти), вычисление на Java всегда быстрее по моему опыту. Javascript может использоваться на стороне клиента, если вы хотите вычислить небольшие данные (например, сортировка всего нескольких сотен элементов).

Всем вам нужно будет решить, какой путь быстрее: вычислить и подготовить данные на сервере и передать их клиенту (где передача по интернету является самой большой причиной замедления) или для вычисления данных уже на стороне клиента через javascript.

Мое предложение: если на клиентской стороне уже нет данных, которые вы хотите на стороне клиента, имеет смысл вычислить их на сервере и передать уже подготовленные данные клиенту. Но если данные уже находятся на стороне клиента, и их не более нескольких сотен, лучший пользовательский опыт заключается в их вычислении в пользовательском браузере.

Ответ 7

Это действительно зависит от ящиков, в которых вы используете код, насколько велики данные и доступность для работы с процессом и другими факторами, плюс вам нужно подумать о передаче данных по проводу, что это дорого. Вы должны уравновесить то, что вы собираетесь с этим сделать, и если лучше потратить больше времени на обработку вещей раньше и позволить ресурсам освободить тяжелые вещи и сыграть с отправкой туда и обратно.

Ответ 8

Там нет конкретного ответа. Это зависит от мощности вашего клиента и размера вычислений. Это умные часы, умный телефон? Если вы не можете гарантировать мощность вашего клиента, я бы оставил вычисления на сервере.