2015-04-09 6 views
2

Я запускаю фантом js процесс визуализации веб-страницы. На веб-странице есть много javascript, загруженных асинхронно, каждый из которых выполняет свои собственные функции.PhantomJS - любой способ проверить, работает ли функция javascript?

Есть ли способ проверить/отладить механизм javascript в webkit, чтобы узнать, выполняет ли он в настоящее время любую строку javascript (в отличие от простоя)?

Если да, то есть способ рассказать, из какого ресурса javascript он выполняется?

Что-то вроде приостановки работы механизма javascript, регистрации трассировки стека, а затем возобновление его, как обычно, будет идеально.

Я не против читать исходный код webkit, phantomjs, или render.js, модифицируя его сам и перекомпилируя его из источника. Сначала я хотел бы спросить вас, ребята, если функция уже существует или кто-то уже сделал это, так как Google не дал мне никаких результатов. Благодаря!

+0

вы можете использовать функцию performance.getEntries() для получения списка скриптов и их таймингов для согласования с document.scripts. если они полностью взаимны, все скрипты загружаются. если все сценарии загружены и ваш код запущен, вы можете предположить, что все сценарии «запущены». подождите еще 3500 мс, и если никаких новых записей не появилось, вероятно, это будет сделана загрузка ... вы можете перегрузить объект ajax для того, чтобы сделать выборку из журналов. – dandavis

+0

Спасибо за предложение. Из того, что я читал, кажется, что performance.getEntries() регистрирует только сетевые тайминги ресурсов. Например. если сайт загружает javascript, он регистрирует только время запроса и время приема. Тем не менее, меня интересует время выполнения фактического выполнения javascript, а не тайминги сети. Есть ли эквивалент performance.getEntries()? – user3667125

+0

@ dandavis В приложении PhantomJS нет 'performance.getEntries()'. Просто попробовал. Доступно только 'performance.timing'. –

ответ

0

Не совсем.

Phantom.js - это инструмент для тестирования интеграции. Это означает, что вы не должны пытаться исследовать внутренности, только утверждать результат. Вопросы, которые вы хотите задать, это: «Могу ли я сделать X-действие», «Эта функция работает с точки зрения конечного пользователя».

Если вы хотите узнать, работает ли какая-либо функция или вызвана в реакции, действие X. Затем вы смотрите на внутреннюю часть своей программы, и то, что вы хотите, является модульным тестом, и вы, вероятно, утверждаете, что функция работает, обманывая или издеваясь над ней. Если это так, то посмотрите на sinon.js в качестве помощника по тестированию.

(обратите внимание, что вы можете запустить модульное тестирование в phantom.js - это хорошо, потому что вам нужно время работа, чтобы запускать их)

+0

Извините, мой вопрос был немного неясным. Я использую phantom.js для захвата веб-страниц на диск, поэтому я могу просматривать офлайн. На некоторых страницах есть плагины комментариев (например, facebook, disqus, livefyre), которые занимают очень много времени для загрузки (> 5 секунд), поэтому мне нужно проверить, загружены ли все соответствующие сценарии и выполнены ли они. Я хочу, чтобы render.js вызывал новую ошибку().стека каждые 100 миллисекунд для печати трассировки стека, но когда я пытаюсь это сделать, он говорит, что «стек» не определен. Есть ли другой способ найти текущую трассировку стека механизма javascript в render.js? – user3667125

0

Детектирования ли составило JavaScript и запустить, вероятно, не правильный путь, чтобы решить эту проблему. Самые медленные операции - это сетевые запросы. Вы можете detect if all requests are done путем подсчета начатых запросов с onResourceRequested и заканчивать запросы с onResourceReceived, а затем добавлять только статическое время ожидания для компиляции/запуска.

+0

Да, это правильно, чтобы захватить веб-страницы на диск, phantomjs должен обнаруживать, когда выполняются сетевые запросы, а затем добавлять время ожидания после этого. Это то, что я сейчас делаю. Однако я сделал это сообщение, чтобы не найти рабочего решения проблемы, а как возможность обучения. В настоящее время я изучаю новые (и экспериментальные) способы определения, когда сериализовать веб-страницы - для удовольствия, для моего собственного проекта для домашних животных. Если это не удается, по крайней мере, я кое-что узнал о движке javascript. С учетом сказанного ваше решение действительно, но я не могу его принять, потому что это не совсем то, что я ищу. – user3667125

Смежные вопросы