Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как оптимизировать код?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Extazy
Отправлено: 11 Февраля, 2014 - 14:35:21
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Здравствуйте!
Имеется вот такой код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function tv($tv) {
  4.     $sxml = simplexml_load_file('http://informers.tomtel.ru/prog/TVGuide.xml');
  5.     foreach($sxml->programme as $v){
  6.         if($v['channel'] == $tv && (substr($v['start'], 0, -12) == date("Ymd")) && (substr($v['stop'], -12, 4) > date("Hi"))) {
  7.             $time = substr($v['start'], -12, 2).".".substr($v['start'], -10, 2) ."-". substr($v['stop'], -12, 2).".".substr($v['stop'], -10, 2);
  8.             $title = $v->title;
  9.  
  10.             echo $time.": ".$title."<br />";
  11.         }
  12.     }
  13. }
  14.  
  15. tv('EuroSport');
  16. ?>


Подскажите почему этот код может стать причиной высокого потребления ОЗУ на сервере? И можно ли както оптимизировать код, чтобы не было такой большой нагрузки?
 
 Top
code358
Отправлено: 11 Февраля, 2014 - 14:36:46
Post Id



Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)





функция должна return'ить Хм
 
 Top
esterio
Отправлено: 11 Февраля, 2014 - 14:40:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




code358 пишет:
функция должна return'ить

необьязательно

Extazy
как измеряли?
 
 Top
Extazy
Отправлено: 11 Февраля, 2014 - 15:02:07
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




esterio, я не знаю как определить что потребляет так много ОЗУ, но хостер сказал, что у меня открыто очень много PHP процессов, потребляющих по 3% ОЗУ. Последние 2 дня я работаю как раз с указанным выше кодом - поетому предположил, что он и есть причина.
(Добавление)
http://informers[dot]tomtel[dot]ru/prog/TVGuide[dot]xml довольно тяжёлый файл, и быть может он как раз и потребляет столько ОЗУ?
 
 Top
Invert
Отправлено: 11 Февраля, 2014 - 15:20:28
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Вы можете сами это проверить:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. echo '[ ' . memory_get_usage() . ' ]<br>';
  4.  
  5. function tv ( $tv ) {
  6.  
  7.     $sxml = simplexml_load_file( 'http://informers.tomtel.ru/prog/TVGuide.xml' );
  8.     foreach ( $sxml->programme as $v ) {
  9.         if ( $v[ 'channel' ] == $tv && ( substr( $v[ 'start' ], 0, -12 ) == date( "Ymd" ) ) && ( substr( $v[ 'stop' ], -12, 4 ) > date( "Hi" ) ) ) {
  10.             $time = substr( $v[ 'start' ], -12, 2 ) . "." . substr( $v[ 'start' ], -10, 2 ) . "-" . substr( $v[ 'stop' ], -12, 2 ) . "." . substr( $v[ 'stop' ], -10, 2 );
  11.             $title = $v->title;
  12.             echo $time . ": " . $title . "<br />";
  13.         }
  14.     }
  15. }
  16.  
  17. tv( 'EuroSport' );
  18.  
  19. echo '[ ' . memory_get_usage() . ' ]<br>';
  20. echo '[ ' . memory_get_peak_usage() . ' ]<br>';


CODE (htmlphp):
скопировать код в буфер обмена
  1. [ 342648 ]
  2. 16.45-17.40: Вот это да!!! (Спорт)
  3. 17.40-17.45: Сочи экспресс. Журнал (Олимпиада)
  4. 17.45-18.45: Футзал. Чемпионат Европы в Бельгии. Финал (Спорт)
  5. 18.45-19.45: Футбол. Атлантический Кубок Португалии. "Оребро" - "Слован", 0+ Футбол. Атлантический Кубок Португалии. Оребро... (Спорт)
  6. 19.45-20.00: Футбол. Евроголы. Журнал (Спорт)
  7. 20.00-21.25: Футбол. Атлантический Кубок Португалии. "Копенгаген" - "Брейдаблик", 0+ Футбол. Атлантический Кубок Португалии. Копенг... (Спорт)
  8. 21.25-21.30: Сочи экспресс. Журнал (Олимпиада)
  9. 21.30-22.30: Вот это да!!! (Спорт)
  10. 22.30-22.45: Футбол. Евроголы. Журнал (Спорт)
  11. [ 343192 ]
  12. [ 369384 ]
 
 Top
Мелкий Супермодератор
Отправлено: 11 Февраля, 2014 - 15:30:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)






-----
PostgreSQL DBA
 
 Top
Invert
Отправлено: 11 Февраля, 2014 - 15:36:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Мелкий пишет:
https://bugs.php.net/bug.php?id=62467

Пардон, не знал. Однако
 
 Top
Мелкий Супермодератор
Отправлено: 11 Февраля, 2014 - 15:45:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Invert, ага, я тоже случайно обнаружил.
А следует из этого неприятная ситуация - для диагностики, сколько же и куда утекает памяти средств самого php мало. Возможно xdebug прояснит картину.

Extazy пишет:
открыто очень много PHP процессов

Почему их много? У вас на каждый чих загружается xml'ка?


-----
PostgreSQL DBA
 
 Top
Extazy
Отправлено: 11 Февраля, 2014 - 15:49:28
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Кажется причина стала более ясна.
Файл по ссылке, указанный в коде, залит на мой сервер. Оперативки становится ровно 0 после того, как я пытаюсь проверить доступность сайта через http://host-tracker[dot]com/ru/ , где идёт запрос к сайту с пары десятков IP с разных стран мира.

О чём это говорит? Однако
Прикреплено изображение (Нажмите для увеличения)
1.png

(Отредактировано автором: 11 Февраля, 2014 - 15:49:49)

 
 Top
Invert
Отправлено: 11 Февраля, 2014 - 15:52:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Extazy пишет:
О чём это говорит?

Мелкий пишет:
Почему их много? У вас на каждый чих загружается xml'ка?


Попробуйте кэшировать данные в промежуточном формате, чтобы снизить потребление памяти.
 
 Top
Extazy
Отправлено: 11 Февраля, 2014 - 15:56:10
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




оу а как тут лучше кеш применить? я в нём не очень разбираюсь. Улыбка Язычок
 
 Top
Invert
Отправлено: 11 Февраля, 2014 - 16:02:23
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Я не знаю, как там у вас используется этот XML файл, но могу предположить, что вы парсите его при каждом открытии страницы пользователем. Что по сути не нужно. Вам нужно лишь раз распарсить XML, получить нужные данные и сохранить их (временно) в промежуточный формат, который вам удобно использовать. И в вашем случае не важно, текстовый документ это, Memcache или БД.
 
 Top
Extazy
Отправлено: 11 Февраля, 2014 - 16:05:01
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Invert, информация в .xml обновляется раз в неделю. Значит мне необходимо 1 раз в неделю парсить этот файл, вытаскивать из него нужные данные и, например, сохранять в mysql бд.. и в течение недели уже работать только с бд. так?
 
 Top
Invert
Отправлено: 11 Февраля, 2014 - 16:09:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




Все верно.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB