Насколько быстро работает клиентский JavaScript по сравнению с серверным Java? - PullRequest
15 голосов
/ 02 сентября 2010

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

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

Ответы [ 8 ]

16 голосов
/ 02 сентября 2010

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

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

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

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

8 голосов
/ 02 сентября 2010

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

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

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

Конечно, есть веские причины для сохранениявещи на сервере, например:

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

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

5 голосов
/ 02 сентября 2010

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

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

4 голосов
/ 02 сентября 2010

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

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

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

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

2 голосов
/ 02 сентября 2010

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

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

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

2 голосов
/ 02 сентября 2010

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

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

0 голосов
/ 25 июня 2019

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

0 голосов
/ 03 сентября 2010

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

...