Оптимизация кода на php. Скорость выполнения скрипта.

Статус
В этой теме нельзя размещать новые ответы.
Вспомнилось время когда оптимизировали даже асмовые приложения, тогда скорость была очень критичной, высчитывались такты процессорного времени на команду... В нынешнее время больший упор уже на кеширование делается, а не на оптимизацию скорости выполнения. Так как для тех же форточек код уже лет несколько пишет пол-Индии :) не особо заботясь о скорости выполнения.
 
Я бы посоветовал перейти на СУБД, ибо машинный код выполняется в десятки раз быстрее чем PHP, а ускорить чтение из файла врядли получится, разве что купить новый сервер более мощный, хотя и это не сильно спасет... Тем более что Вы еще и парсите (на сколько я понял) данные из файла построчно, этож вообще издевательство...Либо СУБД либо новое железо серверное =)
 
гхм добавлю автору темы если актуально ... если взялись за оптимизацию кода то и незабудьте посмотреть реальную нагрузку на сервер, потому как 0.4 миллисекунды это одно а нагрузка на проц вэб-сервером это другое =)

да кстате если народ тут спорит про разницу между файлами и БД то уточню что все БД используют файлы(!)
 
А еще БД использует кеш! :)
 
Допустим, в скрипте:
PHP:
$q = db_query("select today from ".COUNTER_TABLE." WHERE tbid=1");
$n = db_fetch_row($q);
$smarty->assign("today", $n[0] );
После этого надо ли уничтожить переменные $q и $n, чтобы в памяти зря не сидели? Если не помешает их уничтожение, как это сделать?
 
эти переменные не нужно уничтожать, они мало памяти жрут..
а вот сам запрос можно просто закешировать, если результат постоянен или изменяется через известные промежутки времени..

а так для уничтожения КРУПНЫХ переменных используй unset($var);
 
Интересные тесты

Чистый nginx+php-fcgi
Обрабатываемые запросы: 116 req/sec
Среднее время отклика на запрос: 41 ms
nginx+php-fcgi+APC
Обрабатываемые запросы: 259 req/sec
Среднее время отклика на запрос: 17 ms
nginx+php-fcgi+XCache
Обрабатываемые запросы: 392 req/sec
Среднее время отклика на запрос: 12 ms
 
Если работаешь с большими файлами, то по-любому рано или поздно встанет вопрос об индексах.

Бывает крайне полезно добить пробелами все строки до одинаковой длины (по размеру наибольшей из них), чтобы потом можно было вытащить $i-ю строку через
PHP:
  fseek($fp, ($i-1)*RAZMER_STROKI);
  $str = fread($fp,RAZMER_STROKI);
  $str = rtrim($str); // убираем паддинг

Также стоит посмотреть, по каким признакам ты из этого файла отбираешь строки, и сделать другой файл, в котором будут просто номера строк. Напимер так:
строки, начинающиеся с двух пробелов: 21,146,191,193
строки, содержащие 'vova': 21,22,27,...
строки максимальной длины: 150,271..

Короче понаходить их ЗАРАНЕЕ, сохранить их номера себе куда-нибудь (а хоть и в массивчик прямо в коде забить), и потом уже выдергивать по номерам, как в примере выше, а не лопатить весь файл.

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

Именно это важно, а не копеечный бонус от использования одинарных кавычек вместо двойных. Выполнялась у тебя инкрементация неинициализированной переменной за 0.00001 секунду, после инициализации стало 0.000001 (быстрее на порядок!!!). Смешно..
 
Если необходимы хитрые выборки данных, то лучше использовать БД, в ней настроиь индексы - это существенно увеличит скорость выборки.
А вообще обсуждение какое-то бестолковое - мы не знаем, что требуется от скрипта, может там алгоритм надо менять, а не способ хранения данных.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху