Когда-то, когда изучал C++, там писали, что передача аргумента в функцию по ссылке быстрее, т.к. если ее передавать не по ссылке происходит копирование, а на это тратиться время и ресурсы. Опустим момент, что передача по ссылке и просто передача аргумента это немного разные вещи (да-да, я в курсе что данные переданные по ссылке при редактировании изменят и оригинал т.к. указатель указывает на один и тот же адрес в памяти). решил тут затестить что то типа (меняя function test($val) и function test(&$val)): Код (PHP): $str = '..'; // текст на 10 000 символов function test($val) { $z = $val; } $start = microtime(true); for ($i = 0; $i < 10000; $i++) { test($str); } $end = microtime(true); echo $end - $start; И выяснилось что если передавать по ссылке, то по времени это дольше чем просто передавать аргумент. потом решил решил еще затестить по выделяемой памяти и оказалось что тоже самое, со ссылкой больше, примерно такое накрутил: Код (PHP): $str = ''; for ($i = 0; $i < 10000; $i++) { $str .= "<div>{$i}</div>"; } function test( $s ) { echo '<p>in function, start: ' . memory_get_usage() . '</p>'; $z = $s; echo '<p>in function, end: ' . memory_get_usage() . '</p>'; } echo '<p>before function: ' . memory_get_usage() . '</p>'; test( $str ); echo '<p>after function: ' . memory_get_usage() . '</p>'; echo '<p>memory_get_peak_usage: ' . memory_get_peak_usage() . '</p>'; результаты у меня были такие, простая передача (с копированием): по ссылке: Вопрос скорее не "как так?", а все же как более производительно передавать аргументы по ссылке или просто, а то я может что то не то натестировал. PS вопрос возник просто ради любопытства, ну и еще я не равнодушен к производительности.
Re: Производительность - передача аргумента просто и по ссыл Для PHP я бы и не стал делать такие тесты - для того, чтобы проверить что-то подобное, надо смотреть, как это реализовано в интерпретаторе, т.е. полазить по исходникам PHP. В C++ передавать по ссылке примитивные типы тоже большого смысла нет - другое дело, объекты (кстати, в php они всегда по ссылке передаются), массивы, структуры. Думаю, для PHP тоже должно быть верно.
Re: Производительность - передача аргумента просто и по ссыл В который раз вижу что не с того конца начинаете господа. По моему вы как то не представляете что вы разрабатываете. 1. Сайт это приложение написанное на одном из серверных языков программирования. В данном случае php. 2. Та часть которая видна пользователю написанна на html js. Js используют для того что бы повысить отзывчивость приложения и снизить нагрузку на сервер. При аякс запросах не грузятся многие картинки css и т.д. что позволяет серверу оптимальнее расходовать ресурсы. Что из себя представляет сайт? Это скрипты которые просто тупо подключаются к базе берут данные и формируют html который и видит пользователь. Создать html по сути быстрое дело, ну если вы конечно не выполняете по ходу сверх сложных вычислений траекторий для межгалактических путешествий. Первым узким местом бывает в большенстве случаев база данных, так как там чаще всего можно встретить не правильную архитектуру отсутствие индексов и т.д. что приводит к анализу большого количества строк. С увеличением посещаемости сайта сайт начинает сильно тормозить. Для php вполне сойдет отсутствие не нужных циклов и не нужных действий, пряморукость разработчика и акселератор для создания байт кода что бы интерпритатор пхп при каждом чихе как минимум не проверял синтаксис скриптов а сразу приступал к их выполнению. Передаешь ты по ссылке или объектом на мой взгляд не даст никогда ощутимого прироста поэтому и заморачиваться не стоит.
Re: Производительность - передача аргумента просто и по ссыл Данные в ПХП передаются по принципу COW. Т.е. когда вы передаете аргумент - копирования не происходит, только в момент изменения.
Re: Производительность - передача аргумента просто и по ссыл ну что за привычка, распространять факты из одного языка в другой. для c++ быстрее - для php медленнее(но не всегда). это совсем разные языки. и внутри работают поразному. php более высокоуровневый. и заморачиваться об этом просто ненужно. и так все оптимизировано для скорости работы. передавай как обычно. php сам все сделает в лучшем виде. тогда не трать время на эти бессмысленные тесты, а изучай внутренности zend engine. понимание особенностей работы оградит от нерационального кода. можно написать скрипт, где будет явная передача по ссылке - и код будет быстрее чем без нее. так что все относительно. все зависит от задачи.
Re: Производительность - передача аргумента просто и по ссыл Совсем забыл ответить, спасибо за разъяснения.
Re: Производительность - передача аргумента просто и по ссыл И еще совет. Задумываться об оптимизации на ссылках надо тогда, когда: 1) У тебя идеально продумана архитектура. 2) Код пережил уже столько циклов рефакторинга, что сам факт его существования делает вселенную лучше. 3) У тебя идеально организована БД. 4) У тебя уже нет денег на строительство новых датацентров для горизонтального масштабирования, а свою виртуальную машину для пыха "круче-чем-у-фейсбука" ты уже лет 5 как написал. 5) Ты уже не знаешь, куда дальше переписывать собственноручно ядро ПХП, потому что его код..см пункт 2. 6) Ты уже даже заменил все двойные кавычки на одинарные везде, где можно. Вот тогда можно начинать задумываться о ссылках/значениях.
Re: Производительность - передача аргумента просто и по ссыл Не могу согласиться. Хочу сразу привести простой пример. Я сейчас на даче, Интернет быстрый, компьютер стареньки - Celeron 3 1400mhz. Часто захожу на два форума, один навороченный, там, видимо, и ajax и куча всего- компьютер сходит с ума. Грузится все с трудом. Работать невозможно. Хожу на php.ru. Подозреваю, что здесь кроме самого php и немного js ничего нет. Все работает прекрасно. Я понимаю, что речь, конечно, не о технологиях. Но как пользователь, я вижу, что с этим форумом могу работать с другим - нет. Думаю, это объясняется тем, что разработчики позаботились об оптимизации, а заодно проработали вопрос избыточности функционала и скорости работы. Поэтому, по моему скромному мнению, In my humble opinion, как говорят англичане, имхо, об оптимизации нужно думать всегда. Оптимизация, безопасность, скорость, мера функционала. Без этого никуда, и думать об этом желательно заранее.
Re: Производительность - передача аргумента просто и по ссыл А при чем тут перегруженность клиента, заставляющая браузер сжирать машину, и ссылки/значения как способы передачи аргументов? Речь идет именно о них, а не об настоящей оптимизации.
Re: Производительность - передача аргумента просто и по ссыл А такое бывает? Там, где автор кода видит любую возможность оптимизации, даже незначительную, лучше ее выполнить. Из таких незначительностей складывается сама оптимизация. А сумма условий, описанная в ваших пунктах, для 90 процентов программистов не является достижимой.
Re: Производительность - передача аргумента просто и по ссыл оптимизировать можно бесконечно, так как всегда найдется кусок кода который можно улучшить. но в реальном мире заниматься бесконечно этим нельзя. время отведенное на проект - ограниченно. бюджет тоже четко определен на виды работ - а заниматься бесплатно этим не имеет смысла. преждевременная оптимизация тоже зло - ибо заранее неясно где на самом деле будет самый большой затык в проекте, да и в условиях постоянно меняющегося ТЗ, то что ты наоптимизировал - могут тупо выкинуть из проекта и переключиться на чтото другое. оптимизация делается всегда после релиза. т.е сначала сделай функционал. опробуй его. и если выявится плохое - оптимизируй. но опять же не везде. а именно там где самые большие тормоза. а оптимизация ради оптимизации - очень редко имеет смысл.
Re: Производительность - передача аргумента просто и по ссыл Именно! Теперь почитай про сарказм и поймешь всю глубину замысла, с которым был написан тот пост.