|
|
|
| Доброй ночи!
Проблемка.....
Я читаю содержимое страницы любыми функциями чтения (fopen, file_get_contents, file и т.д.).... Страница читается пол секунды. Если открываю через сокет - 5-15 секунд =(( Почему это происходит? И как с этим бороться?
___
P.S. Нужно обязательно через сокет. | |
|
|
|
|
|
|
|
для: Sfinks
(27.10.2005 в 22:56)
| | А где расположен скрипт и как он читает? Какокова структура читаемого документа - много в нём строк? | |
|
|
|
|
|
|
|
для: cheops
(28.10.2005 в 13:03)
| | Расположен скрипт на hostvit.ru, а от структуры документа это никак не зависит.... Читать можно любую страницу. Вот для примера:
Через file_get_contents: http://dimok.hostvit.ru/temp/read_get_contents.php
<?php
$text = file_get_contents("http://softtime.ru/forum/");
echo $text;
?>
|
Через сокет: http://dimok.hostvit.ru/temp/read_socket.php
<?php
$host = "softtime.ru";
$path = "/forum/";
$fp = fsockopen($host,80,$errno,$errstr,30);
if(!$fp) exit("$errstr ($errno)");
else
{ $headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $host\r\n\r\n";
fwrite($fp,$headers);
while($text != "\r\n") $text = fgets($fp,128);
$text = "";
while(!feof($fp)) $text .= fgets($fp,4096);
fclose($fp);
}
echo $text;
?>
|
.....попробуйте открыть эти ссылки, увидите разницу. | |
|
|
|
|
|
|
|
для: Sfinks
(29.10.2005 в 22:31)
| | Скорее всего ничего нельзя сделать, ведь fgets читает построчно, т.е. грубо говоря, если в файле имеется 100 пустых строк, то скрипт 100 раз запросит сервер, чтобы возвратить в каждом пакете по переводу строки... file_get_contents() лишена этого недостатка - она берёт информацию кусками такого размера, который может проглотить сервер. Чтобы ускорить процесс следует отказываться от fgets(). | |
|
|
|
|
|
|
|
для: cheops
(30.10.2005 в 14:15)
| | Нет, и все-таки тут дело в версии протокола!
Я написал небольшой тестовый скриптик (в аттаче), который загружает одну и ту же страницу и измеряет время загрузки.... И вот результат:
loadeded by file() at 1.5484919548 sec
loadeded by file_get_contents() at 1.58789205551 sec
loadeded by fopen(), fgets() at 1.43689703941 sec
loadeded by HTTP/1.0 at 1.35386395454 sec
loadeded by HTTP/1.1 at 6.26839089394 sec
|
А вот почему такое происходит, интересно было бы узнать!
___
P.S. Запустить скрипт можно на http://dimok.hostvit.ru/temp/load_test.php | |
|
|
|
|
|
|
|
для: Sfinks
(30.10.2005 в 16:06)
| | Хм... мне тоже интересно :))) | |
|
|
|
|
|
|
|
для: cheops
(28.10.2005 в 13:03)
| | Хм.... А вот если написать "GET $path HTTP/1.0\r\n", то, кажись, быстрее загружает.....
Может от этого зависеть? :-/
В чем разница? | |
|
|
|