>백엔드 개발 >PHP7 >PHP7 함수 유형 제한이 성능에 영향을 미치는지 이야기해 볼까요? (테스트 토론)

PHP7 함수 유형 제한이 성능에 영향을 미치는지 이야기해 볼까요? (테스트 토론)

青灯夜游
青灯夜游앞으로
2022-02-15 10:35:392261검색

PHP7함수 유형 제한이 성능에 영향을 미치나요? 다음 기사에서는 PHP7 함수 데이터 유형 제한 설정이 성능에 미치는 영향에 대해 설명합니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.

PHP7 함수 유형 제한이 성능에 영향을 미치는지 이야기해 볼까요? (테스트 토론)

이 기사에서는 주로 간단한 스트레스 테스트를 사용하여 PHP7 함수의 데이터 유형을 제한하지 않거나 설정하는 것이 성능에 미치는 영향을 탐구합니다. 또한 두 가지 작업에서 직면한 작은 문제와 처리 방법을 공유하겠습니다. 오류가 있으면 수정해 주세요.

PHP7 함수 유형 제한

(1) 소개

  • 함수 매개변수 유형 제한(반환 값, 멤버 속성 포함)은 PHP5부터 지원되었지만 PHP7에서는 지원되는 유형이 많지 않습니다: int/ 문자열 /bool/object 등
  • 함수

    • 잘못된 호출을 방지하려면 유형을 표시하고 특히 여러 사람이 공동으로 개발하는 경우 동일한 유형의 매개변수만 전달합니다.

      추천 학습: "PHP 동영상 튜토리얼"

    • 데이터 유형이 자동으로 변환되지 않는 경우 다음과 같이 물론 변환할 유형이 정상적으로 변환될 수 있다는 전제가 있습니다
    • 그리고 이 글은 테스트 유형 제한이 성능에 미치는 영향
    function testInt(int $intNum){
      var_dump($intNum);
    }
    testInt("123"); // int(123)
  • 참고: 매개변수와 반환 값이 설정된 유형과 일치하지 않으면 오류가 보고됩니다. 100% 확인되지 않으면 수동으로 변환해야 합니다

(2) 스트레스 테스트

  • 실행 환경

    • PHP 7.2.34
    • Laravel 5.8
    • AB 2.3
  • 독립형 구성

    • 모델명 MacBook Pro
    • 프로세서 이름 Quad-Core Intel Core i7
    • Memory 8 GB
    • 총 코어 수 4
  • AB

    • 스트레스 테스트는 AB(Apache Benchmark)를 사용하여 정식 스트레스 테스트가 아니기 때문에 신경쓰이는 부분만 있습니다. 종합 지표: 초당 요청 수(초당 평균 요청 수)
    • 주요 매개변수

      • -n 스트레스 테스트 요청 수
      • -c 동시성 수
      • -p 생성 시 필수 매개변수가 포함된 파일을 지정합니다. a POST 요청
      • -r 오류 응답이 발생하면 종료하지 마십시오. 운영 체제에는 높은 동시성 공격에 대한 보호 조치가 있습니다(apr_socket_recv: 피어에 의한 연결 재설정)
  • 프로젝트 설정 비즈니스 로직 없이 두 개의 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번의 스트레스 테스트를 수행했으며 구성 및 결과는 다음과 같이 표시됩니다(전체 삭제됨):| ')
/*****第一次*****/
// 类型限定接口 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) 결과

  • 압력 테스트는 너무 엄격하지 않고 결과는 참고용일 뿐입니다
  • 유형 제한의 성능 향상은 예상만큼 크지 않고 매우 작습니다. 이런 글쓰기 방식을 추천합니다

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !

위 내용은 PHP7 함수 유형 제한이 성능에 영향을 미치는지 이야기해 볼까요? (테스트 토론)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제