Dlaczego = = = jest szybszy niż = = w PHP?
Dlaczego ===
jest szybszy niż ==
w PHP?
10 answers
Ponieważ operator równości ==
wymusza lub konwertuje typ danych tymczasowo, aby sprawdzić, czy jest równy drugiemu operandowi, podczas gdy ===
(operator tożsamości)nie musi wykonywać żadnej konwersji, a tym samym mniej pracy jest wykonywana, co przyspiesza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-08 13:25:15
===
nie wykonuje typecastingu, więc 0 == '0'
ocenia na true
, ale 0 === '0'
- na false
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-08 13:17:38
Najpierw, = = = sprawdza, czy dwa argumenty są tym samym typem - Tak więc liczba 1 i łańcuch " 1 " nie sprawdzają się przy sprawdzaniu typu przed dokonaniem jakichkolwiek porównań. Z drugiej strony, = = nie sprawdza najpierw typu, a następnie konwertuje oba argumenty na ten sam typ, a następnie dokonuje porównania.
Dlatego = = = jest szybszy przy sprawdzaniu stanu fail
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-08 13:16:46
Są dwie rzeczy do rozważenia:
Jeśli typy operandów są różne, to
==
i===
dają różne wyniki. W takim przypadku szybkość operatorów nie ma znaczenia; ważne jest, który z nich daje pożądany efekt.Jeśli typy operandów są takie same, możesz użyć
==
lub===
, ponieważ oba wywołają te same wyniki. W tym przypadku prędkość obu operatorów jest prawie identyczna. Dzieje się tak dlatego, że żaden typ konwersja jest wykonywana przez oba operatory.
Porównałem prędkość:
-
$a == $b
vs$a === $b
- gdzie
$a
i$b
były przypadkowymi liczbami całkowitymi [1, 100] - dwie zmienne zostały wygenerowane i porównane milion razy
- testy przeprowadzono 10 razy
A oto wyniki:
$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
Widać, że prędkość jest prawie identyczna.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-19 10:12:31
Naprawdę Nie wiem, czy jest to znacznie szybsze, ale = = = w większości języków jest bezpośrednim porównaniem typów, podczas gdy = = spróbuje wykonać przymus typu, jeśli jest to konieczne/możliwe, aby uzyskać dopasowanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-08 13:16:31
= = powoduje większą narzut konwersji typu przed porównaniem. = = = najpierw sprawdza typ, a następnie kontynuuje bez konieczności wykonywania jakiejkolwiek konwersji typu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-08 13:18:18
Ponieważ ===
nie musi zmuszać operandów do tego samego typu przed ich porównaniem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:08
Podsumowując = = = jest szybszy, ponieważ nie konwertuje typu danych, aby sprawdzić, czy dwie zmienne mają tę samą wartość, ale gdy trzeba sprawdzić, czy dwie zmienne mają tę samą wartość, użyjesz = = jeśli nie ma znaczenia, jakiego typu są zmienne, lub = = = jeśli jest ważny również typ zmiennych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-09 20:03:34
szybsze nie powinny być mierzone tylko w bezpośrednim czasie wykonania(bezpośrednie testy wydajności są w tym przypadku prawie znikome). To powiedziawszy, musiałbym zobaczyć test obejmujący iterację lub rekursję, aby naprawdę sprawdzić, czy istnieje znacząca, kumulacyjna różnica (gdy jest używana w realistycznym kontekście). Czas testowania i debugowania, który zaoszczędzisz, gdy zajmujesz się przypadkami brzegowymi, powinien być dla ciebie ważny, również
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 15:20:22
Jeśli wyniki testów są poprawne, to musi to być problem kompilatora,
Procesor zrobi wszystko, co mu się każe w cyklu zegara
Jeśli ma mniej do zrobienia to będzie szybciej
Dodanie:
Ah no wlasciwie jesli kompilator juz stworzyl mnostwo kodu maszynowego do przetworzenia, To jesli juz dodal miliardy rzeczy, aby poradzic sobie z tym, jakiego typu danych trzeba porównac, to usuniecie jednego "drobnego" jesli nie zmieni znacznie szybkosci na wszystkie.
Jeśli ktoś jeszcze to czyta to jestem ciekawy w dalszej dyskusji.
Phil
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-07 22:00:06