Maison  >  Article  >  développement back-end  >  Voyons si les restrictions de type de fonction PHP7 ont un impact sur les performances ? (Discussion test)

Voyons si les restrictions de type de fonction PHP7 ont un impact sur les performances ? (Discussion test)

青灯夜游
青灯夜游avant
2022-02-15 10:35:392230parcourir

PHP7La limitation du type de fonction a-t-elle un impact sur les performances ? L'article suivant parlera de l'impact sur les performances des paramètres de restriction du type de données des fonctions PHP7. J'espère qu'il sera utile à tout le monde !

Voyons si les restrictions de type de fonction PHP7 ont un impact sur les performances ? (Discussion test)

Cet article utilise principalement un simple test de stress pour explorer l'impact de la définition ou de la non limitation du type de données de la fonction PHP7 sur les performances. De plus, je partagerai les problèmes mineurs que j'ai rencontrés dans mes deux emplois et comment les résoudre. avec eux. S'il y a des erreurs, veuillez me corriger.

Limitation du type de fonction PHP7

(1) Introduction

  • La limitation du type de paramètre de fonction (y compris la valeur de retour, l'attribut de membre) est prise en charge depuis PHP5, mais il n'y a pas beaucoup de types pris en charge par PHP7 qui l'a étendue : int/. string /bool/object etc.
  • fonction

    • pour éviter les appels incorrects, indiquer le type et ne transmettre que des paramètres du même type, surtout lorsque plusieurs personnes développent en collaboration.

      Apprentissage recommandé : "Tutoriel vidéo PHP"

    • Si le type de données ne peut pas être converti automatiquement, comme suit, bien sûr, le principe est que le type à convertir peut être converti normalement
    • Et cet article concerne le impact des restrictions de type de test sur les performances
    function testInt(int $intNum){
      var_dump($intNum);
    }
    testInt("123"); // int(123)
  • Remarque : si les paramètres et les valeurs de retour sont incohérents avec le type défini, une erreur sera signalée. Si elle n'est pas confirmée à 100 %, elle doit être convertie manuellement
  • .

(2) Test de stress

  • Environnement d'exécution

    • PHP 7.2.2.
    • Laravel 5.8
    • AB 2.3
  • Configuration autonome

    • Nom du modèle MacBook Pro
    • Nom du processeur Quad-Core Intel Core i7
    • Mémoire 8 Go
    • Nombre total de cœurs 4
  • AB

    • Utilisez AB (Apache Benchmark) pour les tests de résistance Puisqu'il ne s'agit pas d'un test de résistance formel, nous nous soucions uniquement de. l'indicateur complet ici : Requêtes par seconde (nombre moyen de requêtes par seconde)
    • Paramètres principaux

      • -n Stress testing Nombre de requêtes
      • -c Nombre de simultanéité
      • -p Précisez le fichier portant les paramètres requis lorsque faire une requête POST
      • -r Ne pas quitter lorsque vous rencontrez une réponse d'erreur. Le système d'exploitation dispose de mesures de protection contre les attaques à haute concurrence (apr_socket_recv : connexion réinitialisée par un homologue)
  • Configurer le projet Configurer deux interfaces POST sans entreprise logique, opérations middleware, etc., comme suit
/***** 1 普通接口 *****/
// CommonUserController
public function createUser(Request $request)
{
    $this->validate($request, [
        'name' => 'required|string',
        'age'  => 'required|integer',
        'sex'  => ['required', Rule::in([1, 2])],
    ]);
    (new CommonUserModel())->createUser($request['age'], $request['name'], $request['sex'], $request['address'] ?? '');
    return response()->json(['status' => 200, 'msg' => 'ok']);
}
// CommonUserModel
public function createUser($sex, $age, $name, $address)
{
    if(empty($sex) || empty($age) || empty($name))  return false;
    // 省略DB操作
    return true;
}

/***** 2 类型限定接口 *****/
// TypeUserController
public function createUser(Request $request): JsonResponse
{
    $this->validate($request, [
        'name' => 'required|string',
        'age'  => 'required|integer',
        'sex'  => ['required', Rule::in([1, 2])],
    ]);
    (new TypeUserModel())->createUser($request['age'], $request['name'], $request['sex'], $request['address'] ?? '');
    return response()->json(['status' => 200, 'msg' => 'ok']);
}
// TypeUserModel
public function createUser(int $age, string $name, int $sex, string $address): bool
{
    if(empty($sex) || empty($age) || empty($name)){
        return false;
    }
    // 省略DB操作
    return true;
}

(3) Implémentation

  • Un total de cinq tests de stress ont été effectués, et la configuration et les résultats sont affichés comme suit (supprimés uniformément) :| ')
/*****第一次*****/
// 类型限定接口 rps=456.16
ab -n 100  -c 10 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=450.12
ab -n 100  -c 10 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/common/create_user

/*****第二次*****/
// 类型限定接口 rps=506.74
ab -n 1000  -c 100 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=491.24
ab -n 1000  -c 100 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/common/create_user

/*****第三次*****/
// 类型限定接口 rps=238.43 
ab -n 5000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=237.16
ab -n 5000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user

/*****第四次*****/
// 类型限定接口 rps=209.21
ab -n 10000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=198.01
ab -n 10000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user

/*****第五次*****/
// 类型限定接口 rps=191.17
ab -n 100000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=190.55
ab -n 100000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user

(4) Résultats

  • Le test de pression n'est pas trop rigoureux, les résultats sont à titre de référence seulement
  • L'amélioration des performances de la limitation de type n'est pas aussi importante que prévu, elle est très petite, mais quand même Cette façon d'écrire est recommandée

Pour plus de connaissances liées à la programmation, veuillez visiter : Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer