LINUX.ORG.RU

как снизить нагрузку на проц в javascript?


0

1

такая ситуация - скрипт на питоне работает с апач2.2 как cgi
соответственно, через браузер - лог выводится по ходу работы

чтобы лог сам прокручивался и обновлялись счетчики - строки лога также выводят примерно следующее: <script>update_counter('success')</script>

в следствие этого, яваскрипт порой сжирает 100% процессора

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

мб есть другой способ снизить потребление ресурсов проца?

браузер Опера, но надо учесть и ФФ

То есть загрузка страницы никогда не заканчивается? Вряд ли можно снизить. Любой браузер стремится загрузить страницу как можно быстрее, он же не знает, что страница бесконечная.

Можно попробовать ограничить при помощи nice, может сработать.

Но вообще, может быть, проще переработать скрипт и получать данные отдельными запросами к серверу, между которыми будет интервал?

proud_anon ★★★★★
()

чтобы лог сам прокручивался и обновлялись счетчики - строки лога также выводят примерно следующее: <script>update_counter('success')</script>

Т.е. у вас по сути бесконечный цикл, в котором бедный сервер дергается тем чаще, чем быстрее он отдает ответ на запрос?

Таймер, ИМХО, самое лучшее решение.

Eddy_Em ☆☆☆☆☆
()

А может заюзать Ajax? Например, сделать textarea, в которую добавляются строчки, полученные через XmlHttpRequest?

Браузеронезависимость гарантируется использованием библиотек типа jQuery.

Divius ★★
()
Ответ на: комментарий от Divius

nice - команда линукса? это не питон-скрипт жрет 100% процессора, а браузер, исполняя получаемый яваскрипт

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

проще переработать скрипт и получать данные отдельными запросами к серверу

как же тогда запускать питон как cgi?

Т.е. у вас по сути бесконечный цикл, в котором бедный сервер дергается тем чаще, чем быстрее он отдает ответ на запрос?


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

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

А может заюзать Ajax? Например, сделать textarea, в которую добавляются строчки, полученные через XmlHttpRequest?


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

sergey-novikov ★★★
() автор топика

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

???

гешефт!

Rastafarra ★★★★
()
Ответ на: комментарий от Rastafarra

КАК запустить cgi-скрипт на выполнение, чтобы эти строки появлялись?
вторым аякс-запросом, который никогда не завершится?

sergey-novikov ★★★
() автор топика
Ответ на: комментарий от sergey-novikov

ну ты как маленький, право слово.

два скрипта. один пишет в файл, другой читает из. читающий дергается аяксом и получает строки. не?

Rastafarra ★★★★
()
Ответ на: комментарий от sergey-novikov

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

Divius ★★
()
Ответ на: комментарий от sergey-novikov

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

И браузер не валится из-за нехватки памяти? Лучше уж раз в n секунд «дергайте» CGI при помощи xmlhttprequest, javascript'ом обрабатывайте ответ и обновляйте свои счетчики.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от sergey-novikov

>nice - команда линукса?
Да.

это не питон-скрипт жрет 100% процессора, а браузер, исполняя получаемый яваскрипт

Вот браузер и запускать под nice

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

Это значит, что ресурсы тратятся в основном на update_counter('success'), а не на скачивание и обработку лога с сервера?

Ну, у меня есть только два предложения:
1.Вы говорите, что функция обходит все элементы и что-то с ними делает. Вам это действительно нужно? Особенно если учесть, что там какой-то лог.

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

Впрочем, если такие вопросы начинают возникать, у вас, наверное, система как-то не очень хорошо устроена.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.