Наверное Offtopic: Есть ли в пхп оптимизация?

saa

Guest
Резюмируем: лучшая оптимизация пхп это быстрый проц и много памяти. ( :) Прям по Гейтсу)
Как показывает практика от извращений с оптимизацией страдает универсальность кода и возможность его повторного использования. Можете меня ругать, но я пришел в результате к использованию PEAR во многих вопросах. И стараюсь создавать PEAR'о- подобные структуры классов. Как это не гиморно зато потом универсальность кода все оправдывает.
 

Demiurg

Guest
а вы вообще уверены, что count что -то вычисляет ?
Кто знает внутренности маассива в php ? Может там размер массива хранится отдельно ?

Преждевременная оптимизация - зло.
 
tony2001
Не, я не перепутал...
Мне интересно: в интерпретаторе пхп есть ли оптимизации, ну, например, математические?

-~{}~ 09.07.04 15:29:

Demiurg
а вы вообще уверены, что count что -то вычисляет ?
Кто знает внутренности маассива в php ? Может там размер массива хранится отдельно ?
И я о том же...
 

su1d

Старожил PHPClubа
если не ошибаюсь, размер массива РНР хранится в структуре zval, а не вычисляется каждый раз.
точно так же, как и длина строки, что,кстати, делает вызов strlen() в РНР намного "дешевле" такого же в Ц.

поэтому в данном случае экономия происходит лишь за счёт отказа от вызова функции: занесения параметров в стэк и выполнения перехода на другую область кода.

возможно ещё, что помимо этого происходят какие-то внутренние фишки-подвижки в зенд-движке, но они тоже по идее не должны занимать много времени.
 

tony2001

TeaM PHPClub
>поэтому в данном случае экономия происходит лишь за счёт отказа от вызова
>функции: занесения параметров в стэк и выполнения перехода на другую область кода.
ага.
 

su1d

Старожил PHPClubа
глянул в исходник:
Zend/zend_hash.h:60
Код:
typedef struct _hashtable {
	...
	uint nNumOfElements;
...
 

fixxxer

К.О.
Партнер клуба
У лошадки еще много конопли. :)

Объясняю на пальцах. Про оптимизирующие компиляторы.

1.c
PHP:
#include <stdio.h>
void main()
{
int i;
char *s=(char *)strdup("Foo");
for (i=0; i<strlen(s); i++) {
  if (i==1) s[i]=0;
  printf("%d %d\n",i,s[i]);
}
free(s);
}
2.c
PHP:
#include <stdio.h>
void main()
{
int i,c;
char *s=(char *)strdup("Foo");
for (c=strlen(s),i=0; i<c; i++) {
  if (i==1) s[i]=0;
  printf("%d %d\n",i,s[i]);
}
free(s);
}
$ gcc -O3 1.c && ./a.out
PHP:
0 70
1 0
$ gcc -O3 2.c && ./a.out
PHP:
0 70
1 0
2 111
Как видишь, компилятор никакой фигни не наделал. В отличие от твоих фантазий.
 

su1d

Старожил PHPClubа
господа, лучше б вы учились оптимизировать структуру и запросы к БД =)
выигрыш от этого будет значительно больше
 

voland

Guest
fixxxer
voland
см. мой пост
Если, честно, ничего так и не понял...
----------------------------
Аа..... Семен Семеныч :):):)...
Сорри, просто пока писал верх, появились ещё посты
Теперь понял.
 

SiMM

Новичок
2Loshadka: однако, отменная у вас травушка - почитайте для начала чтоли ман по [m]microtime[/m] - ибо используете вы эту функцию совершенно неправильно.
hint: ваш вариант может давать даже отрицательный результат. Да и точность у неё - не то, чтобы до целого, а наоборот ;)
 

valyala

Новичок
Хотелось бы сказть пару слов насчет оптимизации алгоритмов в исходных текстах РНР. tony2001 знает, о чем я :)
http://phpclub.ru/talk/showthread.php?threadid=44675 - почитайте этот топик. Вас никогда не интересовало, почему implode() в РНР работает медленнее, чем просто цикл for(), выполняющий ту же работу? А меня заинтересовало. И я нашел ответ, который можно почитать вот тут:
http://news.php.net/php.internals/10875
Но, что самое интересное, никто из разработчиков РНР даже не обратил внимания на мой пост. А ведь там требовалось всего лишь заменить две строчки на одну.
Делайте выводы, господа :)
 
SiMM
Спасибо - почитал. Очень познавательно, а то я думаю: "Почему у меня иногда, действительно, отрицательный результат?" ( Я microtime() использовал по аналогии с mktime()
- даже не догадался в ман глянуть )
fixxxer
Да, спасибо, я понял, что при изменнении массива в теле цикла может измениться логика программы.( как было сказано выше Maxim Matyukhin )
All
Опримизаций - нет?
З.Ы. Как узнали про коноплю?
 

tony2001

TeaM PHPClub
valyala
>Но, что самое интересное, никто из разработчиков РНР даже не обратил внимания на мой пост.
ты, впрочем, на них тоже внимание не обратил.

>Делайте выводы, господа
о тебе уже сделали вывод в php.internals, если ты не понял.
 

Crazy

Developer
Автор оригинала: Loshadka
Например, компиляторы этот код оптимизировали бы...

Как правило -- нет. Ибо у компилятора нет данных, позволяющих определить, что каждый вызов функции будет возвращать одно и то же значение.
 

.des.

Поставил пиво кому надо ;-)
Например, компиляторы этот код оптимизировали бы...

Компиляторы могут оптимизировать данный код и как правило делают это. Многие из них в состоянии понять изменяется ли в цикле строка. Многие компиляторы заглядывают и в функции, чтобы удостовериться, что возвращаемое значение зависит только от аргументов.
так что подобный код очень часто бывает сооптимизирован:
Код:
for(i=0; i < strlen(s); i++) v += s[i];
2Loshadka
другое дело что к php это никакого отношения не имеет -> в смысле не должно особо волновать.
В php гораздо более полезны оптимизирующие техники другого уровня. Например copy-on-write, без нее кстати большая часть всего существующего кода серьезно бы потеряла в эффективности.
 
All
Всем спасибо за ответы - узнал много нового и кое-чему научился...
 
Сверху