


Voyons si les restrictions de type de fonction PHP7 ont un impact sur les performances ? (Discussion test)
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 !
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)
Copier après la connexion - 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.
- 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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment installer l'extension mongo dans php7.0 : 1. Créez le groupe d'utilisateurs et l'utilisateur mongodb ; 2. Téléchargez le package de code source mongodb et placez le package de code source dans le répertoire "/usr/local/src/" ; Entrez le répertoire « src/ » ; 4. Décompressez le package de code source ; 5. Créez le répertoire de fichiers mongodb ; 6. Copiez les fichiers dans le répertoire « mongodb/ » 7. Créez le fichier de configuration mongodb et modifiez la configuration.

En php5, nous pouvons utiliser la fonction fsockopen() pour détecter le port TCP. Cette fonction peut être utilisée pour ouvrir une connexion réseau et effectuer certaines communications réseau. Mais en php7, la fonction fsockopen() peut rencontrer certains problèmes, comme ne pas pouvoir ouvrir le port, ne pas pouvoir se connecter au serveur, etc. Afin de résoudre ce problème, nous pouvons utiliser la fonction socket_create() et la fonction socket_connect() pour détecter le port TCP.

Pour résoudre le problème du plugin n'affichant pas installé dans PHP 7.0 : Vérifiez la configuration du plugin et activez le plugin. Redémarrez PHP pour appliquer les modifications de configuration. Vérifiez les autorisations du fichier du plugin pour vous assurer qu'elles sont correctes. Installez les dépendances manquantes pour garantir le bon fonctionnement du plugin. Si toutes les autres étapes échouent, reconstruisez PHP. D'autres causes possibles incluent des versions de plugin incompatibles, le chargement d'une mauvaise version ou des problèmes de configuration PHP.

Les solutions courantes pour les environnements de serveur PHP consistent à s'assurer que la version correcte de PHP est installée et que les fichiers pertinents ont été copiés dans le répertoire du module. Désactivez SELinux temporairement ou définitivement. Vérifiez et configurez PHP.ini pour vous assurer que les extensions nécessaires ont été ajoutées et configurées correctement. Démarrez ou redémarrez le service PHP-FPM. Vérifiez les paramètres DNS pour les problèmes de résolution.

Comment installer et déployer php7.0 : 1. Accédez au site officiel de PHP pour télécharger la version d'installation correspondant au système local ; 2. Extrayez le fichier zip téléchargé dans le répertoire spécifié 3. Ouvrez la fenêtre de ligne de commande et accédez à ; le répertoire "E:\php7" Exécutez simplement la commande "php -v".

En langage Go, les types de fonctions ont un impact significatif sur les performances. La comparaison des performances montre que les fonctions ordinaires sont les meilleures (147,08MOPS), suivies des fonctions anonymes (158,01MOPS) et enfin des fermetures (10,02MOPS). Ces types présentent différents avantages selon les scénarios : les fonctions anonymes conviennent aux rappels, les fermetures conviennent à la gestion de l'état et les fonctions ordinaires conviennent à l'optimisation des performances.

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...
