Запуск Chrome из командной строки и вывод, когда страница закончила загрузку - PullRequest
0 голосов
/ 04 мая 2018

Я запускаю chromium следующим образом, выводя сгенерированный ассемблерный код и загружая указанный .html:

. / Chrome --js-flags = "- print-code" ~ / example.html

Есть ли способ (параметр командной строки?) Определить, закончилась ли загрузка страницы, то есть был ли выведен весь код сборки? В идеале, передавая эту информацию через стандартный вывод.

Спасибо!

1 Ответ

0 голосов
/ 04 мая 2018

Короче говоря: нет.

Одна из причин заключается в том, что утверждение «страница закончила загрузку» настолько расплывчато, что фактически не является определением. Многие современные веб-сайты загружаются поэтапно: сначала загружается и отображается статический HTML-код, отображаемый на сервере, затем динамический контент загружается асинхронно, часто снова в несколько этапов (например, сначала первичный контент, реклама в режиме ожидания). Что если есть несколько <iframe> с? Что если на странице есть таймер, который загружает больше вещей (например, слайд-шоу с фотографиями, уведомления, новые объявления) через X секунд? Что если взаимодействие с пользователем (щелчок, прокрутка и т. Д.) Вызывает больше нагрузок? Во всех этих случаях браузер не может знать, что «эта страница завершилась», и многие страницы никогда не «заканчиваются».

Другая проблема заключается в том, что операторы «страница завершилась загрузка» и «весь код сборки был сгенерирован» - это очень разные вещи. Фактически, V8, как правило, пытается не компилировать какой-либо оптимизированный код, пока начальная загрузка еще выполняется, потому что это может привести к замедлению и тряске без особой выгоды. Вместо этого оптимизированный код компилируется позже для функций JavaScript, которые, как считается, часто выполняются. Поскольку оптимизация зависит от того, что делает код JavaScript, в общем, нет способа предсказать, завершена ли генерация кода. Я видел сайты с бесконечной прокруткой, где каждое событие прокрутки вызывало оптимизированную компиляцию еще некоторого кода.

Тем не менее, для определенных сценариев вы можете получить некоторое приближение: если у вас есть контроль над example.html, вы можете испустить console.log("MY_MARKER") в любой момент по вашему выбору. Если вы затем запустите Chrome с --enable-logging=stderr, вы можете найти операторы console.log() (вместе с кучей других вещей) в stderr.

...