Вопрос по структуре скрипта и производительности

KIRALEX

Новичок
Вопрос по структуре скрипта и производительности

Я пишу свою CMS и меня последнее время замарачивает несколько вапросов

1) Сколько одновременно работающих классов не будут влиять на память и производительность?
Сколько вообще классы занимают памяти и сколько ее всего доступно скрипту

2) Я использую конструкцию работы с классами использующуюю рекурсивный обьект
например
$CMS->obj->db->obj->cache->db->ита возможно до бесконечности обращаться ковсем классам

Как это влияет на память и работу системы? При создании второго обьекта методом ссылки это удваивает потребляемую память?

3) Как лучше писать функции?
a) Несколько огромных универсальных функций внутри класса каторые используют большие конструкции IF или много функций каторые также расположены в классе
б) Насколько будет тормазить скрипт если большая часть функций будут использовать функции в других классам по методам рекурсивного обьекта?
4) Во сколько строк CMS должна быть чтобы сохранялась отличная скорость работы? 10000 строк 100000 строк?
5) Влияет ли на производительность красиво форматированный код и обилие комментариев?

Спасибо за внимание
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
А тестировать не модно?

Сколько вообще классы занимают памяти и сколько ее всего доступно скрипту
[m]pnpinfo[/m]
[m]memory_get_usage[/m]
 

Апокалипсис

тех дир matras.ru
KIRALEX

$CMS->obj->db->obj->cache->db-> - это изврат какой-то.
Посмотрели бы хотябы примеры CMS или фрэймеворков.
 

phpdev2007

Новичок
KIRALEX
начните с тз, по вашей cms, потом с почасового плана, после чего я думаю у вас пропадет эта бредовая идея.
(c) phpdev2007
 

Alexandre

PHPПенсионер
1) преждевременная оптимизация - это зло.
1) Сколько одновременно работающих классов не будут влиять на память и производительность?
Сколько вообще классы занимают памяти и сколько ее всего доступно скрипту
лучше всего замерить... сервера у всех разные, да и загрузка на них разная, по этому и результаты могут быть разные..
2) Я использую конструкцию работы с классами использующуюю рекурсивный обьект
например $CMS->obj->db->obj->cache->db->ита возможно до бесконечности обращаться ковсем классам
Как это влияет на память и работу системы?
Естественно отрицательно.
При создании второго обьекта методом ссылки это удваивает потребляемую память?
в пхп5 все объекты передаются по ссылке, память не удваивается, а увеличивается на один указатель на объект (вернее на два... )
) Насколько будет тормазить скрипт если большая часть функций будут использовать функции в других классам по методам рекурсивного обьекта?
что за метод рекурсивного объекта? вообще-то все определяется замерами....
Не забывай про распространенный антипаттерн "избыточная сложность"
4) Во сколько строк CMS должна быть чтобы сохранялась отличная скорость работы? 10000 строк 100000 строк?
Во первых - это зависит от тебя, как ты "криво" написал свою ЦМС.
Второе, что понимается по фразой "отличная скорость работы"? могу сказать, что идеальная скорость работы скрипта 5 миллисек. если уложишься в 20, то тоже молодец. 100 - тоже не плохо... Но где-то считается, что если скрипт отдается за одну сек - это вообще прекрасно.
Вот видишь, у всех критерии разные. Определись, на сколько хитов (хостов) в день расчитана твоя ЦМСка. Учти, что пиковая нагрузка в час может составлять до 25-50% от суточных посещений. расчитай, Возможное кол-во посещений в час, мин, сек.... Отсюда можно вычислить среднее время отдачи скрипта.
замерь скорость скрипта, сделай расчеты....
5) Влияет ли на производительность красиво форматированный код и обилие комментариев?
Да, но не так сильно, чтоб на этом экономить.
 

Xeon303

Новичок
1) Вообще-то на производительность и память будет влиять любая строчка кода, только вопрос как, а не сколько?
Память занимают объекты, а не классы. Для этого нужно посмотреть в свой код и прикинуть сколько нужно памяти под каждое свойство класса.
2) изварат, однозначно. По поводу ссылок... Вы вообще документацию читать пробовали? Вы инициализируете объект или передаете его ссылкой?
3) Чтобы писать хорошие функции нужно усердно шевелить мозгами, генерируя замысловатые конструкции кода. Можно вообще всю систему сплошным кодом написать, в один скрипт. Можно каждую строчку превратить в функцию. НУ НЕТ В ПРОГРАММИРОВАНИИ ПАНАЦЕИ ОТ ВСЕХ БОЛЕЗНЕЙ. Поэтому приходится платить программистам.
4) А вы знаете что посадить сервер (ну по крайней мере скрипт) можно 3-5 строками кода? Вот и делайте выводы, что дело не в объеме кода, а в его качестве...
5) Влияет :) на производительность читающего ваш код человека.
 

KIRALEX

Новичок
Я вижу большинство людей смутил мой рекурсивный обьект $CMS->obj

Я принцип его работы подсмотреть во всеми известном скрипте IPB и думаю что это очень удобно при работе с классами

скажем у нас есть главный класс

PHP:
class MAIN
    var $obj = '(Object)'; # Покачто строка

    function __construct()
    {
        $this->obj->main =& $this;
    }

    function load_class( Имя класса, Путь до файла его нахождения )
    {
        # Загружаем файл
        # И подцепляем обьект к рекурсивному обьекту
        $this->obj->Имякласса =& new Имя класса;
        $this->obj->Имя класса->obj =& $this->obj;
    }
Таким образом все загруженные классы будут иметь обьект через который можно обратиться ко всем классам
Ведь через метод Имя класса::Метод() нельзя вызывать другие классы и даже более обращаться к переменным вызываемого класса.

скажем загрузили класс DB и он уже будет находиться в рекурсивном обьекте
$this->obj->db
Или кеширование
$this->obj->cache

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

Поэтому мне и надо было узнать насколько это сажает систему

Ну а скрипт убить легко одной строкой чтото вроде while( true ) {}и мускул выполняя в цикле выборку строк подключаясь и отключаясь)))

Опыт программирования у меня 3года
 

fixxxer

К.О.
Партнер клуба
если такое удобно - лучше вообще не пользоваться классами, хватит функций и конструкции global.

ipb это не лучший пример для подражания.
 

A1x

Новичок
у меня чем-то похожая идея в структуре фреймворка
ну ниче работает вроде.

где-то так страница исполняется без нагрузки на сервере
execution time: 0.2542200088501 sec; SQL queries: 13; memory usage: 2905816
 

cDLEON

Онанист РНРСlub
Ведь через метод Имя класса::Метод() нельзя вызывать другие классы и даже более обращаться к переменным вызываемого класса.
Синглтоны использывать не пробывали?
 

A1x

Новичок
Автор оригинала: KIRALEX
Я вижу большинство людей смутил мой рекурсивный обьект $CMS->obj
еще бы не смутил - это вы сами такое название придумали "рекурсивный обьект" ? :)


Автор оригинала: KIRALEX
Ведь через метод Имя класса::Метод() нельзя вызывать другие классы и даже более обращаться к переменным вызываемого класса.
классы вообще нельзя вызывать - их можно объявлять, создавать или загружать (что одно и то же)
вызывать можно функции и методы
 

KIRALEX

Новичок
великий могучий смысл в этом есть?
Смысл в том чтобы было все гениально просто в работе
еще бы не смутил - это вы сами такое название придумали "рекурсивный обьект" ? :)
Да я назвал это рекурсивный обьект потомучто он и в самом деле некурсивный и содержит сам себя
Рекурсии бывают нетолько в функциях
Скажем есть рекурсивный массив $GLOBALS который содержит сам себя $GLOBALS['GLOBALS']['GLOBALS'] итд


у меня чем-то похожая идея в структуре фреймворка
ну ниче работает вроде.

где-то так страница исполняется без нагрузки на сервере
execution time: 0.2542200088501 sec; SQL queries: 13; memory usage: 2905816
Ваш ответ меня совсем не утешает, посколько это ацки большое время генерации скрипта. Да и зачем 13 запросов в БД?

ipb это не лучший пример для подражания.
Предложите лучший вариант для подражания...

И вообще начнем с того как лучше всего писать код для производительности и удобства использования
Без бесконечных extract($GLOBALS) и global $db_link, $config итд...
Чтобы была свабода разработки модулей вплане не захламленности кода переменными и уже зафильтрованными глобальными массива и кучей функций API
 
Сверху