ホームページ  >  記事  >  バックエンド開発  >  PHP7 の関数タイプの制限がパフォーマンスに影響を与えるかどうかについて話しましょう。 (テストディスカッション)

PHP7 の関数タイプの制限がパフォーマンスに影響を与えるかどうかについて話しましょう。 (テストディスカッション)

青灯夜游
青灯夜游転載
2022-02-15 10:35:392161ブラウズ

PHP7関数の型制限はパフォーマンスに影響しますか? PHP7関数のデータ型制限設定によるパフォーマンスへの影響については、次の記事で解説していますので、皆様のお役に立てれば幸いです。

PHP7 の関数タイプの制限がパフォーマンスに影響を与えるかどうかについて話しましょう。 (テストディスカッション)

この記事では、主に単純なストレス テストを使用して、PHP7 関数のデータ型を設定するか制限しないことがパフォーマンスに与える影響を調査します。仕事中に遭遇した小さな問題とその解決策 間違いがあれば修正してください。

PHP7 関数の型制限

(1) はじめに

  • 関数のパラメータの型制限(戻り値、メンバー属性を含む)は PHP5 から始まりますサポートされていますが、多くの型はサポートされていません。PHP7 はそれを拡張しました: int/string/bool/object など。
  • Function

    • 誤った呼び出しを避けるために、特に複数の人が共同開発している場合は、同じタイプのパラメータのみを渡すことができます。

      推奨学習:「PHP ビデオ チュートリアル

    • データ型の自動変換ができない場合は、以下のように、もちろん型が正しく変換されていないことが前提となります。変換対象は正常に変換できます
    • この記事は、テストの種類の制限がパフォーマンスに与える影響についてです
    • #
      function testInt(int $intNum){
        var_dump($intNum);
      }
      testInt("123"); // int(123)
    #パラメータと戻り値が一致しない場合は注意してくださいセットタイプの場合、エラーが報告されます。100% 確認されたわけではないため、手動で行う必要があります。Convert
(2) ストレステスト

    実行環境
  • PHP 7.2.34
    • Laravel 5.8
    • AB 2.3
    ##単一マシン構成
  • モデル名 MacBook Pro

      プロセッサ名 クアッドコア Intel Core i7
    • メモリ 8 GB
    • 合計数cores 4
    • ##AB
  • ストレス テストには AB (Apache Benchmark) を使用します。これは正式なストレス テストではないため、考慮するのは包括的な指標: 1 秒あたりのリクエスト数 (1 秒あたりの平均リクエスト数)

      主要パラメータ
    • -n ストレス テスト リクエストの数

      -c 数値
        #-p POST リクエストを行うときにパラメータを運ぶ必要があるファイルを指定します。
      • -r エラー応答が発生しても終了しません。オペレーティング システムには、高い同時実行に対する保護手段が備わっています。攻撃 (apr_socket_recv: ピアによる接続リセット)
      • ##プロジェクトの設定 以下のように 2 つの POST インターフェイスを設定します ビジネス ロジック、ミドルウェア操作などはありません
      /***** 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) 合計 5 つのストレス テストを実施する
  • # 構成と結果は次のように表示されます (一律に削除: | grep 'Requests per Second')
/*****第一次*****/
// 类型限定接口 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) 結果

  • 圧力テストは厳密ではありません。結果は参考用です。

タイプの性能向上制限は予想ほど大きくなく、非常に小さいですが、それでもこの書き方が推奨されます

  • プログラミング関連の知識の詳細については、

    programming を参照してください。ビデオ# ##! !

以上がPHP7 の関数タイプの制限がパフォーマンスに影響を与えるかどうかについて話しましょう。 (テストディスカッション)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。