За последние 24 часа нас посетили 18220 программистов и 1599 роботов. Сейчас ищут 870 программистов ...

Производительность, файлы

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

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Вопрос конечно абстрактный, вот смотрите, есть допустим небольшой проект, папка классы, классов штук 10, под каждый отдельный файл (для __autoload), в итоге каждый файл по размеру занимает где то по 1 кб.
    Как правило в большинстве мест подключаются несколько из этих классов, но бывают и довольно редко-используемые классы.

    И есть мысль засунуть все классы в 1 файл, будет он занимать 10 кб.

    Будет ли производительно держать все классы в одном файле и подключать единожды этот файл? Интересует именно вопрос производительности, а не удобства и логики.

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

    Как бы вы поступили на моем месте?


    Просьба по возможности дать более подробный, развернутый ответ, а не "ну попробуй"..

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

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    акселератор нужен
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а если его нет (нет возможности установить), тогда как лучше?
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тогда лучше взять впс и поставить акселератор. по цене те же деньги.
     
  5. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    Акселератор в проекте размером 10Кб?
    Вам ещё печатать и печатать а Вы уже об оптимизации думаете)
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    пацаны делают так:
    autoload.php
    Код (PHP):
    1. <?php
    2. class Autoload
    3. {
    4.     public static function loadClasses($className)
    5.     {        
    6.         require_once ('classes/'.$className.'.php');   
    7.     }
    8. }
    9.  
    index.php
    Код (PHP):
    1. <?php
    2. require_once('autoload.php');
    3. spl_autoload_register(array('Autoload', 'loadClasses')); 
    все, забыли про инклюды, там где нужно класс заинклюдится сам, там тока создать объект в любом месте, где нам нужно

    Код (PHP):
    1. $front = new front();
    2. $front->start();
    3.  
    соответственно в папке classes должен быть файл front.php а в нем класс front

    работает эта шняга процентов на 5-10 быстрее чем 20 инклюдов в index.php
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Dmitriy A. Arteshuk я так и делаю, единственное что, методы в классах статические, но это уже на любителя.

    не совсем то я спрашиваю, меня интересует в целом.

    Допустим на любом сайте присутствуют слова "Войти", "Логин", "Пароль", "Запомнить", "Регистрация", "Выйти", "Сохранить", и т.д.
    Допустим я хочу создать мультиязыковой сайт, я создаю файл в него засовываю массив, а на самих страницах за место текста пишу переменные этого массива, примерно так это выглядит:
    Код (Text):
    1. $LangPack = array(
    2. 'enter' => 'Войти',
    3. 'login' => 'Логин',
    4. 'password' => 'Пароль',
    5. 'register' => 'Регистрация',
    6. 'remember_me' => 'Запомнить',
    7. 'forgot_password' => 'Забыли пароль?'
    8. );
    Часть кода:
    Код (Text):
    1. <form method="POST" id="login">
    2.  
    3. <a href="register.php"><?php echo $LangPack['register']; ?></a><br />
    4. <label><?php echo $LangPack['login']; ?>: <input type="text" name ="login" /></label><br />
    5. <label><?php echo $LangPack['password']; ?>: <input type="password" name ="pass" /></label><br />
    6. <label><input type ="checkbox" name="save_user" value="yes" /><?php echo $LangPack['remember_me']; ?></label><br />
    7. <input id="enter" type="submit" value="<?php echo $LangPack['enter']; ?>" /><br />
    8. <a href="forgot_password.php"><?php echo $LangPack['forgot_password']; ?></a><br />
    9.  
    10. </form>
    Вопрос возник хранить данные для всех страниц (всех имеется ввиду "технических" страниц - регистрация, вход, настройки и т.п.) т.е.:
    Код (Text):
    1. $LangPack = array(
    2. // переменные со страницы регистрации
    3.  
    4. // переменные со страницы входа
    5.  
    6. // переменные со страницы настроек
    7.  
    8. // еще какие-нибудь переменные
    9. );
    Но в таком случае из такого массива будет использовать 10% переменных, при это 90 будут мертвым грузом, за то удобно.
    или же создавать для каждой страницы отдельный файл с отдельным $LangPack

    если создавать отдельные, то размер каждого файла будет ну где то чуть меньше 1 кб. а если все вместе в одной файле, то этот файл будет не более 5 кб.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    отдельный
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Всё-таки мне не понять, зачем ради автолоада плодить классы, в которых все методы статические? Зачем разбивать небольшую систему на исходники в 1Кбайт?
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    для удобства
     
  11. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    У меня допустим проверку данных cookie проверяет один класс (находящийся в отдельном файле), а если я захожу вводя логин и пароль, за это отвечает уже другой класс, находящийся в отдельном файле.

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

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

    Вопрос в том что лучше 5 файлов по 1 кб. или же 1 файл на 5 кб. при этом использоваться будет всего 1 кб. из этого файла, а 4 кб. будут мертвым грузом. С одним файлом на много проще работать, чем 5-ю.
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Правильно ли я понял.
    У тебя много классов которые хранятся в отдельных файлах.
    Как бы ты там ни написал, но я думаю что при генерации обычной страницы у тебя будет инклудится не больше 7 классов. Можешь посчитать сколько у тебя.

    Думаю что не скоро это станет узким местом в твоем приложении.
     
  13. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    У меня во всех файлах всего один require_once, на один файл, этот файл содержит следующий код:

    Код (Text):
    1. function __autoload($name)
    2. { require_once ( $_SERVER['root'].'classes/'.$name.'.php' ); }
    и еще несколько строк кода который необходим на всех страницах

    более я ни где не использую require_once, или речь вообще ни об этом шла?
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну положим весь смысл в том, чтоб каждый из классов представлял какое-то цельное абстрактное понятие, и не обязательно потребуется только один объект класса, их может создаваться много, каждый из которых сходен по структуре и поведению, но различается по значениям атрибутов. А 1 Кбайт, 5 Кбайт - это смешные размеры, так что если это соответствует истине, то тут нечего разбивать на модули.
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    еще трейты есть
     
  16. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Пока что я не столкнулся с необходимость писать именно ООП приложение, по этому в моем случае класс со статическими методами отвечает за что то конкретное, например за проверку cookie или введенного логина и пароля, деление так происходит.
    Раза 3 я уже переписывал свое это приложение. Изначально там классов не было как таковых, были только функции.

    а за
    Спасибо, учту.
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я всегда каждый класс отдельно держу.