appelle function_exists () plus vite ou plus lentement que apply_filters ()

4

L'appel de function_exists () est-il plus rapide ou plus lent que apply_filters () ... ou la différence est-elle si petite qu'elle ne devrait pas être prise en compte?

J'ai effectué quelques tests basés sur ceux de Kaiser et ils ont montré que function_exists () est environ 3 fois plus rapide lorsque la fonction et le filtre existent. et environ 11 fois plus rapide si le filtre n'existe pas. Je ne m'y attendais pas.

function taco_party() {
    return true;
}

add_filter( 'taco-party', 'taco_party' );

timer_start();
for ( $i = 0; $i < 1000000; $i++ )  {
    $test = apply_filters( 'taco-party', '' );
}
echo( 'Seconds: ' . timer_stop( 0, 10 ) . '<br />' );

timer_start();
for ( $i = 0; $i < 1000000; $i++ )  {
    if ( function_exists( 'taco_party' ) ) {
        $test = taco_party();
    }
}
echo( 'Seconds: ' . timer_stop( 0, 10 ) . '<br />' );

N'oubliez pas que chaque méthode est exécutée 1 000 000 fois, ce qui est considérable. Chaque méthode exécutée une fois se termine très, très rapidement:

Test 1: 0.0000491142
Test 2: 0.0000140667

Je conclurais que la différence n'est pas un problème.

    
posée mfields 24.06.2011 - 16:44

4 réponses

6

Je ne sais pas si l'un est plus rapide ou plus lent que l'autre, mais je suggérerais que l'utilisation de apply_filters() est l'approche meilleure , car elle est plus propre . , et plus intuitif (dans le sens de faire les choses à la "manière WordPress").

MODIFIER

Si vous effectuez des tests de comparaison, ne comparez pas le temps requis pour exécuter les tâches suivantes:

Ceci:

<?php
if ( ! function_exists( 'taco_party' ) ) {
    function taco_party( $salsa = true ) {
        return $salsa;
    }
}

function taco_party( $salsa = true ) {
    return $salsa;
}
?>

Versus This:

<?php
function taco_party( $salsa = true ) {
    return apply_filters( 'taco-party', $salsa );
}
function hot_salsa() {
    $salsa = true;
    return $salsa;
}
add_filter( 'taco-party', 'hot_salsa' );
?>

Ce n'est pas seulement le temps nécessaire pour vérifier l'existence de la fonction ou du filtre, mais plutôt le temps nécessaire pour faire quelque chose .

    
réponse donnée Chip Bennett 24.06.2011 - 16:53
0
  

Clause de non-responsabilité: les numéros ne proviennent pas d'une installation non vanille et pourraient donc être inférieurs des deux côtés.

WordPress a ~ 2.700 fonctions & ~ 250 actions attachées dans global $wp_filter;

Donc, le Q pourrait être:

  

La répétition des fonctions existantes (à ce stade) est-elle plus rapide que celle du groupe de filtres liés?

Les filtres / crochets sont le moyen le plus rapide, le plus sûr et le plus facile à remonter. Mon choix serait les filtres.

    
réponse donnée kaiser 24.06.2011 - 18:59
0

Ok, après avoir exécuté plusieurs tests 1) , je constate que has_filter prend environ 20% plus de temps que l'installation de function_exists :

// You have to uncomment one or the other to run the test
// don't run timer_xy() functions behind each other - the result is then wrong
timer_start();
$output = ' false ';
for ( $i = 0; $i < 1000000; $i++ ) 
{
    // if ( function_exists('wp_login') ) $output = ' true ';
    if ( has_filter( 'shutdown' ) ) $output = ' true ';
}
echo $output;
echo('Seconds: ' . timer_stop(0,10) . '<br />');

1) C'est le code que j'ai utilisé pour tester. Il a été placé en haut du fichier functions.php

    
réponse donnée kaiser 24.06.2011 - 21:29
0

Vous parlez de micro-optimisations ici. Stick to apply_filters est plus facile à utiliser et permet à l’utilisateur final d’ajouter du contenu avant / après la sortie de la fonction s’il le souhaite sans copier la totalité de la fonction s’il le souhaite. Ne craignez rien de gagner 0,000001 secondes sur quoi que ce soit. Concentrez-vous toujours sur un code propre, facile à lire et modulaire. PHP continue de plus en plus vite avec chaque mise à jour et les sites WordPress devraient quand même utiliser des fonctions de cache pour renvoyer du code statique, la micro-optimisation n’est donc qu’une perte de temps et de stress;)

    
réponse donnée WPExplorer 19.02.2018 - 17:57

Lire d'autres questions sur les étiquettes