Упростить/ускорить выполнение скрипта

Pegas

Новичок
Упростить/ускорить выполнение скрипта

есть функция. когда она выполняется в цикле - это заметно нагружает сервак. можно ли облегчить сервак при выполнении функции, внеся в нее необходимые поправки (упростить, ускорить выполнение...)? Если да, не подскажите вариант? Заранее благодарен.
PHP:
function check_coding($uin, $url, $date)
  {
  $file=fopen("http://".$url, "r");
  if (!$file)
    return false;
  while (!feof($file))
    {
    $line=fgets($file, 4096);
    $str=stristr($line, '<!--coding');
    if (strlen($str)!==0)
      {
      preg_match("/<!--coding([0-9]*)-->/", $str, $matches);
      break;
      }
    }
  return $matches[1];
  }
 

Pegas

Новичок
примером в доках :) я знаю что это количество байт. не связан этот вопрос с
Замечание: Параметр length стал необязательным, начиная с PHP версии 4.2.0. Если этот параметр опущен, длина строки принимается за 1024. С версии PHP 4.3, отсутствие параметра length будет приводить к чтению потока до конца строки. Если длина большинства строк в файле превышает 8 килобайт, наиболее эффективным решением в отношении ресурсов, используемых скриптом, будет указание максимальной длины строки.
в принципе параметр не нужен. я не видел еще длину строки html-файла выше 1кб. также могу сказать, что на серваке версия пхп 4.4.4
 

whirlwind

TDD infected, paranoid
Разбей на две функции: одна получает контент, вторая парсит. Посмотри профайлером что выполняется медленно. В первой возможно придется как то оптимизировать получение контента, во второй избавься от регулярки.

ЗЫ. по крайней мере сделай так, что бы регулярка выполнялась один раз. Это поможет, если нужно парсить не мегабайтные файлы.
 

Фанат

oncle terrible
Команда форума
whirlwind
а ты так, сразу догадаться не можешь, какая часть дольше выполняется?
В первой возможно придется как то оптимизировать получение контента
КАК?
, во второй избавься от регулярки.
ответ на грани фантастики.


Pegas
и сколько же раз выполняется эта функция, что сервак ужасно тормозит?
 

whirlwind

TDD infected, paranoid
> КАК?
закешировать+keepalive


PHP:
$line="ururu bumbumbum <!--coding123--> blablabla"; 
if ( ($str=stristr($line, '<!--coding')) )
	echo intval(substr($str,10));
 

Фанат

oncle terrible
Команда форума
whirlwind
ты хорошо подумал?
по-моему, ты не понял сути вопроса. которой кэширование совершенно противоположно
 

whirlwind

TDD infected, paranoid
Фанат по моему это ты не понял про какое кеширование я говорю.
 

Pegas

Новичок
Фанат, если 20 проходов - на 1-2 минуты сервак встает. зайти на сайт, который на этом серваке невозможно. пока вижу только одно решение - вынести на отдельный сервак скрипт и пускать кроном.
 

alpine

Новичок
Pegas
пока вижу только одно решение - вынести на отдельный сервак скрипт и пускать кроном.
Мда, зрение у тебя слабое похоже, так как тебе решение написали.
 

tolst

Новичок
Тьфу, может быть твой серв стоит на канале диалапа? =)))))


Во первых, избавься от fopen, юзай в этом случае
implode("", file("http://".$url));
 

phprus

Moderator
Команда форума
Pegas
Вместо связки implode - file лучше использовать функцию [m]file_get_contents[/m].
 

Фанат

oncle terrible
Команда форума
tolst и phprus, вы несёте бред.
точно так же, как и whirlwind
 

Фанат

oncle terrible
Команда форума
блин, когда же эти люди головой думать начнут, а не местом, откуда у них руки растут?
чувак последовательно опрашивает скриптом 20 сайтов.
скорость работы этого скрипта зависит от СКОРОСТИ ИНТЕРНЕТ СОЕДИНЕНИЯ с этими сайтами.
Что тут предлагать?! Такие же потуги, как предлагают выше - ускорять скорость парсинга, который и так занимает 1 процент?
советовать сменить хостинг? Я тебе и так скажу, что менять никто ничего не будет - люди, у которых есть деньги на нормальный, не страдают такой фигнёй.
 

Pegas

Новичок
Автор оригинала: Фанат
блин, когда же эти люди головой думать начнут, а не местом, откуда у них руки растут?
чувак последовательно опрашивает скриптом 20 сайтов.
скорость работы этого скрипта зависит от СКОРОСТИ ИНТЕРНЕТ СОЕДИНЕНИЯ с этими сайтами.
Что тут предлагать?! Такие же потуги, как предлагают выше - ускорять скорость парсинга, который и так занимает 1 процент?
советовать сменить хостинг? Я тебе и так скажу, что менять никто ничего не будет - люди, у которых есть деньги на нормальный, не страдают такой фигнёй.
вот теперь я получил ответ. фанат, сенкс.
 

master_x

Pitavale XXI wieku
Pegas
а для точности можно просто взять и запрофилировать скрипт. искать по "профайлинг php xdebug". после этого вопросов не останется.
 

Фанат

oncle terrible
Команда форума
master_x
ты действительно считаешь, что там есть, что профилировать?
Нет, я понимаю, конечно, что так теоретически правильнее. И сам часто стоя за то, чтобы человек точно выяснил сначала.
Но уз здесь-то случай такой вопиющий, что надо ж соображать и без профайлинга
 

hermit_refined

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

Wicked

Новичок
Во-первых, стоит подумать в сторону многопоточности. Например, подошло бы использование curl_multi, но его, я так понимаю, в 4.4.4 нету.

Во-вторых, твой скрипт может так тормозить не только из-за скорости Интернета, но и потому что удаленный(ые) сайт(ы) долго генерируют ответ. Если ты ими заведуешь, то следует посмотреть, можно ли (и нужно ли) там что-то оптимизировать.
 
Сверху