За последние 24 часа нас посетили 16707 программистов и 1643 робота. Сейчас ищут 884 программиста ...

Вопрос производительности - много мелких файлов с функция

Тема в разделе "PHP для новичков", создана пользователем VLK, 15 дек 2013.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Подскажите будет ли более высокая производительность, если каждую функцию (для каждой функции создавать отдельный класс и использовать __autoload) засовывать в отдельный файл, например:

    допустим есть сайт, на нем есть div в который мы вставляем или форму для входа или форму с пользовательскими данными (выглядит это примерно как на mail.ru)


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

    как будет производительнее в данном случае, создать 3 класса и распихать их по трем файлам и использовать __autoload

    файл auth.php
    Код (Text):
    1.  
    2. <?php
    3. class auth {
    4.  
    5. static function check() {
    6.  
    7. if ( /* пользователь авторизован */ )
    8. { user_form::get(); }
    9.  
    10. else { login_form::get(); }
    11.  
    12. }
    13. }
    14. ?>
    файл user_form.php
    Код (Text):
    1. <?php
    2. class user_form {
    3.  
    4. static function get() {
    5. ?>
    6. /* тут html форма пользователя со ссылками на редактирование профиля, личные сообщения и т.д. */
    7.  
    8. <?php
    9. }
    10. }
    11. ?>
    файл login_form.php
    Код (Text):
    1. <?php
    2. class login_form {
    3.  
    4. static function get() {
    5. ?>
    6. /* тут html форма для входа пользователя */
    7. <?php
    8. }
    9. }
    10. ?>
    или держать это все одном файле, в одном классе?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Re: Вопрос производительности - много мелких файлов с функци

    При таком понимании ООП лучше вообще писать без классов. По-моему, на производительности мало отражается количество файлов. Держать каждую функцию в своём файле - смысла нет, скидывать 200 штук в один - тоже. Надо рассовывать функции по файлам с каким-то смыслом - в одном файле функции по работе с изображениями, в другом - с постами, и т.п.
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Вопрос производительности - много мелких файлов с функци

    Вообще я изначально писал без классов, используя только функции, но потом возникла проблема подключения файлов, по этому пришлось перейти на классы и статические методы из-за функции __autoload

    200 функций это хорошо, но если не планируется 200 функций, а допустим не более 30 т.е. допустимо каждую держать в отдельном файле.
    тогда как?

    интересует исключительно вопрос производительности.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Re: Вопрос производительности - много мелких файлов с функци

    производительность снижается при дроблении на много файлов. но есть кое-что поважнее: логичная структура папок и файлов облегчает изучение и последующее сопровождение.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Вопрос производительности - много мелких файлов с функци

    Акселератор нужен.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Re: Вопрос производительности - много мелких файлов с функци

    А нафига вам на 30 функций автолоад? Это для огромных систем классов удобно. А так 30 функций можно на 6-7 файлов раскидать и включать require_once()
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Вопрос производительности - много мелких файлов с функци

    Изначально я использовал require_once() потом начал немного "плыть" в них и решил отказаться в пользу автолоад.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Re: Вопрос производительности - много мелких файлов с функци

    Да ладно, всего 30 функций, и поплыли?
     
  9. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Вопрос производительности - много мелких файлов с функци

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



    Ну я как понимаю то, чем я интересуюсь ни кто не практикует и даже не интересует, значит лучше таким не заниматься
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Re: Вопрос производительности - много мелких файлов с функци

    Если реквайры поплыли, значит логики в архитектуре нет вовсе. Когда есть логика в строении системы, не надо ничего помнить, ничего не поплывет. Достаточно знать правила, по которым она работает, и тогда все очень легко найти и осмыслить. Если же у вас макароны по простыням размазало, то ООП вообще противопоказано. Вы откроете врата программерского ада и пустите на сервер силы Хаоса.

    Далее. Инклуд пустого файла эквивалентен ~26 вызовам/возвратам пустой функции (эмпирические данные). Как думаете, разнеся 30 функций по отдельным классам и по файлам, вы сильно что-то выиграете?

    Дробление процедурного кода на файлы должно отвечать двум критериям:
    1) Максимальная независимость. Если у вас вероятность подключения каких-то функций при работе других 100%, то выделяя их в отдельный класс и файл, вы стреляете себе в ногу. Проще объединять в файл по нескольку функций с максимальной вероятностью связанности. И отсюда вытекает второй пункт:
    2) Группировка по назначению. Если комплекс функций обслуживает, скажем, работу с бд, глупо их разносить по разным классам и файлам тем более.

    У вас проект заболел. И вы, вместо того, чтобы поставить диагноз и начать точное лечение, пихаете его всеми таблетками, что нашли дома. В лучшем случае оставите инвалидом.
     
  11. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Вопрос производительности - много мелких файлов с функци

    Fell-x27 спасибо за информацию, это как раз то что я хотел слышать:

    Код (Text):
    1. Далее. Инклуд пустого файла эквивалентен ~26 вызовам/возвратам пустой функции (эмпирические данные). Как думаете, разнеся 30 функций по отдельным классам и по файлам, вы сильно что-то выиграете?
    В этом то и заключается вопрос.

    Вообще это мой первый проект, изучил книгу по php, решил пополнить свои знания и протестировать их, по этому это скорее не болезнь а обучение.
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Re: Вопрос производительности - много мелких файлов с функци

    Ну...на ранних стадиях развития архитектура может пересматриваться и переписываться много раз. Так что дерзай.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Вопрос производительности - много мелких файлов с функци

    Акселератор нужен
     
  14. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Вопрос производительности - много мелких файлов с функци

    Тут дело не в архитектуре, а в подходе:
    или взаимосвязанные функции держать в одном файле, он подключается и эти функции взаимодействуют между собой, при этом возможно некоторые функции не будут задействованы, или же каждая функция будет в отдельном файле, и при необходимости использования той или иной функции, будет подключаться файл с этой функцией и потом будет вызываться эта функция.
    Вопрос что будет более производительно, как я понимаю вариант 1 будет более производителен.

    К примеру есть 3 функции, каждая из них, если ее засунуть в отдельный файл, будет занимать 1 кб или если их держать в одном этот файл, то этот файл будет занимать 3 кб.
    Вопрос что производительнее, подключить 1 раза файл на 3 кб или подключить 2 файла каждый из которых будет по 1 кб (в общей сложности 2 кб)
    количество файлов и их размеры придуманы и не имеют под собой какого то основания, это просто пример.


    Я пока в таком не разбираюсь :)
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Re: Вопрос производительности - много мелких файлов с функци

    1 раз на 3 кб. И да, если под аккселератором, то вообще пофигу. Точнее как..остается оверхед именно на инклуд, но он настолько ничтожен, что его нет.
     
  16. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Вопрос производительности - много мелких файлов с функци

    Большое спасибо за просвещение