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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











php7.0에서 mongo 확장을 설치하는 방법: 1. mongodb 사용자 그룹 및 사용자를 생성합니다. 2. mongodb 소스 코드 패키지를 다운로드하고 소스 코드 패키지를 "/usr/local/src/" 디렉터리에 넣습니다. "src/" 디렉터리를 입력합니다. 4. 소스 코드 패키지의 압축을 풉니다. 5. mongodb 파일 디렉터리를 생성합니다. 6. "mongodb/" 디렉터리에 파일을 복사합니다. 7. mongodb 구성 파일을 생성하고 구성을 수정합니다.

php5에서는 fsockopen() 함수를 사용하여 TCP 포트를 감지할 수 있습니다. 이 기능은 네트워크 연결을 열고 일부 네트워크 통신을 수행하는 데 사용할 수 있습니다. 그러나 php7에서는 fsockopen() 함수에 포트를 열 수 없거나 서버에 연결할 수 없는 등의 몇 가지 문제가 발생할 수 있습니다. 이 문제를 해결하기 위해, 우리는 소켓_create() 함수와 소켓_연결() 함수를 사용하여 TCP 포트를 감지할 수 있습니다.

PHP 7.0에서 설치된 플러그인이 표시되지 않는 문제를 해결하려면: 플러그인 구성을 확인하고 플러그인을 활성화하세요. 구성 변경 사항을 적용하려면 PHP를 다시 시작하세요. 플러그인 파일 권한이 올바른지 확인하세요. 플러그인이 올바르게 작동하도록 하려면 누락된 종속성을 설치하세요. 다른 모든 단계가 실패하면 PHP를 다시 빌드하세요. 다른 가능한 원인으로는 호환되지 않는 플러그인 버전, 잘못된 버전 로드 또는 PHP 구성 문제 등이 있습니다.

PHP 서버 환경에 대한 일반적인 솔루션에는 올바른 PHP 버전이 설치되어 있는지, 관련 파일이 모듈 디렉터리에 복사되었는지 확인하는 것이 포함됩니다. SELinux를 일시적으로 또는 영구적으로 비활성화합니다. 필요한 확장이 추가되고 올바르게 설정되었는지 확인하려면 PHP.ini를 확인하고 구성하십시오. PHP-FPM 서비스를 시작하거나 다시 시작합니다. 해결 문제에 대해서는 DNS 설정을 확인하세요.

php7.0 설치 및 배포 방법: 1. PHP 공식 웹사이트로 이동하여 로컬 시스템에 해당하는 설치 버전을 다운로드합니다. 2. 다운로드한 zip 파일을 지정된 디렉터리에 추출합니다. 3. 명령줄 창을 열고 다음으로 이동합니다. "E:\php7" 디렉토리 "php -v" 명령을 실행하세요.

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

Go 언어에서는 함수 유형이 성능에 큰 영향을 미칩니다. 성능 비교를 보면 일반 함수(147.08MOPS)가 가장 좋고, 익명 함수(158.01MOPS), 마지막으로 클로저(10.02MOPS) 순입니다. 이러한 유형은 다양한 시나리오에서 다양한 장점을 갖습니다. 익명 함수는 콜백에 적합하고, 클로저는 상태 관리에 적합하며, 일반 함수는 성능 최적화에 적합합니다.

Docker 환경을 사용할 때 Docker 환경에 Extensions를 설치하기 위해 PECL을 사용하여 오류의 원인 및 솔루션. 종종 일부 두통이 발생합니다 ...
