Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

forum.0day.community _ Web-программирование _ php Вопрос по файлу который инклюдится

Автор: RipperR Aug 22 2017, 10:42

Народ вопрос такой есть файл в нем собраны все классы и функции моего проекта он уже порядка 7000 строк.
Влияет ли подключение такого файла к каждой страница на производительность ? или лучше его разбить на части ...

А то я обратил внимание что странички (файл php) на всех подразделах выполняется по 500мс чисто файл php.. то-есть в логах стоит
Ожидание 216мс скачивание 353 мс...

Автор: Celin Aug 22 2017, 10:46

хкм. дробить на файлы и подключать по потребности.
так нельзя

Автор: miniden Aug 22 2017, 10:53

(RipperR @ Aug 22 2017, 11:42) Перейти к цитате

Народ вопрос такой есть файл в нем собраны все классы и функции моего проекта он уже порядка 7000 строк.
Влияет ли подключение такого файла к каждой страница на производительность ? или лучше его разбить на части ...

А то я обратил внимание что странички (файл php) на всех подразделах выполняется по 500мс чисто файл php.. то-есть в логах стоит
Ожидание 216мс скачивание 353 мс...

7к строк это не много
http://php.net/manual/pl/function.memory-get-usage.php - вот так меряем на каких этапах теряем много памяти
https://stackoverflow.com/questions/535020/tracking-the-script-execution-time-in-php - так меряем вызовы и время.

В идеальном мире, 20мб на php скрипт это уже предел. По факту на теперешних серверах и 160мб норма.
На объявление самих функций, php не потратит много времени и памяти.

Автор: RipperR Aug 22 2017, 11:30

Тазик под сайт не рахит но чет задумчевый FX-8320E 8GB вывод бд через json генерится 600 ms основной файлы рендерется 500 ms вроде не критично но мне кажется дальше будет хуже в бд уже Овер 10к записей и становится будет все больше ...

Автор: BahuL Aug 22 2017, 12:09

Создатели симфони тоже используют 1 большой файл вместо кучи мелких

To ensure optimal flexibility and code reuse, Symfony applications leverage a variety of classes and 3rd party components. But loading all of these classes from separate files on each request can result in some overhead. To reduce this overhead, the Symfony Standard Edition provides a script to generate a so-called bootstrap file, consisting of multiple classes definitions in a single file. By including this file (which contains a copy of many of the core classes), Symfony no longer needs to include any of the source files containing those classes. This will reduce disc IO quite a bit.


https://symfony.com/doc/current/performance.html#use-bootstrap-files

Автор: RipperR Aug 22 2017, 12:24

Короче я так понял что надо наставить там микротаймов в большем файле по смотреть на чем оно спотыкается ?
Нехочет выполнять memory_get_usage тупо крашится ...

PHP/5.6.30 на 7 рку пока апать не рискну ибо там еще freepbx с его GUI и ему это врятли понравится ...

Автор: RipperR Aug 22 2017, 18:43

Сделал тестовый файл занклюдил свой файл с функционалом с простым echo "21312"

время выполнения 300-500мс ...

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

Автор: BahuL Aug 28 2017, 12:58

(RipperR @ Aug 22 2017, 19:43) Перейти к цитате

Сделал тестовый файл занклюдил свой файл с функционалом с простым echo "21312"

время выполнения 300-500мс ...

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


как настроено кеширование. На какой системе вертится проект? ФС?

Автор: RipperR Aug 28 2017, 20:48

Кеширование не трогал все дефолтное .
Ось CentsOS 7 ext4

Автор: RipperR Aug 31 2017, 15:01

Нашел я так понимаю одно из узких мест ... а имеено подключение к MySQL bd


        $start = microtime();
    $dbcnx=@mysqli_connect($dblocation,$dbuser,$dbpasswd,$dbname);
    mysqli_query($dbcnx, "SET NAMES 'utf8'");
    if(!$dbcnx)
    {
        echo ("Ощибка подключения к mySQL");
        exit();
    }
    echo round((microtime() - $start)*1000);


это выполняется 200мс если я правильно посчитал
Пустой файл с echo 234ms тоесть 34 мс код и 200 мс конект к бд.

как это полечить или что я делаю не так.

Автор: Payne Sep 1 2017, 7:13

(RipperR @ Aug 31 2017, 16:01) Перейти к цитате

Нашел я так понимаю одно из узких мест ... а имеено подключение к MySQL bd


        $start = microtime();
    $dbcnx=@mysqli_connect($dblocation,$dbuser,$dbpasswd,$dbname);
    mysqli_query($dbcnx, "SET NAMES 'utf8'");
    if(!$dbcnx)
    {
        echo ("Ощибка подключения к mySQL");
        exit();
    }
    echo round((microtime() - $start)*1000);


это выполняется 200мс если я правильно посчитал
Пустой файл с echo 234ms тоесть 34 мс код и 200 мс конект к бд.

как это полечить или что я делаю не так.


200 мс на самом деле не так уж много. Если Вы боитесь за скорость выборки при количестве записей больше 10к, то используйте индексы для выборки по ключевым полям. Если я не ошибаюсь, MySQL может начинать притормаживать при кол-ве записей больше 300к в таблице, и то это вроде исправили давно.

Можно использовать Redis или Memcache(d) для кеширования частых одинаковых запросов, если количество оперативки позволяет. Накрайняк Sphinx юзать, он конечно, не совсем для кеширования, но в данном случае подойдет, в принципе

Автор: RipperR Sep 1 2017, 12:33

То-есть если процесс подключение к бд в 200 мс это норма ?
Просто я к тому что в основном подключение к бд файле и еще вспомогательном где генеритя таблица в json и уже мы имеем 400 мс а страничка грузится уже 550-700мс.

Автор: Payne Sep 6 2017, 8:08

(RipperR @ Sep 1 2017, 13:33) Перейти к цитате

То-есть если процесс подключение к бд в 200 мс это норма ?
Просто я к тому что в основном подключение к бд файле и еще вспомогательном где генеритя таблица в json и уже мы имеем 400 мс а страничка грузится уже 550-700мс.


200 - это нормально. Попробуйте закешировать выбираемые данные в редисе или мемкеше, оцените прирост в скорости. Ну и старайтесь сделать все запросы на одном соединении, а то опять потеряете в скорости.

Invision Power Board
© Invision Power Services