Помощник
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]() |
![]() ![]()
Сообщение
#1
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Какое-то время назад мне в руки попал исходник сей прекрасной системы. Ни в коем разе не хочу умалять ее достоинства, но все же есть одно очень серьезное замечание.
Откуда у меня исходник, и не спрашивайте - сервер взломал и скачал. Не в том суть. А суть вот в чем. В системе прямо в индексе есть вот такой кусочек кода:
Вроде бы ничего противозаконного тут нет, НО! ...взгляните на четвертую строчку. для тех, кто не знает пхп, поясняю - в ней запоминается время старта скрипта. так вот. это время не учитывает: а. включение файла classes/mainclass.php (одна файловая операция) б. создание объекта $Mainclass - загрузка класса в память и выполнение конструктора класса в. в конструкторе есть вот такой кусочек кода:
то есть: включение еще одного файлика (уже 2 файловых операции) потом подключение файлов в цикле (еще плюс n файловых операций, где n-число итераций цикла) ну и в конце один запросик в БД и снова итерация, итерация, итерация.... Это я все к чему. Это к тому, что во времени генерации системы не учитывается время на ее инициализацию. а в большинстве случаев именно на это уходит большая часть работы. Отсюда вывод - время генерации ЦМС (за которым так гонится многоуважаемый Sunvas) сильно занижено! Выводы делаем сами ![]() UPD: так лучше? ЗЫ Это не пиар и не попытка отбить у кого-то охоту пользоваться системой. Это скорее повод для размышлений ее автора... ![]() ЗЫЗЫ Ну не может быть во всем все замечательно. Даже компьютеры ошибаются... ибо созданы людьми, которым ошибки свойственны... ЗЫЗЫЗЫ Саня! Еще раз тебя с юбилеем! Сообщение отредактировал Youshi - 2008-12-14, 22:09 |
|
|
||
Гость_RULEVOY_* |
![]()
Сообщение
#2
|
|
Гости ![]() |
заюзал ../../../../../etc/ ?
И какие мне лично выводы сделать? Делаю вывод, что просто щас закроют дыру, поставят считалку в "до" . Время загрузки изменится на несколько милисикунд, собственно и все. А такие темы создавать нужно в нормальном тоне, а не писать что мол делайте выводы а в конце с праздником поздравлять ![]() Сообщение отредактировал RULEVOY - 2008-12-14, 21:54 |
|
|
||
![]() |
![]()
Сообщение
#3
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Тон нормальный.
Я никого оскорблять не собирался. Не важно... Не шаришь - не суди. Я кучу времени убил на то, чтобы уменьшить эффект от инклудов. И уж поверь - они офигенно замедляют. Собственно это и было целью. Хотя мож и правда грубовато написал. Эдакое прям разоблачение на пустом месте получилось ![]() Если что - извиняюсь... я больше так не буду... ![]() PS сначала хотел по-тихому в асе с Sunvas`ом переговорить. А потом передумал... Хочу, чтобы меня тут камнями закидали ![]() Сообщение отредактировал Youshi - 2008-12-14, 22:16 |
|
|
||
![]() |
![]()
Сообщение
#4
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
ЗЫ
перенесите в найденные ошибки |
|
|
||
![]() |
![]()
Сообщение
#5
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
Исправил.
Действительно, конкретно ступил.. Время, которое я "украл" составило - 0.012 сек.. Что ж... Надо будет искать варианты поиска оптимальных решений. Слить все в один файл - конечно вариант, но слишком уж неудобный код получится. Вообще не факт, что время, затрачиваемое на генерацию страницы служит реальным показателем нагрузки на сервер. - Ведь в данном случае речь идет о поиске и считывании файла винтом; процессор в это время отдыхает. Или я не прав? Сообщение отредактировал Alexander - 2008-12-14, 22:46 |
|
|
||
![]() |
![]()
Сообщение
#6
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Ни в коем случае этого не делай! Один класс - один файл. К тому же я проводил такие эксперименты - ничего хорошего это не дало. А кодить стало ужасно неудобно. Да в принципе вообще не служит. Показатели тут другие - нагрузка на бд, использование памяти и процессорного времени, количество файловых операций (а обычно именно это и оказывается тем самым "бутылочным горлышком"). процессор управляет этим самым поиском. на то он и процессор. и тут многое от файловой системы зависит, от самого винта (винтов если раид) |
|
|
||
Гость_RULEVOY_* |
![]()
Сообщение
#7
|
|
Гости ![]() |
да шарю вобще-то ![]() ![]() /*Добавлено позже*/ а вот и ответ собственно... потихонькому - это по-человечески вроде бы. Сообщение отредактировал RULEVOY - 2008-12-14, 22:53 |
|
|
||
![]() |
![]()
Сообщение
#8
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Согласен. А с чего ты взял, что я человек? ![]() Ну лан. что сделано - то сделано. ну я на итерации упора и не делал (хотя одна итерация в цикле съедает гораздо больше команд процессора, нежели чем просто повтор одного и того же участка кода. только нет смысла считать эти самые команды. в рамках всей системы не критично и сильно зависит от архитектуры процессора). а инклуд - это да. чем больше - тем хуже, ибо грузит уже файловую подсистему eAccelerator - хорошая штука и жизнь несомненно облегчит. но ведь не везде он стоит. ![]() |
|
|
||
![]() |
![]()
Сообщение
#9
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
Все это, конечно, хорошо... Но давайте ближе к телу. Вот весь код конструктора системы. ПодскАжите, как его оптимизировать?
![]()
Тааак. Вот обнаружился еще один глюк форума.. Отпишу Сергею.. Сообщение отредактировал Alexander - 2008-12-15, 17:26 |
|
|
||
Гость_RULEVOY_* |
![]()
Сообщение
#10
|
|
Гости ![]() |
ты слишком самокритичен ну я на итерации упора и не делал (хотя одна итерация в цикле съедает гораздо больше команд процессора, нежели чем просто повтор одного и того же участка кода. только нет смысла считать эти самые команды. в рамках всей системы не критично и сильно зависит от архитектуры процессора). а инклуд - это да. чем больше - тем хуже, ибо грузит уже файловую подсистему eAccelerator - хорошая штука и жизнь несомненно облегчит. но ведь не везде он стоит. ![]() Предложи свои варианты, меня заинтересовала тема, собственно вот еще по сабжу: http://ua.php.net/autoload |
|
|
||
![]() |
![]()
Сообщение
#11
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
Предложи свои варианты, меня заинтересовала тема, собственно вот еще по сабжу: http://ua.php.net/autoload Хм.. Едва-ли это поможет делу. Те же инклуды, только в другом флаконе. |
|
|
||
![]() |
![]()
Сообщение
#12
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Флаконы бывают разные... черные, белые, красные... По сабжу.
зачем такой мазохизм? можно ведь все это в одном цикле проделать. плюс у тебя есть функция __autoload(), которая с этой задачей тоже очень неплохо справляется. только есть один хитрый способ, как ее оптимизировать донельзя. тогда вышеприведенный кусок кода тебе вообще не понадобится. требование тут только одно - явный вызов конструкторов классов и полный упор на __autoload() а собственно способ вот такой:
я его использую в своей системе... это пока первая мысль. появятся еще - отпишу Да что вы все на инклудах зациклились? Они были, есть, и будут есть... Сообщение отредактировал Youshi - 2008-12-14, 23:29 |
|
|
||
![]() |
![]()
Сообщение
#13
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
Вобщем-то того участока кода уже нет. Сейчас все выглядит так:
Это тоже мазохизм? Спасибо за функцию автолоада - почерпну идею ![]() |
|
|
||
![]() |
![]()
Сообщение
#14
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Ну у меня старая версия ))))) - это, я думаю, ни к чему. PCRE - довольно затратная штука. а если кто-то умудрится залить тебе в папку с классами какую-нить гадость, ..... сам понимаешьнаверное стоило бы заменить ее на обычные строковые функции - только для того, чтобы выделить имя класса. к тому же часть работы за нее уже сделаа glob require_once работает медленнее, чем обычный require. а в данном контексте ты ну никак не сможешь подключить один и тот же класс дважды. если полностью перейдешь на использование __autoload () для загрузки всех остальных классов, то вообще беспокоиться ни о чем не надо будет, т. к. она вызывается только, если класс еще не подключен. Сообщение отредактировал Youshi - 2008-12-14, 23:50 |
|
|
||
![]() |
![]()
Сообщение
#15
|
|
Новичок![]() Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: ![]() ![]() Всего: 8 ![]() |
Может наоборот если совпадение будет? |
|
|
||
![]() |
![]()
Сообщение
#16
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
Честно говоря, я не очень понял, о чем ты. Но если понял, то нет. Все верно. Если совпадения нет, пропускаем файл и проверяем следующий. |
|
|
||
![]() |
![]()
Сообщение
#17
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
После манипуляций получилось:
|
|
|
||
![]() |
![]()
Сообщение
#18
|
|
Любитель![]() Группа: Разработчики Сообщений: 118 Регистрация: 2008-12-14 Из: Россия. Астрахань Репутация: ![]() ![]() Всего: 8 ![]() |
А как насчет вот такой конструкции: если конечно я правильно понял логику
|
|
|
||
![]() |
![]()
Сообщение
#19
|
|
Новичок![]() Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: ![]() ![]() Всего: 8 ![]() |
тогда я не понял ее смысл... если у него условия else нету, то так намного проще |
|
|
||
![]() |
![]()
Сообщение
#20
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
Youshi, смысл в чем: если $init_other_classes===true, мы грузим все классы, кроме тех, которые указаны в $classes; если же $init_other_classes===false - мы грузим только классы, находящиеся внутри $classes
|
|
|
||
![]() ![]() |
![]() |
Текстовая версия | ![]() ![]() ![]() ![]() |