Я использую eval() в javascript для оценки значительного количества js-кода (не только json, но и вызовов функций). Браузер зависает во время вызова, то есть пользователь не может прокручивать браузер или ничего нажимать. Есть ли способ обойти эту проблему замораживания?Браузер зависает во время javascript eval()
ответ
В большинстве браузеров JavaScript работает в потоке пользовательского интерфейса, поэтому он блокирует пользовательский интерфейс, как вы описываете. Лучший способ разблокировать пользовательский интерфейс - разбить JS на более мелкие части и связать их вместе с setTimeout (который возвращает управление потоком в браузер для визуализации пользовательского интерфейса)
Вы должны разбить свой функции на более мелкие части. Я рекомендую комбинировать их с setTimeout
.
В современных браузерах есть web workers, которые могут вычислять данные в фоновом режиме.
Возвращает ли отображение пользовательского интерфейса после каждой строки кода в setTimeout? Почему замораживание не происходит, когда, скажем, браузер выполняет большое количество javascript при загрузке начальной страницы? –
Это зависит от браузера. Я считаю, что пользовательский интерфейс зависает только в том случае, если он либо a) максимизирует процессор. B) javascript управляет HTML/CSS. Вы должны сделать свое собственное тестирование, у меня нет _any_ данных для поддержки моего требования. –
UI * делает * блокировать, когда JavaScript выполняется при загрузке начальной страницы. Большинство JavaScript не занимают много времени, но, надеюсь, вы этого не заметите. – bobince
Вы также можете попробовать выполнять код, вводя новый сценарий тег в страницу:
function executeCode(code) {
var element = document.createElement('script');
element.type = 'text/javascript';
try {
element.appendChild(document.createTextNode(code));
document.body.appendChild(element);
}
catch (e) {
element.text = code;
document.body.appendChild(element);
}
}
var code = 'alert("hello world");';
executeCode(code);
- 1. MPI зависает во время выполнения
- 2. Форма зависает во время цикла
- 3. JS зависает во время цикла
- 4. fgets зависает во время цикла
- 5. Persistence.createEntityManagerFactory зависает во время выполнения
- 6. Программа зависает во время выполнения
- 7. JFrame зависает во время цикла
- 8. Приложение зависает во время 'compileCoffeescript'
- 9. FFmpeg зависает во время преобразования
- 10. eval во время расширения макросов emacs lisp
- 11. Eval() не присваивает переменной во время выполнения
- 12. Может ли браузер загружать оставшийся ресурс во время работы JavaScript
- 13. Docker build зависает во время загрузки
- 14. SSIS-пакет случайно зависает во время выполнения
- 15. Firefox зависает во время тяжелой петли
- 16. Tomcat зависает во время запуска веб-приложение
- 17. iPad app зависает во время NSOperationQueue
- 18. Модем зависает во время последовательной связи
- 19. Ruby telnet зависает во время ввода пароля.
- 20. Java-процесс зависает во время чтения stdInput
- 21. Postgres зависает во время запроса на удаление
- 22. macvim rails.vim зависает во время работы spec
- 23. Excel зависает во время утверждения IF
- 24. java jprogressbar зависает во время тяжелой работы
- 25. Maya GUI зависает во время вызова подпроцесса
- 26. Экран зависает во время захвата Qrcode
- 27. почему UI зависает во время длительных операций
- 28. Java-игра зависает во время боя
- 29. Ядерный модуль Linux зависает во время разгрузки
- 30. C++ форма зависает во время цикла
вы будете иметь, чтобы дать более подробно, чем это. какой браузер? как выглядит ваш код? –