보통 저는 해당 문제를 해결하기 위해 뻔한 일반 PHP 함수를 사용하여 코드를 작성합니다. 그러나 이러한 문제 중 일부에 대해서는 특히 성능을 향상시키는 몇 가지 대체 솔루션을 발견했습니다.
추천: "PHP 비디오 튜토리얼
" 1. 중복 항목 제거중복 항목이 포함된 큰 배열이 있고 이를 제거하여 고유한 값의 배열만 갖도록 하려고 합니다.
Regulararray_unique($array);
Alternative array_keys(array_flip($array));
Performance 400만 개가 넘는 요소와 300만 개가 넘는 중복 항목이 있는 배열을 만들었습니다. 이것이 최상의 결과입니다:
array_unique |
787.31毫秒 |
array_keys array_flip
|
434.03毫秒 |
替代方法在此测量中快1.8倍(44.87%)。平均而言,速度提高了约1.5倍(30%)。权衡:这仅适用于简单的一维数组,因为array_flip
用值替换了键。
2.获取随机数组记录
您有一个很大的数组,想要从中选择一个随机值。
常规
array_rand($array);
替代
$array[mt_rand(0, count($array) - 1)];
表现
我创建了一个包含500万个元素的数组。这是最佳结果:
方法 | 执行时间处理时间 |
---|---|
array_rand |
25.99微秒 |
mt_rand |
0.95微秒 |
替代方法是此测量速度快27.3倍(96.33%)。平均而言,速度提高了约8倍(87%)。这个结果特别令人惊讶,因为mt_rand
Mersenne Twister随机数生成器的实现也是如此,并且自PHP 7.1起,内部随机化算法已更改为使用完全相同的算法。
3.测试字母数字字符
您有一个字符串,要测试,如果它仅包含字母数字字符。
常规
preg_match('/^[a-zA-Z0-9]+$/', $string);
替代
ctype_alnum($string);
表现
我创建了一个包含100k以上字母数字和非字母数字字符串的数组。这是最佳结果:
方法 | 执行时间处理时间 |
---|---|
preg_match |
15.39毫秒 |
ctype_alnum |
array_keys array_flip
|
array_flip
은 키를 값으로 대체하므로 이는 단순한 1차원 배열에서만 작동합니다. 🎜🎜🎜🎜2. 무작위 배열 레코드 가져오기🎜🎜큰 배열이 있고 그 중에서 임의의 값을 선택하려고 합니다. 🎜🎜🎜🎜Regular 🎜
str_replace('a', 'b', $string);🎜🎜🎜Alternative 🎜
strtr($string, 'a', 'b');🎜🎜🎜Performance 🎜🎜5백만 개의 요소로 구성된 배열을 만들었습니다. 이것이 가장 좋은 결과입니다: 🎜🎜🎜🎜🎜method🎜🎜실행 시간 처리 시간🎜🎜🎜🎜🎜🎜
array_rand
🎜🎜25.99 마이크로초🎜🎜🎜🎜mt_rand
🎜 🎜 0.95 마이크로초🎜🎜🎜🎜🎜대안은 🎜27.3배 빠른🎜(96.33%) 측정입니다. 평균적으로 속도 향상은 약 8배(87%)입니다. 이 결과는 mt_rand
Mersenne Twister 난수 생성기의 구현도 마찬가지이고 PHP 7.1부터 내부 무작위 알고리즘이 정확히 동일한 알고리즘을 사용하도록 변경되었기 때문에 특히 놀랍습니다. 🎜🎜🎜🎜3. 영숫자 테스트 🎜🎜문자열에 영숫자만 포함되어 있는지 테스트하고 싶은 문자열이 있습니다. 🎜🎜🎜🎜Regular 🎜rrreee🎜🎜🎜Alternative 🎜rrreee🎜🎜🎜Performance 🎜🎜100,000개 이상의 영숫자 및 영숫자가 아닌 문자열을 포함하는 배열을 만들었습니다. 상위 결과는 다음과 같습니다. 🎜🎜🎜🎜🎜 메소드 🎜🎜 실행 시간 처리 시간 🎜🎜🎜🎜🎜🎜
preg_match
🎜🎜15.39 ms🎜🎜🎜🎜ctype_alnum
🎜 🎜 2.06밀리초🎜🎜🎜🎜在此测量中,替代方法快了7.5倍(86.59%)。平均而言,速度提高了约4倍(76%)。可以将相同的内容应用于ctype_alpha()
(检查字母字符)和ctype_digit()
(检查数字字符)。
4.替换子字符串
您有一个字符串,想要用另一个子字符串替换它的一部分。
常规
str_replace('a', 'b', $string);
替代
strtr($string, 'a', 'b');
表现
我创建了一个包含500万个随机字符串的数组。这是最佳结果:
方法 | 执行时间处理时间 |
---|---|
str_replace |
676.59毫秒 |
strtr |
305.59毫秒 |
另一种方法是2.2倍(54.83%)在该测量更快。平均而言,速度提高了约2倍(51%)。
其他性能改进
这是我整合到我的编码约定中的一些其他要点,发现它们可以稍微改善性能(如果适用):
- 首选JSON比XML
- 在循环之前而不是在循环的每个迭代中声明变量
- 避免在循环头中进行函数调用(在每次迭代中均
for ($i=0; $i<count>在<code>count()
get中调用) - 重置内存消耗变量
- 优先选择select语句而不是多个if语句
- 优先于require / include而不是require_once / include_once(确保适当的操作码缓存)
最后几句话:我知道有关过早优化的讨论。我同意生产中的性能取决于瓶颈,例如数据库查询,在处理性能时应重点关注。但是我认为,如果有更快的替代方法,例如在正则表达式更易于处理和维护的情况下,为什么不使用它们呢?
最后
我们已经看到,即使使用当前的PHP 7.4(已经比以前的PHP版本快很多),也可以通过其他方法来提高脚本性能。如果您想亲自验证本文中提供的数据,我创建了一个包含所有测试的存储库:
测试提高 PHP 脚本性能的不同方法
我使用了Bart van Hoekelen的出色工具来衡量执行时间。
转载自:Andreas
위 내용은 스크립트 성능을 향상시키는 4가지 PHP 팁 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

phpidifiesauser의 sssessionusessessioncookiesandssessionids.1) whensession_start () iscalled, phpgeneratesauniquessessionStoredInacookienamedPhpsSessIdonSeuser 'sbrowser.2) thisidallowsphptoretrievessessionDataTromServer.

PHP 세션의 보안은 다음 측정을 통해 달성 할 수 있습니다. 1. Session_REGENEREAT_ID ()를 사용하여 사용자가 로그인하거나 중요한 작업 일 때 세션 ID를 재생합니다. 2. HTTPS 프로토콜을 통해 전송 세션 ID를 암호화합니다. 3. 세션 _save_path ()를 사용하여 세션 데이터를 저장하고 권한을 올바르게 설정할 보안 디렉토리를 지정하십시오.

phpsessionfilesarestoredInTheRectorySpecifiedBysession.save_path, 일반적으로/tmponunix-likesystemsorc : \ windows \ temponwindows.tocustomizethis : 1) austession_save_path () toSetacustomDirectory, verlyTeCustory-swritation;

toretrievedatafromAphPsession, startSessionstart_start () andaccessvariblesinthe $ _sessionArray.forexample : 1) startthessession : session_start (). 2) retrievedata : $ _ session [ 'username']; echo "Welcome,". $ username;

세션을 사용하여 효율적인 쇼핑 카트 시스템을 구축하는 단계에는 다음이 포함됩니다. 1) 세션의 정의와 기능을 이해합니다. 세션은 요청에 따라 사용자 상태를 유지하는 데 사용되는 서버 측 스토리지 메커니즘입니다. 2) 쇼핑 카트에 제품 추가와 같은 기본 세션 관리를 구현합니다. 3) 제품 수량 관리 및 삭제 지원 고급 사용으로 확장; 4) 세션 데이터를 지속하고 보안 세션 식별자를 사용하여 성능 및 보안을 최적화합니다.

이 기사는 PHP의 인터페이스를 생성, 구현 및 사용하는 방법을 설명하여 코드 구성 및 유지 관리에 대한 이점에 중점을 둡니다.

이 기사에서는 PHP의 암호 해싱에 대한 Crypt ()와 Password_hash ()의 차이점에 대해 논의하여 최신 웹 애플리케이션에 대한 구현, 보안 및 적합성에 중점을 둡니다.

기사는 입력 유효성 검사, 출력 인코딩 및 OWASP ESAPI 및 HTML 청정기와 같은 도구를 통해 PHP의 크로스 사이트 스크립팅 (XSS) 방지에 대해 논의합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

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

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

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
