Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Давайте поговорим об оптимизации PHP-скриптов, советы,примеры,рекомендации,обмен опытом 
:(
    Опции темы
Black
  Дата 7.12.2004, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 7
Всего: 45



Значит, этот топик посвещен оптимизации скриптов на PHP. Вот что я могу сказать по этому вопросу:

1) Лучше использовать echo для вывода HTML-кода, чем sprintf. А еще лучше HTML-код выводим за пределами PHP-кода.

Код

<HTML-CODE>
<? PHP_CODE  ?>
<HTML-CODE>


2) Нужно попытаться не использовать регулярные выражения, а попытаться найти стандартную функцию языка PHP, а если уж стандартной функции не существует для вашего случая, то тогда лишь использовать рег выражения.

3) Лучше сравнение большого количества информации проводить через массивы. Например, когда вы из введенного пользователем текста отсеиваете коды смайликов, заменяя их (коды) на пути к картинкам. В данном случае через массивы будет намного быстрее, чем просто в наглую менять в строке коды по очереди, тогда и скрипт зазрастется до невиданных размеров, т.к. строк будет много, а здесь сравнение в одну строку (не считая конечно задания самого массива данных).

4) Для многократных операций используем циклы for, while, для операций с большим количеством условий используем switch-case.

5) Используем только БД, например MySQL. Забудем о файлах. Причины: слишком большой код, много глюков, возможность совершить ошибку и наконец слишком это все муторно. Плюсы БД: быстро, легко, удобно, понятно, нет глюков (если сам их не сделаешь).

6) Чем меньше переменных в скрипте, тем меньше требуется памяти. Поэтому если переменная больше не нужна, а дальше по ходу скрипта необходима еще новая переменная, то присваимаем ей имя предыдущей. Так мы экономим память сервера :-) И нас возножно не выкинут с хостинга за нагрузку.

7) Еще я так понимаю, чем меньше размер скрипта (в Кб), тем быстрее он работает, т.к. PHP проходит по всем строчкам и чем их меньше, тем быстрее выполниться скрипт.

Например (условие скрипта: должен быть выполнен только один код в {} все остальные должны вернуть false, т.е. не пройдет проверка на сравнение, т.е. у нас в скрипте, как бы вложенные модули, которые активируются в зависимости от $что-то):

Код

if ($что-то==чему-то) { делаем то-то }
if ($что-то==чему-то) { делаем то-то }
If ($что-то==чему-то) { делаем то-то }
if ($что-то==чему-то) { делаем то-то }
if ($что-то==чему-то) { делаем то-то }


Я так понимаю, что данный скрипт будет выполняться дольше, чем если бы мы эти модули (т.е. те действия которые происходят за {} после проверки равенства) мы разместили в отдельных файлам и файл бы занимал не 100 КБ, а например только 20 Кб. Если я не прав, то поправьте меня.

Жду ваших предложений об оптимизации скриптов.

Это сообщение отредактировал(а) PHP-DIRECTOR - 7.12.2004, 00:08


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Mal Hack
Дата 7.12.2004, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



1. Один раз print или echo для сгенерированной переменной. В переменной - весь гипертекст страницы.
2. Тут можно долго распинаться... Да, если можно сделать что-то без рэгов, то лучше делать без них, а если и делать, то предпочтительнее Perl регулярки. Быстрее тобишь.
3. Не совсем понял... Если ты заменяешь смайлы, к примеру, то ИМХО оптимальный вариант это - рэгом достаем все смайлы, тобишь :<smile>: (берем уникальные), берем это в массив, и заменяем в цикле, но заменяем рэгами и с использование call_back функции, которая будет возвращать путь к файлу...
4. А как иначе-то smile switch еще удобно применять в целях безопасности smile
5. yes it is...
6. Само собой... но скажем так... Использование переменных должно быть разумным...
7. Ну в принципе да, но я бы все-таки на размер файла не обращал внимания, поскольку слишком большой - является следствием большого объема, кода, а следовательно не до конца продуманного алгоритма или его левой реализацией.

Цитата
Например (условие скрипта: должен быть выполнен только один код в {} все остальные должны вернуть false, т.е. не пройдет проверка на сравнение, т.е. у нас в скрипте, как бы вложенные модули, которые активируются в зависимости от $что-то):

Да, но так надо делать для моделей..
Чем меньше файлов подключаешь, тем быстрее...

от себя хочу добавить, что if лучше бывает заменить на
$var = ( <expr> ) ? true : false;
И еще, лучше не делать лишнего с возвращаемыми значениями функциями... тобишь:
$test = "asda";
return $test;
Лучше:
return "asda";

PM ICQ   Вверх
Opik
Дата 7.12.2004, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



1) Я например ваще Smarty юзаю smile
PM MAIL Skype   Вверх
IZ@TOP
Дата 7.12.2004, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



1) Юзаю свой шаблонизатор smile
2) Еще добавлю, что если без них не получается, можно попробовать пересмотреть задачу, и возможно найдется другое, более мудрое решение поставленной задачи.
3) Смайлы? Это ты о чем? Как на этом форуме? Тогда проще всего юзать такой код (100% экономия производительности):
Код

<?php
// ...

$Content->Out    = str_replace(
   array(':D', ':p', ';)',),
   array('<img src="/i/s1.gif">', '<img src="/i/s2.gif">', '<img src="/i/s3.gif">',),
   $Content->Out
);

// ...
?>

Добавлено @ 09:33
На счет остального согласен, но на счет 7го пункта неуверен.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Secandr
Дата 7.12.2004, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



Цитата(PHP @ 7.12.2004, 01:03)
Лучше использовать echo для вывода HTML-кода, чем sprintf. А еще лучше HTML-код выводим за пределами PHP-кода.

Если у тебя большой код, то он становится совершено нечитабельным и исправить ничего нельзя!

Цитата(PHP @ 7.12.2004, 01:03)
2) Нужно попытаться не использовать регулярные выражения, а попытаться найти стандартную функцию языка PHP, а если уж стандартной функции не существует для вашего случая, то тогда лишь использовать рег выражения.

Если стандартной функции не существует нужно ещё раз подумать, может всё таки регулярные выражения не нужны...
Цитата(PHP @ 7.12.2004, 01:03)
Используем только БД, например MySQL. Забудем о файлах. Причины: слишком большой код, много глюков, возможность совершить ошибку и наконец слишком это все муторно. Плюсы БД: быстро, легко, удобно, понятно, нет глюков (если сам их не сделаешь).

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

Цитата(PHP @ 7.12.2004, 01:03)
Чем меньше переменных в скрипте, тем меньше требуется памяти. Поэтому если переменная больше не нужна, а дальше по ходу скрипта необходима еще новая переменная, то присваимаем ей имя предыдущей. Так мы экономим память сервера :-) И нас возножно не выкинут с хостинга за нагрузку.

не пробовал, так что тяжало сказать.
Ещё полезно чистить переменые до и после испоьзования.
Цитата(PHP @ 7.12.2004, 01:03)
Еще я так понимаю, чем меньше размер скрипта (в Кб), тем быстрее он работает, т.к. PHP проходит по всем строчкам и чем их меньше, тем быстрее выполниться скрипт.




--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
skalex
Дата 7.12.2004, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: 8
Всего: 23



Было бы неплохо, чтобы кто-нибудь высказал свои соображения по поводу объектно-ориентированных особенностей php...
PM   Вверх
Sardar
Дата 7.12.2004, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



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

Цитата(Mal @ 6.12.2004, 23:44)
. Один раз print или echo для сгенерированной переменной. В переменной - весь гипертекст страницы.

Не очень хорошо, лучше использовать стандартную буфферизацию, а еще лучше сделать стандартный буффер в 2-4 кб, что бы уходило постепенно.

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


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Mal Hack
Дата 7.12.2004, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата
Не очень хорошо, лучше использовать стандартную буфферизацию, а еще лучше сделать стандартный буффер в 2-4 кб, что бы уходило постепенно.

Я тебя не совсем понял по поводу буферизации. что конкретно ты имеешь ввиду? ob_*(); ??
А зачем нагружать сервер и несколько раз делать отправку... ИМХО лучше один раз но все...
Цитата
Хорошая оптимизация будет если скомпилированный скрипт оставить в памяти, тогда при следующем запросе он компилироватся по новой не будет. Для этого есть различные приблуды к PHP, в том числе и бесплатные.

А можно дать линк на эти приблуды?
Цитата
Было бы неплохо, чтобы кто-нибудь высказал свои соображения по поводу объектно-ориентированных особенностей php...

Тут два основных момента...
1. ООП надо применять там где оно реально нужно, т.е. для движков или систем, для маленьких скриптиков применение ООП, скажем так, просто не имеет смысла.
2. При рациональном использовании объектов и их грамотной структуре можно добиться, что скрипт будет работать быстрее, чем с применением функций...
Но все упирается в грамотное использование ООП.

Это сообщение отредактировал(а) Mal Hack - 7.12.2004, 15:25
PM ICQ   Вверх
Black
Дата 7.12.2004, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 7
Всего: 45



Кто знает, а существуют ли какие-нибудь программы, проверяющие код PHP и дающие советы по оптимизации кода или что-то в этом роде ????


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Mal Hack
Дата 7.12.2004, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



таких вроде нет...
Есть программы, которые на стороне сервера позволяют PHP скриптам выполняться быстрее: Zend Optimizer, Turck MMCache.
PM ICQ   Вверх
Black
Дата 7.12.2004, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 7
Всего: 45



Zend Optimizer - платный??? а вот Turck MMCache я не смог установить, может где-нибудь есть описание установки ???


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Mal Hack
Дата 7.12.2004, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



PM ICQ   Вверх
Opik
Дата 7.12.2004, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



PM MAIL Skype   Вверх
Sardar
Дата 8.12.2004, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Цитата(Mal @ 7.12.2004, 14:21)
А можно дать линк на эти приблуды?

Сам же привёл пример: http://sourceforge.net/projects/turck-mmcache/
Сохраняет скомпилированный скрипт в памяти, затем это скрипт по новой не компилируется smile



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Mal Hack
Дата 8.12.2004, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Хм... Значит я не так понимал, как эти вещи работают.. Сенкс за просвящение smile...
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.