С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
 Аватар для nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844

оптимизация кода, снижение нагрузки на сервер

20.09.2010, 15:39. Показов 7759. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал сайт на самописном движке. Сталкнулся с проблемой загрузка цпу у хостера. Собственно хостер предоставляет 10% цпу, а при посещаемости 1,500 юзеров в день цпу грузится на 2,5%. Хостер предупредил сразу: если лимит цпу превысит допустимый объем, сайт блокируется мгновенно без предупреждения. Дело в том, что наш проект понравился 1 телеканалу и нас хотят грубо говоря пропиарят. Вот боимся, что хостер на нас сильно обидеться. На VPS хостинг денег пока нет. Но это только пока. В общем наша задачу удержать, на имеющемся хостинге сайт с большой посещаемостью.

От сюда вопрос, как оптимизировать код и снизить нагрузку на сервер?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2010, 15:39
Ответы с готовыми решениями:

Как проверить степень нагрузки кода на сервер php?
Собственно, хочу узнать, чтобы проверить оптимальна ли моя цмс. Не слишком ли нагружена. И еще где норма, как рассчитать из...

Снижение нагрузки на сервер сайта за счёт использования ajax
Возможно ли это ? Или ajax - обычное украшательство? И как именно может это снижать нагрузку?

Оптимизация нагрузки на сервер
Пусть у нас система генерирует запросы на исполнение чего-то (документы). Как лучше исполнять эти запросы, чтобы было оптимально с точки...

3
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
20.09.2010, 15:47
Цитата Сообщение от nepster Посмотреть сообщение
От сюда вопрос, как оптимизировать код и снизить нагрузку на сервер?
Оптимизация бывает, грубо говоря, двух типов: оптимизировать код, и оптимизировать логику.
Например, код, который 1000 раз вычисляет одно и то же, надо оптимизировать по логике. А код, который открыл и забыл закрыть 40 файлов, 20 результатов из БД и т.п. надо оптимизировать по коду.

Одним словом: руками.
1
 Аватар для Nazz
898 / 729 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
20.09.2010, 15:50
Лучший ответ Сообщение было отмечено как решение

Решение

40 советов по оптимизации вашего PHP-кода
  1. Если метод может быть статическим, объявляйте его статическим.
  2. echo быстрее, чем print.
  3. Передавайте в echo несколько параметров, вместо того, чтобы использовать конкатенацию строк.
  4. Устанавливайте максимальное количество проходов ваших циклов for до цикла, а не во время его выполнения.
  5. Удаляйте свои переменные для освобождения памяти, тем более, если это большие массивы.
  6. Остерегайтесь магических методов, таких как __set, __get, __autoload.
  7. require_once дорого обходится.
  8. Указывайте полные пути в конструкциях include/require, меньше времени будет тратится на поиск файла.
  9. Если вам необходимо определить время, когда скрипт был запущен, используйте $_SERVER[’REQUEST_TIME’] вместо time().
  10. Старайтесь использовать strncasecmp, strpbrk и stripos вместо регулярных выражений.

  11. str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace.
  12. Если функция, как и функции замены строк, может принимать в аргументы как массивы, так и одиночные символы, и если ваш список аргументов не слишком длинный, подумайте над тем, чтобы записать несколько одинаковых выражений замены, проходя один символ за раз, вместо одной строки кода, которая принимает массив как аргумент поиска и замены
  13. Лучше выбирать утверждения при помощи конструкции else if, чем использовать несколько конструкций if.
  14. Подавление ошибок при использовании @ работает очень медленно.
  15. Используйте модуль Apache mod_deflate.
  16. Закрывайте свои соединения с БД, когда закончите работать с ними.
  17. $row['id'] в семь раз быстрее, чем $row[id].
  18. Сообщения об ошибках дорого стоят
  19. Не используйте функции внутри условия цикла for, например как здесь: for ($x=0; $x < count($array); $x). В данном случае функция count() будет вызываться с каждым проходом цикла.
  20. Инкремент локальной переменной в методе - самый быстрый. Почти также работает инкремент локальной переменной в функции.
  21. Инкремент глобальной переменной в два раза медленее, чем локальной.
  22. Инкремент свойства объекта (т.е. $this->prop++) в три раза медленнее, чем локальной переменной.
  23. Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.
  24. Объявление глобальной переменной, без использования её в функции, также замедляет работу (примерно на ту же величину, что и инкремент локальной переменной). Вероятно, PHP осуществляет проверку на существование переменной.
  25. Скорость вызов метода, судя по всему, не зависит от количества методов, определённых в классе. Я добавил 10 методов в тестовый класс (до и после тестового метода), без изменения производительности.
  26. Методы в производных классах работают быстрее, чем они же, определённые в базовом классе.
  27. Вызов функции с одним параметром и пустым телом функции в среднем равняется 7-8 инкрементам локальной переменной ($localvar++). Вызов похожего метода, разумеется, около 15 инкрементов.
  28. Ваши строки, определённые при помощи ', а не ", будут интерпретироваться чуть быстрее, т.к. PHP ищет переменные внутри "..", но не '...'. Конечно, вы можете использовать это только тогда, когда в вашей строке нет переменных.
  29. Строки, разделённые запятыми, выводятся быстрее, чем строки, разделённые точкой. Примечание: это работает только с функцией echo, которая может принимать несколько строк в качестве аргументов.
  30. PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.
  31. Ваши PHP-скрипты перекомпилируются каждый раз, если скрипты не кэшируются. Кэширование скриптов обычно увеличивает производительность на 25-100% за счёт удаления времени на компиляцию.
  32. Кэшируйте, насколько это возможно. Используйте memcached — это высокопроизводительная система кэширования объектов в памяти, которая повышает скорость динамических веб-приложений за счёт облегчения загрузки БД. Кэшированный микрокод полезен тем, что позволяет вашему скрипту не компилироваться снова для каждого запроса.
  33. При работе со строками, когда вам понадобится убедиться в том, что строка определённой длины, вы, разумеется, захотите использовать функцию strlen(). Эта функция работает очень быстро, ведь она не выполняет каких-либо вычислений, а лишь возвращает уже известную длину строки, доступную в zval-структуре (внутренняя структура C, используемая при работе с переменными в PHP). Однако потому, что strlen() — функция, она будет работать медленно за счёт вызова некоторых операций, таких как приведение строки в нижний регистр и поиска в хэш-таблице, только после которых будут выполнены основные действия функции. В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset().
    Было: if (strlen($foo) < 5) { echo "Foo is too short"; }
    Стало: if (!isset($foo{5})) { echo "Foo is too short"; }
    Вызов isset() быстрее, чем strlen() потому, что, в отличие от strlen(), isset() - не функция, а языковая конструкция. За счёт этого isset() не имеет практически никаких накладных расходов на определение длины строки.
  34. Инкремент или декремент переменной при помощи $i++ происходит немного медленнее, чем ++$i. Это особая специфика PHP, и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт. ++$i будет быстрее в PHP потому, что вместо четырёх команд, как в случае с $i++, вам понадобится только три. Пост-инкремент обычно используется при создании временных переменных, которые затем увеличиваются. В то время, как пре-инкремент увеличивает значение оригинальной переменной. Это один из способов оптимизации PHP-кода в байт-код утилитой Zend Optimizer. Тем не менее, это хорошая идея, поскольку не все байткод-оптимизаторы оптимизируют это, также остаётся немало скриптов, работающих без оптимизации в байткод.
  35. Не всё должно быть ООП, часто это излишне, поскольку каждый метод и объект занимает много памяти.
  36. Не определяйте каждую структуру данных как класс, массивы бывают очень полезны
  37. Не слишком разбивайте методы. Думайте, что вы действительно будете повторно использовать.
  38. Вы всегда можете разбить код на методы позже, по необходимости.
  39. Используйте бесчисленное количество предопределённых функций.
  40. Если в вашем коде есть функции, выполняющиеся очень долго, обдумайте их написание на C в виде расширения
  41. Профилируйте свой код. Профилирование покажет вам, как много времени выполняются части вашего кода.
  42. mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может уменьшить объем передаваемых данных до 80%.


Добавлено через 2 минуты
и вот
5
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
20.09.2010, 17:29
Цитата Сообщение от nepster Посмотреть сообщение
Собственно хостер предоставляет 10% цпу
Цитата Сообщение от nepster Посмотреть сообщение
На VPS хостинг денег пока нет.
еще вариант - пробуй договориться с хостером за дополнительную плату увеличить лимит с 10 до, например, 30%
зы: но я больше поддерживаю вариант который предложил Vovan-VE - оптимизация кода/логики

Добавлено через 30 минут
Цитата Сообщение от Nazz Посмотреть сообщение
и вот
предполагаю эта инфа немного старовата - для версий пхп менее пятой
возьмем в пример самое первое: ' Выносите $переменные из "текстовых строк" '
такая запись:
PHP
1
$s = "string{$s1}string{$s2}string{$s3}...";
по скорости выполнения, отличие от след. записи очень мало (грубо говоря различия нет):
PHP
1
$s = 'string' . $s1 . 'string' . $s2 . 'string' . $s3 . '...';
зы: натыкался на инфу в инете насчет "скорости кавычек" (двойных/одинарных). после пробовал ставить небольшие тесты вручную - и правду говорят что разницы нет (правда тестил только на 5.х)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2010, 17:29
Помогаю со студенческими работами здесь

Снижение нагрузки на железо
Предполагаю, что в ubuntu, как и в любой другой ОС есть много (ну или сколько-нибудь) сервисов (демонов) которые нужны не для всех задач...

Снижение нагрузки на уровне биоса в RX470
Имею опыт редактирования биоса в RX470: изменял тайминги, поставил границы температуры - при которых она отключает комп, но до этого...

Оптимизация updateGL для снижения нагрузки на процессор
Здравствуйте! У меня снова проблема... Имеется виджет QGLWidget. В окне программы 9 экземпляров таких виджетов. Каждый из них что-то...

Оптимизация нагрузки. Задача двумерного нелинейного программирования.
Добрый день, на днях выпала такая практическая работа: Имеется следующая постановка задачи двумерного нелинейного программирования....

Оптимизация нагрузки при разных подходах использования графики
Сделал интерфейс игры (Портрет героя с хп, инвентарь в виде ячеек в верху екрана, кнопка меню). Потом наложил на них фильтры тень, фаску в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru