2016-05-01 4 views
0

Я разрабатываю инструмент для анализа веб-сайта, предоставленного пользователем. Одна из важных частей - показать время загрузки веб-сайта. Как я могу реализовать это в PHP? Я попробовал следующий методКак найти время загрузки веб-сайта с помощью PHP?

Метод 1:

Скачать HTML код сайта разбирает его, найти каждый ресурс, как CSS-файлы, файлы JavaScript, изображения и т.д. Затем загрузить один за другим.

Проблема: Так как настоящие браузеры, такие как Chrome, они загружают около 6 ресурсов за раз. PHP не может делать асинхронно. Трудно реализовать кеш.

Метод 2:

Использование инструмента репер в Apache. Кажется довольно хорошо. Я могу установить одновременные соединения и все. Отличный инструмент. Может даже включить Gzip.

ab -n 100 -c 10 http://www.google.com/ 

Проблема: Как включить кэш? Потому что я хочу протестировать сайт два раза (чтобы показать время загрузки с кешем). Я также слышал, что тест Apache AB не загружает ресурсы. Кто-нибудь знает?

Есть ли какой-либо другой метод? Или есть ли способ исправить проблему метода?

ответ

2

Вместо ab, вы можете попробовать wget. Он полезен для загрузки всей страницы и может использовать заголовок If-Modified-Since, если кеширование включено.
- https://www.gnu.org/software/wget/

Другой идеей было бы использовать Selenium WebDriver, который позволяет управлять веб-браузеров с PHP.
- https://github.com/facebook/php-webdriver

[Позже Edit]

Я боюсь, что вы не можете выполнить одновременно загрузку (страницы & его ресурсов) с помощью wget.

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

Например, страница может загружать 7 файлов JavaScript: три в одном домене, три из другого домена и 7-й из CDN. Некоторые из этих файлов сценариев после выполнения могут загружать другие ресурсы - файлы CSS, изображения, другие библиотеки JavaScript. Каждый файл CSS может также инициировать загрузку других ресурсов (файлы шрифтов, изображения, другие стили).

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

Итак, я бы предложил взглянуть на Selenium Driver. Или другие библиотеки/инструменты, такие как Mink, или PhantomJS - как @halfer упомянутый.

+0

ли WGET нагрузки ресурсы тоже? Как css js файлы, изображения и т. Д.? –

+0

Да, должно. См. Этот ответ: http://stackoverflow.com/a/6510193/6277548 и его комментарии. Кроме того, некоторые примеры из википедии: https://en.wikipedia.org/wiki/Wget#Using_Wget Другими словами, вы можете попробовать с 'wget -H -p -k -U" Пользовательский агент Firefox "" http : //your.web/page.html "' – tachirei

+0

Но если веб-сайт/веб-страница требует полного браузера (с возможностями CSS и JavaScript) для загрузки всех своих ресурсов, возможно, «Selenium Webdriver» является лучшим решением. – tachirei

2

Если вы хотите сделать это в PHP, у вас есть несколько вариантов:

  • крюк до PhantomJS через очередь, как Gearman или Beanstalk. Phantom содержит настоящий браузер (движок WebKit), поэтому он будет загружать веб-сайты в реальном мире. Есть драйверы для PHP, такие как Spiderling.
  • Разбирает страницу, используя что-то вроде Goutte, а затем загрузить свои ресурсы параллельно с использованием multi_curl (PHP может это сделать!) Или обертку таким же, как, например Guzzle. Однако, поскольку этот подход не будет запускать JavaScript, дополнительные нагрузки, которые запускаются в коде, не будут выполняться.
1

Php может выполнять несколько запросов одновременно с использованием CURL через интерфейс «multi» http://php.net/manual/en/function.curl-multi-init.php.

Вы также можете передать If-Modified-Since (см. How to test for "If-Modified-Since" HTTP Header support), и на ваш 2-х очковый ответ.

Но у вас еще есть несколько пункта для рассмотрения:

Как вы знаете, если вы должны загрузить условную Js в PHP в одиночку?

Как удаленный бэкэнд работает с «свежим» печеньем или старым печеньем? Возможно, у сайта есть специальная логика для возвращения пользователя ...

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

Но проверить, «обработка» внешний процесс, который, в свою очередь, контролировать веб-браузер может привести к изменению времени ....