Baidu 엔지니어가 PHP 기능의 구현 원칙 및 성능 분석에 대해 이야기합니다. (3)_php 기술
PHP 공통 기능 구현 및 소개
개수
count는 우리가 자주 사용하는 함수이며, 그 기능은 배열의 길이를 반환하는 것입니다.
카운트 기능의 복잡성은 무엇입니까? 일반적으로 count 함수는 전체 배열을 순회하여 요소 수를 찾으므로 복잡도는 O(n)입니다. 그렇다면 이것이 실제로 사실인가? count 구현으로 돌아가서, 배열의 count 연산에 대해 함수의 최종 경로는 zif_count_recursive->이고 zend_hash_num_elements의 동작은 return입니다. ht->nNumOfElements. 이것은 O(n) 연산이 아닌 O(1) 연산임을 알 수 있습니다. 실제로 배열은 PHP 하단에 있는 hash_table입니다. 해시 테이블의 경우 zend에 현재 요소 수를 기록하는 특수 요소 nNumOfElements가 있으므로 일반 개수의 경우 실제로 이 값이 직접 반환됩니다. 이것으로부터 우리는 결론을 내립니다: count는 O(1)의 복잡도를 가지며 특정 배열의 크기와 아무 관련이 없습니다.
배열이 아닌 유형의 변수에 대한 개수의 동작은 무엇입니까? 설정되지 않은 변수의 경우 0이 반환되고 int, double, string 등은 1이 반환됩니다
strlen
Strlen은 문자열의 길이를 반환하는 데 사용됩니다. 그렇다면 그의 구현 원칙은 무엇입니까? 우리 모두는 strlen이 C의 O(n) 함수라는 것을 알고 있습니다. 이 함수는 다음을 만날 때까지 문자열을 순차적으로 탐색합니다.
isset 및 array_key_exists
이 두 함수의 가장 일반적인 용도는 배열에 키가 있는지 여부를 확인하는 것입니다. 그러나 전자를 사용하여 변수가 설정되었는지 여부를 확인할 수도 있습니다. 앞서 언급했듯이 isset은 실제 함수가 아니므로 isset의 효율성은 후자보다 훨씬 높습니다. array_key_exists 대신 이를 사용하는 것이 좋습니다.
array_push 및 array[]
둘 다 배열 끝에 요소를 추가합니다. 차이점은 전자는 한 번에 여러 항목을 푸시할 수 있다는 것입니다. 가장 큰 차이점은 하나는 함수이고 다른 하나는 언어 구조이므로 후자가 더 효율적이라는 점입니다. 따라서 정상적으로 요소만 추가하는 경우에는 배열 []을 사용하는 것이 좋습니다.
랜드와 mt_rand
둘 다 난수 생성 기능을 제공합니다. 전자는 libc 표준 rand를 사용합니다. 후자는 Mersenne Twister의 알려진 기능을 난수 생성기로 사용하는데, 이는 libc에서 제공하는 rand()보다 평균 4배 빠르게 난수 값을 생성할 수 있습니다. 따라서 더 높은 성능 요구 사항이 있는 경우 전자 대신 mt_rand 사용을 고려할 수 있습니다. 우리 모두는 rand가 의사 난수를 생성한다는 것을 알고 있습니다. C에서는 지정된 시드를 표시하려면 srand를 사용해야 합니다. 그러나 PHP에서는 rand가 기본적으로 srand를 한 번 호출합니다. 일반적인 상황에서는 명시적으로 직접 호출할 필요가 없습니다. 특별한 상황에서 srand를 호출해야 하는 경우에는 반드시 함께 호출해야 한다는 점에 유의해야 합니다. 즉, srand는 rand에 해당하고 mt_srand는 srand에 해당합니다. 혼합하면 안 됩니다. 그렇지 않으면 유효하지 않습니다.
정렬 및 사용자정렬
둘 다 정렬에 사용됩니다. 차이점은 전자가 C의 qsort 및 C 정렬과 유사한 정렬 전략을 지정할 수 있다는 것입니다. 정렬 측면에서는 둘 다 표준 빠른 정렬을 사용하여 구현됩니다. 정렬 요구 사항이 있는 경우 특별한 상황이 아닌 이상 PHP에서 제공하는 이러한 메서드를 호출하면 됩니다. 직접 다시 구현할 필요가 없으며 효율성이 훨씬 높습니다. 낮추다. 그 이유는 앞선 사용자 기능과 내장 기능 분석 및 비교에서 알 수 있다.
urlencode 및 rawurlencode
둘 다 URL 인코딩에 사용되며, 문자열에서 -_를 제외한 모든 영숫자가 아닌 문자는 퍼센트 기호(%) 뒤에 2개의 16진수 숫자로 대체됩니다. 둘 사이의 유일한 차이점은 공백의 경우 urlencode는 로 인코딩되고 rawurlencode는 로 인코딩된다는 것입니다. 일반적으로 검색 엔진을 제외하고 우리의 전략은 공백을 . 따라서 후자를 주로 사용한다. 인코딩 및 디코딩 시리즈는 함께 사용해야 합니다.
strcmp 시리즈 기능 이 일련의 함수에는 strcmp, strncmp, strcasecmp, strncasecmp가 포함되며 함수는 C 함수와 동일합니다. 그러나 PHP 문자열이 허용되므로 차이점이 있습니다.
is_int 및 is_numeric
이 두 기능의 기능은 비슷하지만 완전히 동일하지는 않습니다. 사용 시 차이점에 주의해야 합니다. Is_int: 변수 유형이 정수 유형인지 확인합니다. PHP 변수에는 특수한 필드 표현 유형이 있으므로 이 유형을 직접 판단할 수 있습니다. Is_numeric: 변수가 정수인지 확인합니다. 또는 숫자 문자열. 즉, true를 반환하는 정수 변수 외에도 문자열 변수의 경우 "1234", "1e4" 등의 형식인 경우에도 true로 판단됩니다. . 이때 문자열을 순회하여 판단하게 됩니다.
요약 및 제안
요약:
기능 구현의 원리 분석과 성능 테스트를 통해 다음과 같은 결론을 정리했습니다
1. Php의 함수 호출 오버헤드는 상대적으로 큽니다.
2. 함수 관련 정보는 큰 hash_table에 저장되며, 호출될 때마다 함수 이름이 해시 테이블에서 검색되므로 함수 이름의 길이도 성능에 일정한 영향을 미칩니다.
3. 함수 반환 참조는 실질적인 의미가 없습니다
4. 내장된 PHP 함수의 성능은 특히 문자열 작업의 경우 사용자 함수의 성능보다 훨씬 높습니다.
5. 클래스 메소드, 일반 함수, 정적 메소드의 효율성은 거의 동일하고 큰 차이가 없습니다
6. 빈 함수 호출의 영향을 제외하면 내장 함수와 동일한 함수를 갖는 C 함수의 성능은 기본적으로 동일합니다.
7. 모든 매개변수 전송은 참조 카운팅을 사용하는 얕은 복사본이므로 비용이 거의 들지 않습니다.
8. 기능 수가 성능에 미치는 영향은 거의 무시할 수 있습니다
추천:
따라서 PHP 기능 사용에 있어서 다음과 같은 몇 가지 제안사항이 있습니다
1. 함수는 내장 함수로 완성될 수 있습니다. PHP 함수를 직접 작성하는 대신 내장 함수를 사용해 보세요.
2. 특정 기능에 높은 성능 요구 사항이 있는 경우 확장 기능을 사용하여 구현하는 것을 고려할 수 있습니다.
3. PHP 함수 호출은 비용이 많이 들므로 과도하게 캡슐화하지 마십시오. 일부 함수를 많이 호출해야 하고 한두 줄의 코드만으로 구현할 수 있는 경우 호출을 캡슐화하지 않는 것이 좋습니다.
4. 다양한 디자인 패턴에 지나치게 집착하지 마세요. 이전 기사에서 설명한 것처럼 과도한 캡슐화는 성능 저하를 초래합니다. 둘 사이에는 고려해야 할 절충점이 있습니다. PHP는 그 나름의 특성을 가지고 있으므로 Java 모델을 너무 많이 모방해서는 안 됩니다.
5. 함수는 너무 깊게 중첩되어서는 안 되며 재귀를 주의해서 사용해야 합니다.
6. 의사 함수는 성능이 뛰어나며 동일한 함수를 구현할 때 우선순위가 부여됩니다. 예를 들어 array_key_exists 대신 isset을 사용하세요
7. 함수에서 참조를 반환하는 것은 그다지 의미가 없으며 실제적인 효과도 없습니다. 고려하지 않는 것이 좋습니다.
8. 클래스 멤버 메서드는 일반 함수보다 효율성이 떨어지지 않으므로 성능 손실을 걱정할 필요가 없습니다. 더 나은 가독성과 보안성을 갖춘 보다 정적 메서드를 고려하는 것이 좋습니다.
9. 특별한 요구사항이 없는 한, 매개변수 전달 시 참조에 의한 전달보다는 값에 의한 전달을 사용하는 것이 좋습니다. 물론, 매개변수가 큰 배열이고 수정이 필요한 경우에는 참조로 전달하는 것을 고려할 수 있습니다.

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











5월 15일, Baidu Apollo는 우한 Baidu Carrot Auto Robot Zhixing Valley에서 Apollo Day 2024를 개최하여 지난 10년 동안 Baidu의 자율 주행 분야의 주요 발전을 종합적으로 시연하고 대형 모델을 기반으로 한 기술 도약과 승객 안전에 대한 새로운 정의를 가져왔습니다. 세계 최대 자율주행차 운영 네트워크 바이두는 사람이 운전하는 것보다 자율주행을 더 안전하게 만들었습니다. 덕분에 더 안전하고, 더 편안하고, 친환경적이고, 저탄소 여행 방식이 이상에서 현실로 바뀌고 있습니다. 바이두 그룹 부사장이자 지능형 운전 비즈니스 그룹 사장인 왕윤펑(Wang Yunpeng)은 현장에서 "자율주행차를 만드는 우리의 원래 의도는 더 나은 여행에 대한 사람들의 점점 커지는 갈망을 충족시키는 것입니다. 사람들의 만족은 우리의 원동력입니다. 왜냐하면 안전, 너무 아름다워요, 만나서 반가워요

DeepSeek은 웹 버전과 공식 웹 사이트의 두 가지 액세스 방법을 제공하는 강력한 지능형 검색 및 분석 도구입니다. 웹 버전은 편리하고 효율적이며 설치없이 사용할 수 있습니다. 개인이든 회사 사용자이든, DeepSeek를 통해 대규모 데이터를 쉽게 얻고 분석하여 업무 효율성을 향상시키고 의사 결정을 지원하며 혁신을 촉진 할 수 있습니다.

7일 해당 사이트 소식에 따르면 지난 5월 6일 바이두 창업자이자 회장 겸 CEO인 로빈 리가 팀을 이끌고 베이징에 있는 중국국영석유공사(이하 '페트로차이나')를 방문해 중국 국영기업 이사들을 만났다. 중국국영석유공사(China National Petroleum Corporation) 회장 겸 당 서기 Dai Houliang이 회담을 가졌습니다. 양측은 협력을 강화하고 에너지 산업과 디지털 인텔리전스의 심층적 통합을 촉진하기 위해 심도 있는 교류를 가졌습니다. PetroChina는 디지털 China Petroleum Corporation의 건설을 가속화하고 Baidu Group과의 협력을 강화하며 에너지 산업과 디지털 인텔리전스의 심층적 통합을 촉진하고 국가 에너지 안보 보장에 더 큰 기여를 할 것입니다. 로빈 리(Robin Li)는 대형 모델이 보여주는 '지능적 출현'과 이해, 생성, 논리, 기억의 핵심 역량이 첨단 기술과 석유 및 가스 사업의 결합을 위한 더 넓은 상상력의 공간을 열었다고 말했습니다. 언제나

Java 성능 분석 도구를 사용하여 Java 기능의 성능을 분석하고 최적화할 수 있습니다. 성능 분석 도구 선택: JVisualVM, VisualVM, JavaFlightRecorder(JFR) 등 성능 분석 도구 구성: 샘플링 속도 설정, 이벤트 활성화. 함수 실행 및 데이터 수집: 프로파일링 도구를 활성화한 후 함수를 실행합니다. 성능 데이터 분석: CPU 사용량, 메모리 사용량, 실행 시간, 핫스팟 등과 같은 병목 현상 지표를 식별합니다. 기능 최적화: 최적화 알고리즘, 코드 리팩터링, 캐싱 및 기타 기술을 사용하여 효율성을 향상시킵니다.

31일 뉴스에 따르면 블로거 @ibinguniverse는 오늘 삼성 갤럭시 S24 시리즈 휴대폰 중국 버전 '서치 인 서클(Search in Circle)'이 구글 검색을 지원한다는 소식을 전했습니다. 블로거는 구체적인 출시 시간을 공개하지 않았습니다. 삼성의 이전 소개에 따르면 삼성 갤럭시 S24 시리즈는 입력, 번역, 녹음, 메모, 카메라 등 AI 기반의 실용적인 기능과 높은 수준의 AI 기능을 탑재해 사용자에게 보다 편리하고 효율적인 종합 서비스를 제공한다. 경험. 해외 버전과 달리 삼성 갤럭시 S24 시리즈의 AI 기능은 대부분 바이두 등 국내 제조사에서 제공하고 있다. 이전에 보고된 Galaxy AI는 Baidu Wenxin 대형 모델의 여러 기능을 심층적으로 통합하여 최종 지원 통화 및 번역 기능은 물론 생성 AI가 제공하는 지능형 요약을 제공할 수 있습니다.

PHP와 Flutter 함수의 주요 차이점은 선언, 구문 및 반환 유형입니다. PHP 함수는 암시적 반환 유형 변환을 사용하는 반면, Flutter 함수는 반환 유형을 명시적으로 지정합니다. PHP 함수는 ?를 통해 선택적 매개변수를 지정할 수 있으며, Flutter 함수는 필수 및 선택적 매개변수를 지정하기 위해 =를 사용하여 매개변수 이름을 전달합니다. Flutter 함수는 {}를 사용하여 명명된 매개변수를 지정합니다.

이 기사에서는 Douyin Doubao, Wenxin Yige, Tencent Zhiying, Baidu Feipiao EasyDL, Baidu AI Studio 및 iFlytek Spark Cognitive Large Model을 포함한 6가지 인기 AI 도구를 소개합니다. 이러한 도구는 텍스트 생성, 이미지 생성, 비디오 편집 및 AI 모델 개발과 같은 다양한 기능을 다룹니다. 올바른 AI 도구를 선택하려면 기능 요구 사항, 기술 수준, 비용 예산과 같은 요소를 고려해야 합니다. 이러한 도구는 AI 지원이 필요한 개인과 기업에 편리하고 효율적인 솔루션을 제공합니다.

DeepSeek-R1은 Baidu Library 및 NetDisk에 권한을 부여합니다. 심도있는 사고와 행동의 완벽한 통합은 단 한 달 만에 많은 플랫폼에 빠르게 통합되었습니다. 대담한 전략적 레이아웃을 통해 Baidu는 DeepSeek을 타사 모델 파트너로 통합하여이를 생태계에 통합하여 "큰 모델 검색"생태 전략의 주요 진전을 나타냅니다. Baidu Search 및 Wenxin Intelligent Intelligent 플랫폼은 DeepSeek 및 Wenxin Big Model의 깊은 검색 기능에 처음으로 연결하여 사용자에게 무료 AI 검색 경험을 제공합니다. 동시에 "Baidu로 갈 때 알게 될 것입니다"라는 클래식 슬로건과 새로운 버전의 Baidu 앱은 Wenxin의 큰 모델과 DeepSeek의 기능을 통합하여 "AI Search"및 "Wide Network Information Refinement"를 시작합니다.
