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