Каким практическим правилам следует руководствоваться при создании высокоэффективных программ PHP / MySQL? - PullRequest
6 голосов
/ 15 июня 2009

Несколько минут назад я спросил, лучше ли выполнять сразу несколько запросов при входе в систему и сохранять данные в сеансах или выполнять запросы по мере необходимости. Я был удивлен ответом (для запроса по мере необходимости). Есть ли другие хорошие правила, которым нужно следовать при создании многопользовательских приложений PHP / MySQL, которые повышают производительность?

Я ищу конкретные способы создания максимально эффективного приложения.

Ответы [ 3 ]

11 голосов
/ 15 июня 2009

хэширования

знаю ваши хэши (массивы / таблицы / упорядоченные карты / как вы их называете). поиск по хешу очень быстрый, и иногда, если у вас есть O (n ^ 2) циклов, вы можете уменьшить их до O (n), сначала организовав их в массив (с ключом по первичному ключу), а затем обработав их.

пример:

foreach ($results as $result)
  if (in_array($result->id, $other_results)
     $found++;

медленно - in_array проходит через все $other_result, что приводит к O (n ^ 2).

foreach ($other_results as $other_result)
  $hash[$other_result->id] = true;

foreach ($results as $result)
  if (isset($hash[$result->id]))
    $found++;

второй намного быстрее (в зависимости от результирующих наборов - чем больше, тем быстрее), потому что isset () имеет (почти) постоянное время. на самом деле, это не очень хороший пример - вы могли бы сделать это еще быстрее, используя встроенные функции php, но вы поняли идею.

оптимизация (My) SQL

  • mysql.conf: Я понятия не имею, какую производительность вы можете получить, оптимизируя конфигурацию mysql вместо того, чтобы оставить значение по умолчанию. но я читал, что вы можете игнорировать каждый тест postgresql, который использовал конфигурацию по умолчанию. afaik с настройкой менее важен для mysql, но почему игнорировать практическое правило: попробуйте поместить всю базу данных в память:)

  • объяснить [запрос]: очевидный вопрос, многие люди ошибаются. узнать об индексах. Есть правила, которым вы можете следовать, вы можете сравнить их, и вы можете иметь огромное значение. если вы действительно хотите всего этого, узнайте о различных типах индексов (btrees, hashes, ...) и о том, когда их использовать.

кэширование

Кэширование

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

в php, существует 4 вида кеширования, которые регулярно используются:

  • кэширование запросов: почти всегда переводится в memcached (иногда в общую память APC). сохранить результирующий набор определенного запроса в механизм хранения быстрого ключа / значения (= хэширования). запросы (теперь поиски) становятся очень дешевыми.

  • кеширование вывода: сохраните сгенерированный html для дальнейшего использования (вместо того, чтобы регенерировать его каждый раз). это может привести к значительному ускорению, но в некоторой степени работает против динамического характера PHP.

  • Кэширование браузера: А как насчет etags и http ответов? если все сделано правильно, вы можете избежать большинства работ в самом начале ! большинство программистов php игнорируют эту опцию, потому что они понятия не имеют, что такое HTTP.

  • Кэширование кода операции: APC, Zend Optimizer и так далее. делает загрузку PHP-кода быстрее. может помочь с большими приложениями. не имеет ничего общего с (медленными) внешними источниками данных, а потенциал несколько ограничен.

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

профилировщика

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

запросов в циклах

есть (php-) эксперты, которые не знают, что такое объединение (и для каждого, кого вы обучаете, появятся два новых без этого знания - и они напишут основы, см. Закон Шналлеса ). иногда эти запросы в цикле не так очевидны, например, если они приходят с библиотеками. считать запросы - если они растут с показанными результатами, что-то не так.

Неопытные разработчики имеют первостепенное, ненасытное желание писать фреймворки и системы управления контентом

закон Шналле

6 голосов
/ 15 июня 2009

Оптимизируйте ваши запросы MySQL сначала , затем PHP, который его обрабатывает, а затем, наконец, кэшируйте результаты больших запросов и поисков. MySQL, безусловно, является наиболее частым узким местом в приложении. Плохо разработанный запрос может занять в два-три раза больше времени, чем правильно разработанный запрос, который только выбирает необходимую информацию.

Поэтому, если ваши запросы оптимизированы до , вы кешируете их, вы сэкономили много времени на обработку.

Однако на некоторых общих хостах кэширование выполняется только в файловой системе из-за отсутствия Memcached. В этом случае может быть лучше выполнять запросы меньшего размера, чем кешировать их, поскольку время поиска жесткого диска (и ожидания доступа из-за других сайтов) может легко занять больше времени, чем запрос, когда ваш сайт загружен.

4 голосов
/ 15 июня 2009
  1. Cache.
  2. Cache.
  3. Быстрые индексированные запросы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...