Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 00:27   #1
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию Оптимизация кода

Добрый вечер. Имеется скрипт:

PHP код:
<?php
 $path
="/n";  

  
$d=opendir($_SERVER["DOCUMENT_ROOT"].$path); 
  if(!
$d) exit;  

  
$pics=array(); 
  while(
false!=($n=readdir($d))){ 
    if(
preg_match("~^[a-zA-Z0-9\-\_]+\.(jpg)$~i",$n)){ 
      
$pics[]=$n
    } 
  } 
  
closedir($d);  

  
$x=rand(0,count($pics)-1); 
  
$pic=$pics[$x];  

  
header("Location: $path/$pic"); 
  exit;

?>
Он отсылает при запросе к нему на произвольное изображение на сервере в папке n. Данная ссылка используется в android приложении. Популярность приложения выросла - сервер в дауне. Изображений в папке 600. Что в этом скрипте можно оптимизировать, чтобы хоть как-то уменьшить нагрузку? Смена хостинга планируется также, но оптимизация тоже важна.
HDMI вне форума Ответить с цитированием
Старый 21.10.2012, 00:55   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
if(preg_match("~^[a-zA-Z0-9\-\_]+\.(jpg)$~i",$n))
вот это зачем? да и вайл наверное тоже лишний.
но это все равно не спасет
eval вне форума Ответить с цитированием
Старый 21.10.2012, 08:08   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Ручками пропишите пути ко всем 600 файлам и поставьте обычный random
Виталий Желтяков вне форума Ответить с цитированием
Старый 21.10.2012, 09:43   #4
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Ручками не вариант, картинки будут добавляться постоянно
HDMI вне форума Ответить с цитированием
Старый 21.10.2012, 10:49   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

при добавлении картинки - добавляем путь в БД (при удалении так же удаляем)
в результате при обращении -не будем пробегать весь каталог из 600 файлов, и получим лишь одним запросом один путь...
Код:
SELECT name FROM t GROUP BY RANDOM() LIMIT 0,1
ADSoft вне форума Ответить с цитированием
Старый 21.10.2012, 10:54   #6
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

В случае с БД необходимо будет следить за базой. Сейчас как: просто копируем картинки с любым именем в папку и все работает.

Можно конечно заморочиться с этим и написать еще скрипт обновления базы...

Загрузку снизит ли сильно это?
HDMI вне форума Ответить с цитированием
Старый 21.10.2012, 11:12   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

БД тоже будет давать нагрузку. Добавление картинок происходит куда реже, чем запрос, потому надо написать скрипт админки, который будет загружать на сервер картинки и удалять их. После загрузки/удаления данный скрипт будет генерировать PHP-файл, типа такого:
PHP код:
<?php
  $pics 
= array (
      
'1.jpg',
      
'2.jpg',
      
'image.jpg'
    
);
  
header ('Location: /n/' $pics[array_rand ($pics)]);
?>
Arigato вне форума Ответить с цитированием
Старый 21.10.2012, 11:32   #8
HDMI
Пользователь
 
Регистрация: 21.09.2009
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
БД тоже будет давать нагрузку. Добавление картинок происходит куда реже, чем запрос, потому надо написать скрипт админки, который будет загружать на сервер картинки и удалять их. После загрузки/удаления данный скрипт будет генерировать PHP-файл, типа такого:
PHP код:
<?php
  $pics 
= array (
      
'1.jpg',
      
'2.jpg',
      
'image.jpg'
    
);
  
header ('Location: /n/' $pics[array_rand ($pics)]);
?>
Не будет ли узким местом массив $pics опять же?
HDMI вне форума Ответить с цитированием
Старый 21.10.2012, 11:43   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Можно и от массива избавиться, тогда надо давать имена файлам в порядке возрастания: 0.jpg, 1.jpg, 2.jpg, ... Достаточно выбрать случайное число от 0 до количества файлов. Так будет еще быстрее.
Arigato вне форума Ответить с цитированием
Старый 21.10.2012, 11:47   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода LatuSerge Общие вопросы Delphi 10 27.12.2011 01:51
Оптимизация кода на C# FiloXSee Общие вопросы .NET 4 24.09.2011 17:10
Оптимизация кода ViktorG Microsoft Office Excel 4 12.11.2010 14:43
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода viscas PHP 3 31.05.2009 16:04