Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скорость работы Curl, file_get_contents(), ...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Behelit
Отправлено: 20 Мая, 2015 - 13:29:27
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




На удалённом сайте API необходимо парсить JSON-файл, который весит 2.2 мб.

Вопрос: почему с Браузера этот JSON файл скачивается менее одной секунды, а через php (curl или file_get_contents()) загружается от 4 до 20 секунд?

Подскажите пожалуйста, может мне стоит использовать для выкачки JSON другой метод?
Или в настройках PHP надо копаться, если да, то где копать?

Трафик безлимитный, свой сервер, unix debian, php 5.4

---

Если будет не трудно, проверьте, такая же у вас беда с этим хостом?

1. Скорость захода через браузер: http://api[dot]steampowered[dot]com/IDOT[dot][dot][dot]3D9E0FB7B2910EED (у меня сюда заходит около 1 секунды)

2. И скорость php:
PHP:
скопировать код в буфер обмена
  1. $time_test = time();
  2. $url = 'http://api.steampowered.com/IDOTA2Match_570/GetMatchHistoryBySequenceNum/v001/?key=172075779AAB64773D9E0FB7B2910EED';
  3. $page = file_get_contents($url);
  4. echo time()-$time_test;
  5. echo ' sec<br><br>';
  6. echo $page;

(тут у меня от 4 до 18 секунд) - всегда по разному
 
 Top
Ch_chov
Отправлено: 20 Мая, 2015 - 13:54:26
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Скрипт на локалхосте запускается?
(Добавление)
CODE (text):
скопировать код в буфер обмена
  1. $ time curl http://api.steampowered.com/IDOTA2Match_570/GetMatchHistoryBySequenceNum/v001/?key=172075779AAB64773D9E0FB7B2910EED &> /dev/null
  2.  
  3. real    0m2.632s
  4. user    0m0.009s
  5. sys     0m0.007s
 
 Top
Behelit
Отправлено: 20 Мая, 2015 - 13:58:38
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




Да, запускается
(Добавление)
Ch_chov пишет:
Скрипт на локалхосте запускается?
(Добавление)
CODE (text):
скопировать код в буфер обмена
  1. $ time curl http://api.steampowered.com/IDOTA2Match_570/GetMatchHistoryBySequenceNum/v001/?key=172075779AAB64773D9E0FB7B2910EED &> /dev/null
  2.  
  3. real    0m2.632s
  4. user    0m0.009s
  5. sys     0m0.007s

вот в том-то и проблема, что через консоль скорость приемлемая, и через браузер тоже
а как доходит дело до php-скрипта, то скорость выполнения от 5 секунд и выше, что очень долго

(Отредактировано автором: 20 Мая, 2015 - 14:10:49)

 
 Top
Behelit
Отправлено: 22 Мая, 2015 - 21:08:10
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




как же победить эту проблему, господа?
В чем уязвимость file_get_contents(), curl ? Почему так долго выкачивает?
 
 Top
Behelit
Отправлено: 23 Мая, 2015 - 19:18:01
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Дек. 2013  


Помог: 0 раз(а)




кто-нибудь сталкивался с подобной ситуацией?
 
 Top
OrmaJever Модератор
Отправлено: 23 Мая, 2015 - 20:40:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




А я вот проверил и у меня тоже такая же беда. курл и файл_гет_контентс = 9-10 сек, а в браузере около 1секунды. Давайте поразмышляем на эту тему Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
LIME
Отправлено: 23 Мая, 2015 - 20:45:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Давайте
Мне тоже стало интересно
В браузере 1.7 сек а в php 4-5 сек
Предположил что изза поэтапного выделения памяти
Сначала выделил $page = str_repeat('a', 1024 * 1024 * 3);
Не помогло
(Добавление)
Еще есть предположение о keep alive
Надо запустить curl несколько раз без закрытия дескриптора и замерить время для каждого обращения
Я не могу сейчас
 
 Top
Panoptik
Отправлено: 23 Мая, 2015 - 20:52:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




предполагаю что долго резолвится днс. браузер использует кеш, поэтому быстро, а пхп каждый раз спрашивает


-----
Just do it
 
 Top
LIME
Отправлено: 23 Мая, 2015 - 20:53:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Днс кэшируется на уровне ос
Но вот соединение возможно да
О чем выше написал
 
 Top
DeepVarvar Супермодератор
Отправлено: 23 Мая, 2015 - 21:09:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Юзерагент.
 
 Top
LIME
Отправлено: 23 Мая, 2015 - 21:24:36
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




что юзерагент?
всмысле сервис по разному реагирует?
дык он для роботов и создан наверное

PHP:
скопировать код в буфер обмена
  1.  
  2. $time_test = time();
  3. $url = 'http://api.steampowered.com/IDOTA2Match_570/GetMatchHistoryBySequenceNum/v001/?key=172075779AAB64773D9E0FB7B2910EED';
  4. $ch = curl_init($url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. echo (time()-$time_test) . ' sec<br><br>';// 0 sec
  7.  
  8. $time_test = time();
  9. $page1 = curl_exec($ch);
  10. echo (time()-$time_test) . ' sec<br><br>';// 2-3 sec
  11.  
  12. $time_test = time();
  13. $page2 = curl_exec($ch);
  14. echo (time()-$time_test) . ' sec<br><br>';// 0-1 sec
  15.  
  16. var_dump($page1===$page2);// boolean true
  17.  

как бэ так
можно еще резолвить хост в ip и хост добавлять вручную чтоб проверить на днс
но мне больно и неудобно)
болею я(

(Отредактировано автором: 23 Мая, 2015 - 21:38:07)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Мая, 2015 - 21:45:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Нашли тоже загадку века.
браузер: начало ответа через 0,62с, 1,14с всего на запрос
curl: starttransfer_time 0.72с, total_time 2.15с
curl с user-agent: starttransfer_time 0,65с, total_time 3.41
Ничего странного не видите? Нет, я не про всего затраченного времени, я про постоянную метку начала передачи ответа.

И что же позволяет браузеру на том же канале прокачать аж полмегабайта текста гораздо быстрее, но чего по-умолчанию не делают низкоуровневые штуки? gzip, конечно.
curl, gzip: starttransfer_time 0,66с, total_time 1.18с


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 23 Мая, 2015 - 21:51:14
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Мелкий да
Про сжатие совсем забыл
А что же так повлияло в моем случае? Разгон соединения чтоли?
(Добавление)
Хотя данных немного
 
 Top
Мелкий Супермодератор
Отправлено: 23 Мая, 2015 - 22:26:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




LIME, наверное, то же самое, почему у меня у курла разница в полтора раза после добавления юзерагента. Тяжёлый запрос и нагруженный сервис. Попал запрос на другую ноду, у которой сеть загружена меньше и всего делов.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 23 Мая, 2015 - 22:28:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Точно нет
Проверял не 1 раз
Видимо все в совокупности
Ведь сохранение соединения и его разгон тоже должны повлиять
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB