trucos - tips para php
¿Por qué es=== más rápido que== en PHP? (9)
¿Por qué es ===
más rápido que ==
en PHP?
El == incurre en una sobrecarga mayor de la conversión de tipo antes de la comparación. === primero verifica el tipo, luego continúa sin tener que hacer ninguna conversión de tipo.
En conclusión, === es más rápido porque no convierte el tipo de datos para ver si dos variables tienen el mismo valor, pero cuando necesita ver si dos variables tienen el mismo valor, usará == si no importa qué tipo son variables , o === si también es importante el tipo de variables.
Hay dos cosas a considerar:
Si los tipos de operandos son diferentes, entonces
==
y===
producen resultados diferentes . En ese caso, la velocidad de los operadores no importa; lo que importa es cuál produce el resultado deseado.Si los tipos de operandos son los mismos, entonces puede usar cualquiera
==
o===
ya que ambos producirán los mismos resultados . En ese caso, la velocidad de ambos operadores es casi idéntica. Esto se debe a que ninguno de los operadores realiza la conversión de tipo.
Comparé la velocidad de:
-
$a == $b
vs$a === $b
- donde
$a
y$b
eran enteros aleatorios [1, 100] - las dos variables se generaron y se compararon un millón de veces
- las pruebas se corrieron 10 veces
Y aquí están los resultados:
$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
Puedes ver que la velocidad es casi idéntica.
Porque ===
no necesita obligar a los operandos a ser del mismo tipo antes de compararlos.
Sin embargo, dudo que la diferencia en velocidad sea mucho. En circunstancias normales, debe usar el operador que tenga más sentido.
Porque el operador de igualdad ==
coacciona, o convierte el tipo de datos temporalmente para ver si es igual al otro operando, mientras que ===
(operador de identidad) no necesita hacer ninguna conversión en absoluto y por lo tanto se hace menos trabajo, haciéndolo más rápido .
Primero, === comprueba si los dos argumentos son del mismo tipo , por lo que el número 1 y la cadena ''1'' fallan en la verificación de tipo antes de que se lleven a cabo las comparaciones. Por otro lado, == no comprueba primero el tipo y continúa y convierte ambos argumentos en el mismo tipo y luego realiza la comparación.
Por lo tanto, === es más rápido al verificar una condición de falla
Realmente no sé si es significativamente más rápido, pero === en la mayoría de los idiomas es una comparación de tipo directo, mientras que == intentará hacer una coerción de tipo si es necesario / posible para obtener una coincidencia.
Si los resultados de la prueba son correctos, entonces debe ser un problema del compilador,
El procesador hará lo que se le indique en un ciclo de reloj
Si tiene menos que hacer, será más rápido hacer
Adición:
Ah, de hecho, si el compilador ya ha creado un montón de código de máquina para procesar, entonces si ya ha agregado millones de cosas para hacer frente al tipo de datos que necesita comparar, entonces la eliminación de un IF "menor" no cambiará mucho la velocidad en absoluto.
Si alguien todavía lee esto, entonces estoy interesado en más discusión.
Phil
===
no realiza el encasillado, por lo que 0 == ''0''
evalúa como true
, pero 0 === ''0''
- para false
.