IT박스

PHP에서 ===가 ==보다 빠른 이유는 무엇입니까?

itboxs 2020. 5. 31. 21:08
반응형

PHP에서 ===가 ==보다 빠른 이유는 무엇입니까?


PHP ===보다 ==빠릅니까?


항등 연산자 ==는 데이터 유형을 다른 피연산자와 같은지 확인하기 위해 데이터 유형을 강제로 변환하거나 일시적으로 변환 하기 때문에 ===(identity operator)는 변환을 수행 할 필요가 없으므로 작업이 줄어 더 빨라집니다.


===, 타입 캐스팅을 수행 그렇게하지 않는 0 == '0'로 평가 true하지만 0 === '0'-에 false.


두 인수가 같은 경우 첫째, === 확인합니다 유형을 - 어떤 비교가 실제로 수행되기 전에 숫자 1과 문자열 '1'유형 검사에 실패 있도록. 반면, ==는 먼저 유형을 확인하지 않고 두 인수를 동일한 유형으로 변환 한 다음 비교를 수행합니다.

따라서 ===는 실패 조건을 확인하는 데 더 빠릅니다.


고려해야 할 두 가지가 있습니다.

  1. 피연산자 유형은 다른 경우 =====생산 다른 결과를 . 이 경우 작업자의 속도는 중요하지 않습니다. 중요한 것은 원하는 결과를 생성하는 것입니다.

  2. 피연산자 유형이 동일한 경우에 당신은 사용할 수 있습니다 ==또는 ===모두로 생산할 예정이다 동일한 결과를 . 이 경우 두 연산자의 속도는 거의 동일합니다. 두 연산자 중 하나에 의해 형식 변환이 수행되지 않기 때문입니다.

나는 속도를 비교했다.

  • $a == $b vs $a === $b
  • 어디서 $a그리고 $b임의의 정수 [1, 100]
  • 두 변수가 생성되고 백만 번 비교
  • 테스트는 10 번 실행되었습니다

결과는 다음과 같습니다.

 $a == $b $a === $b
--------- ---------
 0.765770  0.762020
 0.753041  0.825965
 0.770631  0.783696
 0.787824  0.781129
 0.757506  0.796142
 0.773537  0.796734
 0.768171  0.767894
 0.747850  0.777244
 0.836462  0.826406
 0.759361  0.773971
--------- ---------
 0.772015  0.789120

속도가 거의 같다는 것을 알 수 있습니다.


나는 그것이 훨씬 빠르다는 것을 실제로 알지 못하지만, 대부분의 언어에서 ===는 직접 유형 비교이지만, ==는 필요하거나 일치하는 것을 얻을 수있는 경우 유형 강제를 시도합니다.


==는 비교 전에 유형 변환의 오버 헤드가 더 큽니다. === 먼저 형식을 확인한 다음 형식 변환을 수행하지 않고 진행합니다.


때문에이 === 같은 유형으로 피연산자를 강요 할 필요가 없습니다 그들을 비교하기 전에.

나는 속도의 차이가 매우 의심 스럽다. 정상적인 상황에서는 더 이해하기 쉬운 연산자를 사용해야합니다.


결론적으로 두 변수의 값이 같은지 확인하기 위해 데이터 유형을 변환하지 않기 때문에 ===가 더 빠르지 만 두 변수의 값이 같은지 확인해야 할 경우 ==를 사용하면 어떤 유형이 변수인지 계산할 수 없습니다 또는 === 변수가 중요한 경우에도 중요합니다.


직접 실행 시간으로 더 빨리 측정해서는 안됩니다 (이 경우 직접 성능 테스트는 거의 무시할 수 있음). 즉, 반복적 또는 재귀와 관련된 테스트를 통해 상당한 누적 차이가 있는지 확인해야합니다 (실제 상황에서 사용되는 경우). 엣지 케이스를 다룰 때 절약 할 수있는 테스트 및 디버깅 시간도 중요합니다.


테스트 결과가 정확하면 컴파일러 문제 여야합니다.

프로세서는 클럭 사이클에서 수행하도록 지시받은 모든 작업을 수행합니다.

할 일이 적 으면 더 빨리 할 것입니다

부가:

아 실제로는 컴파일러가 처리 할 머신 코드를 이미 생성 한 경우 어떤 유형의 데이터를 비교해야하는지에 대해 수십억 개의 항목을 이미 추가 한 경우 하나의 "사소한"IF를 제거하면 속도가 크게 변하지 않습니다. 조금도.

누군가가 여전히 이것을 읽는다면 나는 더 많은 토론에서 흥미 롭습니다.

참고 URL : https://stackoverflow.com/questions/2401478/why-is-faster-than-in-php

반응형