Здравствуйте! В joomla глобально передаю несколько переменных. Сначала задаю их в шаблоне: PHP: $app = JFactory::getApplication(); $option = $app->input->getCmd('option'); $myvarname1 = 'some_calculated_value'; $myvarname2 = 'some_calculated_value'; $myvarname3 = 'some_calculated_value'; $app->setUserState( $option . '.myvarname1' , $myvarname1); $app->setUserState( $option . '.myvarname2' , $myvarname2); $app->setUserState( $option . '.myvarname3' , $myvarname3); а потом принимаю их в любом месте (компоненте, модуле и т.д.) PHP: $app = JFactory::getApplication(); $option = $app->input->getCmd('option'); $myvarname1 = $app->getUserState( $option . '.myvarname1'); $myvarname2 = $app->getUserState( $option . '.myvarname2'); $myvarname3 = $app->getUserState( $option . '.myvarname3'); Насколько критично, что я передаю 3 переменных отдельно в плане скорости? Может передавать их одним массивом будет быстрее? Спасибо.
Думал, что массив легче - одна переменная с множеством значений. А так множество переменных с множеством значений. Спасибо.
setUserState и getUserState в Joomla это методы работы с сессией это для уточнения (они могут и в базу писатся в зависимости от настроек, тогда ваш сеттер это плюс 1 запрос) this в шаблоне это класс Document. И это класс "одиночки" Singleton вы можете писать тогда так PHP: $this->test = 'AAAA'; // И получать где надо $doc = JFactory::getDocument(); echo $doc->test; // AAAA'
А хранятся эти "множества значений" в астрале? Раз на то пошло, то, грубо, массив, содержащий 2 значения будет весить больше, чем 4 обычные переменные. Потому что хэндлер, указатели, прочую подкапотную механику массива тоже надо хранить. Потому что за динамичность надо платить. Потому что аллокация новой памяти - это дорого. По этому массивы в PHP аллоцируют память не по запросу, а про запас. По степени двойки. Когда очередной чанк заполняется, массив просит откусить ему еще столько же памяти, сколько в нем на данный момент. Массивы или переменные юзать - это не вопрос скорости или затрат памяти. Это вопрос правильности. Массив - абстрактное n-размерное m-мерное хранилище. Переменная - это просто значение в памяти. У них в принципе разные задачи.
есть вопросы гораздо более критичные. например - не потеряет ли код в читабельности если там будет массив - не изменяешь ли ты существующий API (что повлечёт лавину изменений) и т.д. а скорость массив/не массив это фигня вопрос ) библиотеки и фреймворки накладывают такой оверхед в качестве платы за удобство, что твои три переменные это ни о чём
а тогда вот такой вопрос, что легче функция или переменная, т.е. к примеру, у меня на каждую страницу прикручивается шапка, но title для каждой страницы разный, я захотел сделать так внутри header PHP: <title><?php echo $title; ?></title> , а на каждой странице PHP: <?php $title = 'Заголовок страницы'; include $_SERVER['DOCUMENT_ROOT'].'...header.php'; ?> или может быть сделать функцию, типа PHP: function title(){ echo 'Заголовок страницы';} Это, конечно, частный случай, но в общем и целом в более сложных манипуляциях какой практикой пользоваться лучше?
Гладиолус. Не страдай фигней Как в текущей ситуации в твоем проекте правильнее, так и делай. Это даже не экономия на спичках уже. Это какая-то новая форма мании. И это говорю тебе я - человек, готовый за каждый килобайт оперативы и миллисекунду выполнения удавиться, да. Все должно быть в меру. --- Добавлено --- P.S. Функция, внутри которой выполняется echo, само собой будет чуть дороже, чем просто echo. Ну просто потому что обертка всегда дает оверхед. Другое дело, что это "дороже" исчисляется в миллионных долях секунды и в считанных байтах оперативы. --- Добавлено --- P.P.S. Учитывай также, что PHP7+, в отличие от 5+, иначе работает с памятью. Выше было сказано про то, что массивы в пыхе хапают память прозапас, чтобы не тратить время на аллокацию при каждом наращивании. Так вот, семерка так работает в принципе. Когда ты стартуешь скрипт, пусть в нем вооооообще ничего нет, он автоматом откусывает 2 метра оперативки. А потом откусит еще. Тупо вот потому, что откусить разом 2 метра оперативки прозапас - выгоднее, чем клянчить ее по чуть чуть. Оперативка дешевле процессорного времени. Вот и все. Так что забей на спички. Пока укладываешься в 2 метра, тебе вообще пофиг должно быть. Плюс там сейчас фиг угадаешь, какие оптимизации хреначит интерпретатор под капотом. Разрабы пыхи загоняются в этом плане, нонче, не хуже ребят из интела, пилящих свои православные компиляторы.
читал что php с 7 версии гораздо лучше за собой убирает, а, так вот я смотрю, создаю массив - 2 метра, 100 переменных циклом 2 метра, 1000 функций, там один хер 2 метра, непонятно было. спс P.S.: о, нашел как вывести, в общем 400152 - 400256 - 400416 это в байтах же, 400152 - скрипт 400256 - скрипт + переменная $d=4; 400416 - скрипт + функция с echo = 4; получается функция на 150 байт тяжелее переменной что ли
Я тоже удивился поначалу, когда на семерку перешел. Думал, что косяк в настройках или у меня что-то не так. Потом расследовал это дело, оказалось, что это норма и все ок. Ну...ок так ок, разрабам пыхи виднее. Учитывая, что семерка работает быстрее пятерки, и сильно, я могу простить ей 2 метра на вызов, длящийся тысячные доли секунды.