@m1rvi

Цикл убивает браузер?

В js пишу скрипт:
while(flag == true) {
...
}

а браузер тупо не отвечает : /
видео
  • Вопрос задан
  • 421 просмотр
Решения вопроса 3
gscraft
@gscraft
Программист, философ
Видимо раньше Вы внутри цикла выполняли полезную нагрузку и отдавали рабочие ресурсы процесса между делом, сам того не подозревая. Везде, где используют бесконечный цикл, а не пользуются системой сообщений-событий для организации программы — организуют раздачу сообщений или таймаут вручную в обязательном порядке. Возьмите для примера приложения на Win API:
while (GetMessage(&msg, nullptr, 0, 0))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

— здесь цикл подвисает до получения сообщений от системы. Ну или другой пример (что пришел в голову), Python Pygame:
while True:
  # код приложения
  tick(60) # отдадим время свыше необходимого фреймрейта системе

Ну а на JS делать такое — моветон, совершенно неправильно. Поскольку любое JS приложение должно быть событийно-ориентированным, реагировать на действия пользователя, как и большинство UI-приложений. Если Вам нужно выполнять действие с интервалом, используйте:
function main() {} // вместо Вашего напрасного цикла
setInterval(main, 50); // вызывайте каждые 50 миллисекунд, например
Ответ написан
Lynn
@Lynn
nginx, js, css
А какого эффекта вы ожидали?

Но вообще браузеры на такой тривиальный код уже давно не попадаются. Вроде только вкладка умирает, а не весь браузер
Ответ написан
@neomasterxxx
Скорее всего, у вас в цикле flag всегда равен true - по этому он выполняться бесконечно. И вкладка браузера зависает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы