﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	blockedby	blocking
2448	"Performance: Nutzung von ""variadic functions"" (splat-Operator) anstatt call_user_func_array()"	noRiddle	somebody	"In den ''klasseModule.class.php'' für die Klassenerweiterungen wird ''call_user_func_array()'' verwendet.
Nach einigen benchmarks die man im I-Net findet wären ""variadic functions"" schneller, und zwar gar nicht unerheblich schneller.
Siehe z.B.: [https://www.php.net/manual/en/function.call-user-func-array.php#117655 PHP-Manual]
oder: [https://www.drupal.org/project/drupal/issues/2551661 Drupal issues]

Ich werde bei Gelegenheit mal eine eigene Benchmark erstellen.

Beipielcode jetzt (aus ''productModules.class.php''):
{{{
    function call_module_method()
    {
        $arg_list = func_get_args();
        $function_call = $this->function_call;
        if (is_array($this->modules)) {
            reset($this->modules);
            foreach($this->modules as $class) {
                if (is_callable(array($GLOBALS[$class], $function_call))) {
                    $arg_list[0] = call_user_func_array(array($GLOBALS[$class], $function_call), $arg_list); //Call the $GLOBALS[$class]->$function_call() method with $arg_list
                }
            }
        }
        return $arg_list[0]; //Returns only first parameter
    }
}}}

mit variadic (auch noch weniger Code):
{{{
    function call_module_method(...$arg_list)
    {
        $function_call = $this->function_call;
        if (is_array($this->modules)) {
            reset($this->modules);
            foreach($this->modules as $class) {
                if (is_callable(array($GLOBALS[$class], $function_call))) {
                    $arg_list[0] = $GLOBALS[$class]->$function_call(...$arg_list);
                }
            }
        }
        return $arg_list[0]; //Returns only first parameter
    }
}}}



Da ich's an der product-Klasse getestet habe fiel mir außerdem noch auf, daß man die Methode ''buildDataArray()'' auch mit Caching arbeiten könnte.
Auf manchen Seiten, wo Produkte mehrfach vorkommen, wegen Boxen in der linken Spalte oder Bestsellers, bringt das nochmal ein wenig.
Gehört eigtl. in ein Extra-Ticket, aber da es ebenfalls um Geschwindigkeit geht...

Gruß,
noRiddle
"	Aufgabe	new	normal	modified-shop-2.0.9.0	Shop	2.0.7.2					
