Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Где лучше выполнять арифметические операции? На клиенте или на сервере? (https://javascript.ru/forum/misc/27663-gde-luchshe-vypolnyat-arifmeticheskie-operacii-na-kliente-ili-na-servere.html)

Маэстро 23.04.2012 11:45

Цитата:

Сообщение от trikadin
Маэстро, на клиенте, конечно...

Спасибо за тесты. Я тоже такие делал, в том числе задавал и 100 тыс. строк и 1000 строк на 1000 столбцов. К сожалению, на больших массивах данных вычисления на сервере выигрывают перед вычислениями на клиенте, т.к. на сервере всё считает SQL-запрос в БД на приличном сервере. И вычисления занимают 1 сек. по сравнению с 10 сек. на клиенте (в некоторых задачах). Поэтому я всё еще думаю... ;)
P.S. 100 тыс. строк - не перебор. В товарном справочнике предприятия более 140 тыс. наименований.

Aetae 23.04.2012 12:13

По поводу вычислений - именно на клиенте. Любые вычисления не требующие серьёзной рекурсии выполняются очень быстро. Но надо понимать что именно вычисления, ни в коем случае нельзя дёргать документ до того как всё будет посчитано. Все вычисляемые цифры до окончательного вывода должны содержаться в js и тогда всё булет быстро.
Цитата:

Сообщение от Маэстро (Сообщение 170311)
Я тоже так раньше думал. Но это жить как я говорю "без любви к людям". Учусь у Гугла. Знаете сколько серверов у Гугла? - Говорят больше миллиона. Если бы Гугл сказал: мы сделали классный поисковый механизм, а то что оно медленно отображает информацию на вашем компьютере - это ваши проблемы! Покупайте новый компьютер! Если бы Гугл сказал, что медленный интернет - это ваши проблемы! и т.д.... - мы бы Гугл не уважали. А мы уважаем. За что? -За то, что они думают в первую очередь о пользователях.
P.S. Гуглу легче. У него милли...милли...миллиарды $ ;)

А вы не заметили что последнее время гугл, с*ка, тормозит?
Навесили овер9000 свистоперделок. Приходится на нём js отключенным держать, чтоб по-человечески работал. =(

Маэстро 23.04.2012 13:01

Цитата:

Сообщение от Aetae (Сообщение 170697)
По поводу вычислений - именно на клиенте. Любые вычисления не требующие серьёзной рекурсии выполняются очень быстро. Но надо понимать что именно вычисления, ни в коем случае нельзя дёргать документ до того как всё будет посчитано. Все вычисляемые цифры до окончательного вывода должны содержаться в js и тогда всё булет быстро.

Не любые. И даже без рекурсии. Есть категория вычислений, которые точно надо считать на сервере, либо разделять на часть тут, часть там.
Пример.
Менеджер хочет знать, на какую сумму товара хранится на складе по разделам:
-телевизоры
-стиральные машинки
-холодильники
-CD-плееры
- ... итого 30 разделов.
В каждом разделе грубо говоря по 1000 наименований.
Как будем считать? Сразу думаю, что глупо гнать на клиента 30х1000=30 тыс. строк, чтобы посчитать в JS. В данном случае надо на сервере с помощью SQL-запроса посчитать суммы товаров по разделам, а на клиента отправить только 30 строк, на котором уже можно получить их общую сумму.
Поэтому вопрос, поднятый в моей теме я трансформирую уже несколько по-другому: Каков строгий критерий разделения такого рода задач на задачи, решаемые на клиенте и на задачи, решаемые на сервере?

Aetae 23.04.2012 13:11

>Каков строгий критерий
Логика.

Какой-то выверенной годами истины в данном вопросе нет.(разве что в каких-нить новых забугорных книжках)

dmitriymar 23.04.2012 14:10

Цитата:

Сообщение от trikadin
dmitriymar, в js есть функция toFixed, с её помощью можно вполне сделать вычисления удовлетворяюще точными.

далеко не всегда

Маэстро 23.04.2012 15:21

Цитата:

Сообщение от trikadin
var log = document.createDocumentFragment();

А Илья Кантор говорит, что "Фрагмент документа ничего не оптимизирует сам по себе, он не быстрее обычного документа" ;)
http://javascript.ru/optimize/documentfragment-0

Octane 23.04.2012 21:07

Маэстро, сравнивать надо не "1) Сначала всё в строку" и "2) Сначала всё в documentFragment", а с первым примером, 1) и 2) это разные варианты реализации того, как можно добавить в документ элементы одним действием.

Маэстро 23.04.2012 21:14

Цитата:

Сообщение от Octane (Сообщение 170788)
Маэстро, сравнивать надо не "1) Сначала всё в строку" и "2) Сначала всё в documentFragment", а с первым примером, 1) и 2) это разные варианты реализации того, как можно добавить в документ элементы одним действием.

Та яж не придираюсь! Яж шучу... :) Просто было хорошее настроение и процитировал Илью Кантора, потому что вспомнил армейский анекдот:
-Товарищ старшина, а крокодилы летают?
-Вы что, рядовой, конечно же нет!
-Да? А товарищ полковник, сказал, что летают!
-Даа?? Аа... ну да... летают... только низенько низенько...
;)

DjDiablo 23.04.2012 22:42

Вот во всей этой проблеме я искренне немогу понять, зачем вы таблицу из 5000 строк единовременно клиенту отдаёте. (пост 10)
Что пейджинг c фильтрами уже не моден ? Теперь круто получить HTML'ку этак высотой в 80 экранов ?

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

trikadin 23.04.2012 23:40

Цитата:

Сообщение от dmitriymar
далеко не всегда

Можно пример?

DjDiablo, +1. Комп стандартной мощности верстать таблицу > 10000 ячеек будет долго.


Часовой пояс GMT +3, время: 12:25.