Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Оптимизация кода PHP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget
Честно говоря тест очень "интересный"
 
Например один из тестов:
 
 
 
Добавлено:
afiget
Честно говоря тест очень "интересный"
 
Например один из тестов:
 

Код:
{$test[a]=1;$test[x][y]=1;$test[d][c]=1;$test[a][s]=1;$test[b][n]=1;     }

Он медленее чем другие.
Но это сразу ясно, так как без кавычек и в кавычках - разные вещи.
 
тоже самое недочёты в некоторых других тестах.
 
[b]Mira
Смарти не сильно поможет.
 
А на вопрос "как оптимизировать", невозможно нормально ответить не зная ситуацию.
 
Пример: оптимизировал сайт путём убирания лишних запросов.
Теперь при открытии большинства страниц, конект к базе даже не создаётся.  
Сильно помогло при больших нагрузках, когда на сайт одновремённо лезет несколько тысяч человек.
(просто вместо запроса в бд, беру инфу из файла)
 
Ушло мало времени на это (где то день) но производнительность сильно повысилась.
 

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 17:57 08-05-2007
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
кому впадло разбираться смысл такой
sprintf('%s %s %s %s', $a, $b, $c, $d) работает быстрее чем $a.' '.$b.' '.$c.' '.$d

 
Тесты в студию, плз...
 
Потому-что у меня выходит при 1000000 проходах, что:

Код:
 
$str = sprintf('%s %s %s %s', $a, $b, $c, $d);  
//2.58395004272
 
$str = $a.' '.$b.' '.$c.' '.$d;
//2.11702418327
 
$ta = array($a,$b,$c,$d);
$str = implode(' ',$ta);
//1.95847392082
 

 
Тестировал на различных количествах проходах. Всегда картинка одинаковая.
 
Добавлено:
Так я тестировал (последний тест)
 
 

Код:
 
<?php
$a = '';
$l = 1000;
for ($i = 0;$i<$l;$i++)
    $a.=1;
$b = $c = $d = $a;
 
$it = 1000000;
 
function getmt()
{
    $t=explode(' ', microtime());
    return $t[0]+$t[1];
}
 
$start = getmt();
for ($i=0;$i<$it;$i++)
    $str = sprintf('%s %s %s %s', $a, $b, $c, $d);
print getmt()-$start;
print '<br>';
 
/*----------------------------------------*/
 
$start  = getmt();
for ($i=0;$i<$it;$i++)
    $str = $a.' '.$b.' '.$c.' '.$d;
print getmt()-$start;
print '<br>';
 
/*----------------------------------------*/
 
$ta = array($a,$b,$c,$d);
$start  = getmt();
for ($i=0;$i<$it;$i++)
    $str = implode(' ',$ta);
print getmt()-$start;
print '<br>';
?>
 

 
Результат:
5.37128615379
3.90125608444
2.2708170414

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 21:43 08-05-2007 | Исправлено: Church, 21:47 08-05-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я провел немножко другой опыт.
и результаты те что я написал.
видимо это связано с размерами буфера
 

Код:
 
<?php  
$a = '';  
$l = 1000;  
for ($i = 0;$i<$l;$i++)  
    $a.=1;  
$b = $c = $d = $a;  
 
$it = 1000;  
 
function getmt()  
{  
    $t=explode(' ', microtime());  
    return $t[0]+$t[1];  
}  
 
$start = getmt();  
for ($i=0;$i<$it;$i++)  
    $str = $str. sprintf('%s %s %s %s', $a, $b, $c, $d);  
print getmt()-$start;  
print '<br>';  
 
/*----------------------------------------*/  
 
$start  = getmt();  
for ($i=0;$i<$it;$i++)  
    $str = $str . $a.' '.$b.' '.$c.' '.$d;  
print getmt()-$start;  
print '<br>';  
 
?>  
 

 
4.69573712349
103.09711194
 
оффтопик.
у меня тоже произвольно каким-то образом МНОГО раз уже отправлялась форма,  может это в скрипте на форуме что-то не то? Раньше думал что случайно нажимал на энтер
 
Добавлено:

Цитата:
Результат:  
5.37128615379  
3.90125608444  
2.2708170414

здесь натолько мала разница при выборке(итерации) в
Цитата:
$it = 1000000;  

что я бы сказал что разницы тут особой нету. (хотя нет, все же в дрва раза есть), но это не в 20 же раз как в моем примере.
 
 
Добавлено:
кстати, есть еще предположение, что результат может зависеть и от версии пхп потому что у меня , вот такие вот приблизительно результаты теста Church
 
13.4314501286
10.240350008
10.7193048

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 23:25 08-05-2007 | Исправлено: Mira, 23:32 08-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$start = getmt();  
for ($i=0;$i<$it;$i++)  
    $str = $str. sprintf('%s %s %s %s', $a, $b, $c, $d);  
print getmt()-$start;  
print '<br>';  
 
/*----------------------------------------*/  
 
$start  = getmt();  
for ($i=0;$i<$it;$i++)  
    $str = $str . $a.' '.$b.' '.$c.' '.$d;  
print getmt()-$start;  
print '<br>';  

Ничего не забыл?

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 00:18 09-05-2007
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотелось бы отметить, что на результаты тестов с 1000000 итераций в цикле не стоит слишком полагаться. Это очень синтетическая ситуация.
Отметим лишь, что при 1000 итераций можно получить стабильный перекос в одну сторону, однако при 10000 итераций уже в другую сторону. Это из практики, правда не на таких примерах.  
 
Что касается длины переменных и прочего в плане ручной оптимизации, нам это несколько странно. Кого-то беспокоят длинные переменные? Запустите обфускатор и урежьте их до 4 символов и заливайте в таком виде. По большому счету то же относится и ко всему остальному, кавычки туда сюда и переменные можно вынести автообработкой кода, благо они достаточно предсказуемы. Рискнем ошибиться, но подобное даже где-то видели.  
Поэтому не видим большого смысла обсуждать как руками оптимальнее писать $asgkjhasgkjh.='asf'; или $a.="asf"; , писать в данном случае надо как удобнее и это единственный правильный критерий.

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 00:51 09-05-2007 | Исправлено: edogs, 00:55 09-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mira
Переделал немного твой тест:

Код:
<?php
 
$a = "";
for (
$i = 0; $i < 100; $i++)
{
   
$a .= "1234567890";
}
$b = $c = $d = $a;
$it = 1000;
 
function
getmt()
{
   
$t = explode(' ', microtime());
   return
$t[0] + $t[1];
}
 
function
test_1(&$str, $a, $b, $c, $d) {$str = $str.sprintf(" %s %s %s %s", $a, $b, $c, $d);}
function
test_2(&$str, $a, $b, $c, $d) {$str = $str." ".$a." ".$b." ".$c." ".$d;}
function
test_3(&$str, $a, $b, $c, $d) {$str = $str." $a $b $c $d";}
function
test_4(&$str, $a, $b, $c, $d)  
{
   
$str = <<< EOS
$str $a $b $c $d
EOS;
}
function
test_5(&$str, $a, $b, $c, $d) {$str .= sprintf("%s %s %s %s ", $a, $b, $c, $d);}
function
test_6(&$str, $a, $b, $c, $d) {$str .= $a." ".$b." ".$c." ".$d." ";}
function
test_7(&$str, $a, $b, $c, $d) {$str .= "$a $b $c $d ";}
function
test_8(&$str, $a, $b, $c, $d)  
{
   
$str .= <<< EOS
 
$a $b $c $d
EOS;
}
 
for (
$i = 1; $i <= 8; $i++)
{
   
$str = "";
   
$test = "test_$i";
   
$start = getmt();
   for (
$j = 0; $j < $it; $j++)
   {
     
$test($str, $a, $b, $c, $d);
   }
   echo
"$test: ".(getmt() - $start)." sec<br>\n";
}
 
?>  

Результаты на PHP 4.4.7:

Код:
 
test_1: 3.99002885818 sec
test_2: 31.539577961 sec
test_3: 3.9814620018 sec
test_4: 7.86467289925 sec
test_5: 3.87574887276 sec
test_6: 3.87718582153 sec
test_7: 3.87321209908 sec
test_8: 3.88229703903 sec
 

Результаты на PHP 5.2.2:

Код:
 
test_1: 4.01096987724 sec
test_2: 32.0134160519 sec
test_3: 4.02479505539 sec
test_4: 4.08549690247 sec
test_5: 0.0771570205688 sec
test_6: 0.0782849788666 sec
test_7: 0.0754201412201 sec
test_8: 0.0754628181458 sec
 

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 01:19 09-05-2007
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mira
Приблизительно я понял как работает ваш сайт, оптимизировать конечно всегда можно Просто иногда оптимизация не оправдывает возложенных на нее надежд и вот тогда облом Перейду к сути, если у вас на сайте только SELECT и количество хитов (запросов страничек) в сутки не превышает 50.000 то на хостера надо наезжать, так как такое количество нагрузки он по дефолту должен выдерживать.  
 
Я статику еще и по-другому заюзал, я всю графику перенес на другой сервер, тем самым снизил как трафик (который у этих больных на ум стоит доллар за гиг ) да и на 15 лишних запросов меньше к сайту. Под эти цели можно использовать как бесплатный так и платный с минимальными требованиями хостинг (у меня просто был сервер под статику). Второе что надо сделать так это посмотреть нет ли у вас где-то UPDATE запроса, именно он и является самым громоздким, его зачастую есть смысл сменить простым INSERT в пустую таблицу и раз в 10 минут все содержимое из данной таблицы (которая является по структуре идентично первой) будет обновляется одним махом. Я например на своем сайте что бы не делать постоянного запроса на генерацию прокси листа, а это минимум 1 запрос, ну и в случае фильтра запрос очень усложнялся, сделал следующее, раз в 10 минут я генерирую данный лист и сохраняю в текстовой файл. Тем самым каждый запрос пользователя это уже простое обращение к текстовому документу с преждевременной обработкой (фильтрацией).  
 
Теперь представьте с 50.000 SELECT-ов я сошел на 100 Вот если у вас только данный счетчик и является главным SELECT-ом то можете его обновлять раз в 10 или даже в час (хотя я счетчики не люблю, лучше убрать чужие ) и помешать результат в текстовой файл.
 
Добавлено:
afiget

Цитата:
По поводу оптимизации. http://www.php.spb.ru/php/speed.html  

Статья понравилась но после ее прочтения я пришел к выводу что у меня все сделано наоборот Конечно выносить переменные за пределы текста хорошо, но потом код становится менее читабельным Другое дело можно сначала накодить а потом все перегнать как нужно.  
 
Да и там не указанно главного, эти 25% сколько это времени? Если это 0,00001 секунда то при цикле в 100 я получу такой не значительный прирост что читабельность для меня будет важней. ИМХО я все это буду соблюдать только если:
 
1) Есть экономия памяти (единственное что меня беспокоит).
2) Есть прирост в скорости как минимум на секунду (желательно 2-3).

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 02:10 09-05-2007
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6

Цитата:
Перейду к сути, если у вас на сайте только SELECT и количество хитов (запросов страничек) в сутки не превышает 50.000 то на хостера надо наезжать, так как такое количество нагрузки он по дефолту должен выдерживать

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

Цитата:
Конечно выносить переменные за пределы текста хорошо, но потом код становится менее читабельным

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

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 04:20 09-05-2007
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ничего не забыл?

Нет, ничего не забыл, я же написал что немного переделал.

Цитата:
$str .=  
блин. вот так вот доверяй статьям , а я чуть было не стал переходить на
Цитата:
$str = $str .  


Цитата:
Хотелось бы отметить, что на результаты тестов с 1000000 итераций в цикле не стоит слишком полагаться. Это очень синтетическая ситуация.  

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

не привышало... где то было в том районе
я уже писал, все было ничего, но я сделал глупость, заплатил за год вперед (а это плохая примета в моем случае , не поверите, через день хостер сменил датацентр, и как потом выяснилось вместо одной сильной машины взял две немного послабее, и началось, сейчас в экстренном режиме меня перевели на ВВС(VPS). Но я думаю проблема была в каком-то модуле, никто мне не подсказал его названия, который , если не ошибаюсь, подставлял вместо урла найденый файл. Вызяснил это путем анализа, перестал работать modrewrite, на половину. Хостер увы мне в этом не помог. Так вот
^news/(a)/(b)/(s)/$ /news.php?a=$1... (очень упросил) , не обрабатывал правило это а по урлу ..../news/a/b/s/ просто вызывал файл news.php . Модрерайт заработал как только я переименовал файл news.php в newss.php. Вот и думаю что основная нагрузка пошла из за этого.  
 

Цитата:
UPDATE запроса, именно он и является самым громоздким

спасибо, не знал, а как тогда оценивать кол-во просмотров страницы, че делать кучу инсертов в одной таблице потом пересчитывать их и апдейтить .... Хм... сомнительно...
Цитата:
50К хитов не так мало, на каждую страницу вполне может быть допустим 20 запросов, а если вспомнить что некоторые select могут быть весьма долгими, то мы бы воздержались от таких безаппеляционных заявлений по поводу наездов.  
Вы хостингом не занимаетесь? Такое ощущение что наступили на больной мазоль )
Цитата:
От привычки зависит Для нас более читабельно когда оно снаружи, опять же более четко структурирован код тогда, ясно что текст это только текст.  
Как показывают тесты, надо оставаться при своем, а то не все далеко однозначно....  
 
Спасибо всем за диалог и советы.
 

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 08:47 09-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Нет, ничего не забыл, я же написал что немного переделал.  

Ты во втором тесте использовал ту же переменную, а она уже содержала более 4мб данных, из-за этого результаты второго теста были завышены боле чем в 3 раза.
Нужно было очистить переменную перед вторым тестом.

Цитата:
Второе что надо сделать так это посмотреть нет ли у вас где-то UPDATE запроса, именно он и является самым громоздким

Дело обычно не в том что UPDATE (к INSERT это тоже относится, только INSERT выполняется значительно быстрее, т.к. для него не делается выборка) громоздкий, а в том что для MyISAM таблиц при апдейте используется блокировка таблиц (т.к. MyISAM не поддерживает транзакции) и всем остальным запросом приходится ждать выполнения этого запроса. Но использовать отдельную таблицу для этого, имхо - это крайняя мера, нужна только если ОЧЕНЬ часто используются апдейты. Если этот UPDATE не критичен, то можно использовать LOW_PRIORITY      для него или вместо MyISAM использовать движок InnoDB.

Цитата:
 
2) Есть прирост в скорости как минимум на секунду (желательно 2-3).
 

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

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 12:55 09-05-2007 | Исправлено: sTa1kEr, 12:56 09-05-2007
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mira

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

Речь о том, что результат теста - очень синтетический, чем больше итераций в цикле - тем более он синтетический.
То что цикл с кодом на 100000 раз у Вас выполнится быстрее, не значит что этот же код выполненный один раз так же будет быстрее. А может даже наоборот, вдруг нечто вроде кэширования еще включается?

Цитата:
Вы хостингом не занимаетесь? Такое ощущение что наступили на больной мазоль  

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

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

Не согласимся с тэзисом что инсерт лучше апдейта, однако ответим на этот вопрос.  
Во-первых количество просмотров можно брать из апаче лога и апдейтить раз в день
Во-вторых, мы делали очень смешно на посещаемых ресурсах - с вероятностью 1/10 увеличивали счетчик просмотров на +10. Получалось очень душевно. Ещё пробовали вариант считать каждый хит за 10 каждую десятую минуту.
 
Добавлено:
sTa1kEr

Цитата:
Имхо, тут в лучшем случае будет прирост на тысячные доли секунды даже для большого движка.  

+1.
Вынос в оптимизированной нюке (preg-ами) $admin[0] за пределы кавычек "" не показал вообще каких-либо результатов, ни в + ни в - (пробовали в свое время).
Даже если '.$a.' даст 25% производительности, надо же не забывать что эта операция протекает ничтожные доли секунды. Если запрос в скл (допустим) выполняется 0.002 секунды, а формирование строки для запроса будет выполнятся 0.00001 секунды, то стоит ли пищать от радости когда из 0.00001 получилось 0.0000075 секунды? Все равно в предел погрешности уложиться в результате.  
 
Добавлено:
 
 
Вот вспомнили про еще одну вещь в плане оптимизации.
Работа с файлами - все функции - include/file_exists/readdir и т.д., они как бы занимают изрядное время.
При том иногда считать файл дольше чем выполнить один запрос.
Поэтому мы попытались по мере возможности от них избавиться и эксперимент дал очень неплохие показатели. (использовали в нашем клоне нюки).
Что значит делали
1) В нюке подключаются "блоки" - типа отдельные куски пхп-кода, подключаются инклудом на выполнение. В админской части берем все блоки которым нужно выполняться, вырезаем из них лишние комменты, пустые места и т.д. и записываем их в файл.
2) В нюке используется куча функций file_exist. Но они идут в предсказуемые места. В админской части заранее сканим директории, и заносим их в файл.
Все пункты выше - на самом деле они пишуться в один файл, который в начале считывается один раз и дальше данные беруться из него.
Все вышесказанное ускорило нашу нюку ещё примерно на 25%, что считаем очень неплохим результатом.
 
ещё один очень забавный эффект, связанный с использованием памяти. (кстати memory_get_usage рулит). фишка в том, что при инклуде файла, даже если в файле всего лишь описаны функции, жрется до фига памяти, не... вот так - ДО ФИГА памяти.
Что мы сделали - опять же - все большие и мало используемые функции вынесли из функций, в функциях оставили только
function ($a) {include(file);}
Получилось нечто вроде code on demand
после чего используя сказанное выше о работах с файлами - и инклуд заменили на eval.  
Это еще дало где-то 10% к скорости нюки и сэкономило где-то 25% памяти, что тоже считаем хорошим результатом.
 
Безусловно все это вышесказанное оно применимо не ко всем ситуациям, но иметь ввиду стоит.

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 14:03 09-05-2007 | Исправлено: edogs, 14:26 09-05-2007
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
Если переменные в строке, то это:
1. удобнее для программера в момент первого написания кода (нет лишних знаков).
 
Если переменные выносятся из строки, то это:
1. ускорит обработку кода транслятором;
2. лучше для анализа и изменения кода благодяря подсветке синтаксиса (особенно неавтору);
 
ИМХО, 2-е перекрывает первое.
 
Что касается скорости, то прирост сказывается при увеличении нагрузки на сервер. Оптимизация кода позволяет увеличить масштабируемость вэб-сервера. Обидно, когда достаточно памяти для создания нового клиентского соединения, но процессор загружен настолько, что не успевает обслужить это соединение.
----
Кстати, использование большоо кол-ва итераций (1000000) не только позволяет увидеть разницу в скорости, но и приблительно оценить масштабируемость без увеличения кол-ва запущеных процессов.
Поэтому синтетика тестов проявляется только в том, что обрабатывается 1 процесс, а не 100. Несомненно, 100 запущеных скриптом показали бы более реальную картину, но существенно усложнили бы код теста. Кроме того, этот тест нельзя было бы запустить на некоторых хостингах из-за ограничений хостеров.
---
И еще. Я повторюсь: тест старый, результаты получены на старой версии PHP. С того времени некоторые "плохие" вещи из теста, стали "хорошими". К сожалению, я сейчас не могу найти статью, в которой показали что именно улучшили в PHP и какие именно конструкции стали обрабатываться быстрее.
Желающие (у кого установлены 3, 4 и 5 версии PHP) могут сами прогнать тест и поделиться с нами результатами.
Я бы с удовольствием почитал такие отзывы.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 14:36 09-05-2007
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget

Цитата:
благодяря подсветке синтаксиса (особенно неавтору);  

Zend Studio подсвечивает переменные и внутри кавычек тоже

Цитата:
Кстати, использование большоо кол-ва итераций (1000000) не только позволяет увидеть разницу в скорости, но и приблительно оценить масштабируемость без увеличения кол-ва запущеных процессов.

Согласны. Но для этого надо итерировать скрипт целиком, а лучше запускать сам скрипт 100000 раз, а не запускать выполнение одной строчки кучу раз и делать из этого выводы.

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 14:42 09-05-2007
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
фишка в том, что при инклуде файла, даже если в файле всего лишь описаны функции, жрется до фига памяти, не... вот так - ДО ФИГА памяти.  
Что мы сделали - опять же - все большие и мало используемые функции вынесли из функций, в функциях оставили только  
function ($a) {include(file);}

include или include_once
?
Может быть в коде действительно авторы допустили грубую ошибку?
 
Добавлено:

Цитата:
Zend Studio подсвечивает переменные и внутри кавычек тоже

Даже если в имени переменной была допущена ошибка (русская раскладка и литеры, имеющие одинаковое написание с английскими)?

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 14:42 09-05-2007
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
afiget

Цитата:
include или include_once  
?  
Может быть в коде действительно авторы допустили грубую ошибку?  

Да нет, просто Вы 2 разные вещи в одну цитату слили, а мы лишь примерно показывали о чем речь
Покажем на примере, 1-ая это избавление от лишних инклудов, а 2-fz избавление от лишнего кода.
Ну пример

Код:
 
inlucde("block1.php");
inlucde("block2.php");
...
inlucde("blockf.php");
...
function abazaba() {
... до фига строк, функция может и не вызываться
}
 

Дык вот 1-ое о чем говорилось это заранее подчистив закэшировать  все содержание blockX в 1 файл, вначале скрипта считать его, и eval-ить уже его куски.
А 2-ое о чем говорилось, это что содержимое функции abazaba есть смысл вынести из каждый раз исполняющегося кода функцию которая может и не вызываться... а вот с УЧЕТОМ 1-ого - ее есть смысл подключать не инклудом (инклудом_онс если быть точными) а точно так же евалом.
 
Добавлено:

Цитата:
Даже если в имени переменной была допущена ошибка (русская раскладка и литеры, имеющие одинаковое написание с английскими)?

Не, такое не подсвечивает. Но откуда возьмется русская раскладка в коде?

Всего записей: 1778 | Зарегистр. 25-07-2004 | Отправлено: 14:56 09-05-2007
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Желание все прокомментировать но нет ни времени не столько энергии (уже спать пора ) Так что если про кого забыл сори, начнем-с
 
Mira

Цитата:
я уже писал, все было ничего, но я сделал глупость, заплатил за год вперед (а это плохая примета

Вот это действительно большая ошибка, я даже своим хостера раньше платил раз в 3 месяца и они имели особенность после первого возмущаться придумывать разные поводы по которым мой движок надо было вырубать без предупреждения на сутки. Теперь правда получу в двое а юзаю тоже количество ресурсов (просто что бы не доставали) но раз в месяц, да я теряю 5 долларов скидки но зато они перед каждым отключением задумываются, а может это и будет сейчас последней каплей и он уйдет к другим?
 
edogs

Цитата:
50К хитов не так мало

Смотря для какого сайта, вот к примеру есть ресурс который при каждом запросе генерирует тумбы для фоток в заданной директории, вот такой скрипт например грузит проц на 80% а другой сайт чистая статика (html) такого трафа на одном сервере я в день например около 3.000K (хитов конечно а не юников ) выдерживаю (там кроме меня еще много других пользователей )

Цитата:
То что цикл с кодом на 100000 раз у Вас выполнится быстрее, не значит что этот же код выполненный один раз так же будет быстрее. А может даже наоборот, вдруг нечто вроде кэширования еще включается?

+1 Вы как раз сказали то что я пытался выразить в своем посте но не смог Ко всему прочему надо добавить ваш следующий комент в котором ясно показано что 0.00001 секунда делов не делает
 
afiget

Цитата:
2. лучше для анализа и изменения кода благодяря подсветке синтаксиса (особенно неавтору);  

Здесь тоже не согласен, все зависит каким GUI вы пользуетесь, я например PhpED и там переменные в "" отображаются другим цветом, а если их поместить {} как и требуется в большинстве случаев (если работаем с элементом массива) то он вообще принимает цвет идентичный переменной вне текста. При этом мне не надо проверять не забыл ли я где-то ".".
 
п.с. Если вы пока еще не пробовали PhpED советую попробовать, в последней версии подсветка реализована на таком уровне что ошибиться даже невозможно. Но это уже отдельная тема.
 
Если кто предложит действительно ценный совет как мне можно сэкономить время или память то я буду ему признателен. (пытался одно время удалять за собой присваивав переменным nil и используя unset но реальной прибавки не было )

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 15:53 09-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6

Цитата:
Если кто предложит действительно ценный совет как мне можно сэкономить время или память то я буду ему признателен. (пытался одно время удалять за собой присваивав переменным nil и используя unset но реальной прибавки не было )

Намедни понадобилось тоже сделать валидацию проксиков (правда мне без разницы анонимный или нет проксик). Делать псевдомногопоточность как-то не охота было, по этому реализовал при помощи stream функций работу с одновременной работой любого количества потоков. Имхо, получилось достаточно эффективно, соединение с проксиком происходит асинхронно, т.ч. ждать соединения не приходится - конектимся сразу ко всем. А при помощи stream_select запросы шлем и получаем тем проксикам которые готовы принимать/отправлять данные, пока остальные коннектятся. Выкладываю рабочий класс, мб пригодится?
ProxyChecker
Сами проксики бессовестно стащил с вашего сайта

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 15:15 14-06-2007
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr
Большое спасибо за исходник, действительно оригинальный подход. Как я подозреваю он должен дать высокий КПД. Надо будет изучить ваш исходник от корки до корки

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 21:32 14-06-2007
leosart



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите пожалуйста, что быстрее обрабатывается и создает меньшую нагрузку на сервер, ну или хотя бы что лучше или корректней использовать:
1. echo или print
2. require или include (для отображения статичных блоков сайта: меню, рекламные блоки и т.д.)
3. вся страница на html и в 3-7 местах вставки php, или вся станица на php и вывод html-кода через echo или print

Всего записей: 135 | Зарегистр. 05-07-2010 | Отправлено: 22:59 20-03-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
leosart

Цитата:
echo или print  

вы так часто ими пользуетесь, что даже если и будет разница в миллисекунды, то она скажется??
echo может принимать несколько "аргументов":
echo 1,2,3;
а print только один.
в то же время print может использоваться как функция, а echo нет.
 

Цитата:
require или include (для отображения статичных блоков сайта: меню, рекламные блоки и т.д.)  

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

Цитата:
вся страница на html и в 3-7 местах вставки php, или вся станица на php и вывод html-кода через echo или print

в принципе - первое, так как все, вне вставок, будет проигнорировано php интерпретатором

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:06 20-03-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » Web-программирование » Оптимизация кода PHP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru