Классы или функции. Скорость исполнения кода.

440hz

php.ru
Классы или функции. Скорость исполнения кода.

Какова разница скорости выполнения кода, когда реалицация выполняется функциями или классами? Да и есть ли она? Вернее сущствена или можно об этом и не думать?

PHP:
$db  = mydb_create();
mydb_select($db,'SELECT');

$db = new MyDb();
$db->Select();
 

440hz

php.ru
Tor
тогда можно считать, что в принципе на эту "проблему" можно забить и не париться?
 
чаще всего, наскольно я знаю, объекты чуть-чуьт медленне... но эта разница - очень мала....

[offtop]
з.ы. как-то в нет-е читал один большой тест:
сравнивали компиляторы:

delphi
ms vs 6.0
ms vs 7.0
intel c
...

так вот в одном из тестов это и было наглядно видно, т.е. разница....
[/offtop]
но в общем случае:
можно забить и не париться
 

svetasmirnova

маленький монстрик
>чаще всего, наскольно я знаю, объекты чуть-чуьт медленне...
Это заблуждение.
 

Лисю

Guest
Сначала надо понимать, для чего нужны классы. Ибо в некоторых моментах без классов жить очень тяжело прихордится. Тогда подобные вопросы сразу отпадут, ибо они станут бессмысленными и не актуальными.
 

440hz

php.ru
Автор оригинала: Лисю
Сначала надо понимать, для чего нужны классы. Ибо в некоторых моментах без классов жить очень тяжело прихордится. Тогда подобные вопросы сразу отпадут, ибо они станут бессмысленными и не актуальными.
я то это понимаю, а вот "некоторые" говорят, что все можно сделать на фунциях и что они быстрее. =) акцентируясь на "быстрее". про удобство классов я просто молчу.
 

kvf77

Red Devil
440hz

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

.::PhoenikS::.

Новичок
Вообще вызов объектных методов немного медленнее. Можно проиллюстрировать
PHP:
abstract class xDebug {
  static private $labels = array();
  static private $rndID = 1;

  static function getSeqID() {
    return self::$rndID++;
  }

  static function getTime() {
    list($usec, $sec) = explode(" ", microtime());
    return ((double)$usec + (double)$sec);
  }

  static function startLabel($label) {
    self::$labels[$label] = array();
    self::$labels[$label]['start'] = self::getTime();
    return self::$labels[$label]['start'];
  }

  static function endLabel($label) {
    self::$labels[$label]['end'] = self::getTime();
    self::$labels[$label]['total'] = (self::$labels[$label]['end'] - self::$labels[$label]['start']);
    return self::$labels[$label]['total'];
  }
}

class test {
  function t() {
    return 1;
  }
  function __call($z, $zz) {
    return 1;
  }
}

function t() {
  return 1;
}

$testclass = new test();

// __call
xDebug::startLabel('zz');
for ($i=0; $i < 1000; $i++) {
  $cnt += $testclass->x();
}
echo xDebug::endLabel('zz'), '<br>';

//method
xDebug::startLabel('zz');
for ($i=0; $i < 1000; $i++) {
  $cnt += $testclass->t();
}
echo xDebug::endLabel('zz'), '<br>';

// function
xDebug::startLabel('zz');
for ($i=0; $i < 1000; $i++) {
  $cnt += t();
}
echo xDebug::endLabel('zz'), '<br>';

// math
xDebug::startLabel('zz');
for ($i=0; $i < 1000; $i++) {
  $cnt+=1;
}
echo xDebug::endLabel('zz'), '<br>';
Будет достаточно хорошо видно, что оверхед есть
Последний цикл просто для того, чтобы было видно, сколько собственно занимает сложение
 

SiMM

Новичок
> можно, но кривизна будет немерянная + код разрастётся до немыслимых размеров.
Делать подобные категоричные заявления - это по крайней мере надо с головой не дружить. Всё зависит от решаемых задач. И именно от них зависит, какое из решений будет "кривизной и разросшимся кодом".
 
svetasmirnova
Автор оригинала: svetasmirnova
>чаще всего, наскольно я знаю, объекты чуть-чуьт медленне...
Это заблуждение.
это довольно спорный вопрос, тем более в случае пхп (интерпретатор)

имхо, логично, что при анализе кода гораздо больше времени уходит на анализ связей объектов, чем на простой вызов ф-ции...
 

master_x

Pitavale XXI wieku
кто делает категоричные заявления в пользу одного их методов, явно не имеет опыта работы с этими методами, т.к. можно одинаково легко, прямыми руками написать программу в процедурном стиле или при помощи ООП. По-моему данный вопрос не раз поднимался. Те, кто говорит, что ООП медленее, и переходят из-за этого на процедуры, экономят на спичках, и чаще всего не понимают ООП. Те, кто говорит, что
кривизна будет немерянная + код разрастётся до немыслимых размеров.
при использовании процедурного программирования, просто имеют КРИВЫЕ РУКИ. Любую задачу можно одинаково решить при помощи одного из вышеперечисленных методов. Те кто пытается спорить по этому вопросы, просто провоцируют людей на флейм и реально имеют чисто субъективное мнение по этому вопросу, опять же зависящее от кривизны_рук.
 

pachanga

Новичок
Мне кажется любой мало-мальский запрос к внешнему источнику данных, скажем БД, с лихвой сводит на нет все потуги "оптимизировать" ООП код процедурным.
 

Screjet

Новичок
имхо, все програмеры начинат с оптимизации чего либо :)
А только некоторое время спустя начинают понимать, что экономия времени и рабочий результат значительно важнее оптимизации вообще.
 

Фанат

oncle terrible
Команда форума
.::phoenikS::.
ты не умеешь тестировать.
поэтому оверхеду твоему - грош цена
 

svetasmirnova

маленький монстрик
Loshadka
А ты протестируй. Функциональный и ООП подход на PHP. Я сюда кстати результаты бенчмарков около года назад постила. Можешь поискать. Кстати, в какой-то теме споривший со мной neko доказал почему так. Искать лень.
.::phoenikS::.
В твоём тесте исключительно статические методы. Сделай тест с динамическими методами и результат сюда.
 
Сверху