Dlaczego jest szybsze niż ==
w PHP?Dlaczego === jest szybsze niż == w PHP?
Odpowiedz
ponieważ operator równości ==
wymusza lub przekształca dane wpisać chwilowo, aby zobaczyć, czy jest równa drugiej argumentu natomiast ===
(operator tożsamości) nie musi zrobić każdy konwersji w ogóle, a tym samym mniej praca jest wykonywana, co czyni go szybciej.
Myślę, że twoja opinia jest sprzeczna z tym, co mówi Podręcznik PHP. Mówią, że $ a == $ b ma wartość PRAWDA, jeśli $ a jest równe $ b, gdzie $ a === $ b ma wartość PRAWDA, jeśli $ a jest równe $ b, i są tego samego typu. – Bakhtiyor
W jaki sposób jest to przeciwne? –
Wierzę, że tak naprawdę to 2 operandy wskazują ten sam obszar pamięci dla typów złożonych, ale odpowiedź meduzy obejmuje to, że – Basic
Nie wiem, czy jest znacznie szybszy, ale === w większości języków jest bezpośrednim porównaniem typów, podczas gdy == spróbuje zastosować przymus w razie potrzeby/możliwe, aby uzyskać dopasowanie.
Najpierw, === sprawdza, czy oba argumenty są takie same: typ - więc liczba 1 i ciąg "1" kończą się niepowodzeniem na sprawdzeniu typu, zanim zostaną faktycznie wykonane porównania. Z drugiej strony, == nie sprawdza najpierw typu i kontynuuje i konwertuje oba argumenty na ten sam typ, a następnie dokonuje porównania.
Dlatego === jest szybsze na sprawdzenie fail warunek
Domyślam się, że '==' również sprawdza najpierw typ, aby zobaczyć, czy należy dokonać jakiejkolwiek konwersji typu.Fakt, że '===' nie wykonuje żadnej konwersji w następnym kroku, powoduje, że jest on szybszy. – deceze
ponieważ ===
doesn't need to coerce the operands to be of the same type przed porównując je.
Wątpię jednak, by różnica prędkości była bardzo duża. W normalnych okolicznościach powinieneś używać tego operatora, który ma więcej sensu.
===
nie wykonuje rzutowania typów, więc 0 == '0'
ocenia się true
, ale 0 === '0'
- do false
.
== Wiąże się większy narzut konwersji typu przed porównaniem. === najpierw sprawdza typ, a następnie kontynuuje bez konieczności jakiejkolwiek konwersji typu.
Podsumowując === jest szybciej, ponieważ nie konwertuje typ danych, aby zobaczyć czy dwie zmienne mają taką samą wartość, ale kiedy trzeba sprawdzić, czy dwie zmienne mają taką samą wartość, która będzie używana == jeśli doesen't Mather jaki typ są zmienne, lub === jeśli jest ważny również typ zmiennych.
Są dwie rzeczy do rozważenia:
Jeśli operand są różne typy następnie
==
i===
produkować różne wyniki. W takim przypadku prędkość operatorów nie ma znaczenia; ważne jest, który z nich przynosi pożądany rezultat.Jeśli typy argumentów operacji są takie same, a następnie można użyć
==
lub===
jak obie będą produkować same wyniki. W takim przypadku prędkość obu operatorów jest prawie identyczna. Wynika to z faktu, że żadna z operatorów nie wykonuje żadnej konwersji.
I w porównaniu z szybkością:
$a == $b
vs$a === $b
- gdzie
$a
i$b
były przypadkowe liczby całkowite [1 100] - obie zmienne i porównuje 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 niemal identyczny.
Zastanawiam się, co się stanie, jeśli zrobisz kilka miliardów iteracji na komputerze, który nie robi nic innego i po prostu wyprowadza średnią. wygląda na to, że jest tu dość dużo hałasu. ;) –
Doszedłem do tego samego wniosku: nie ma żadnej różnicy, jeśli operandy są znane z tego samego typu. Inne scenariusze nie powodują. Niemal wszystkie inne odpowiedzi są po prostu złe. –
Jeśli wyniki badań są prawidłowe, to musi to być problem kompilator,
Procesor będzie robić, co każe mu się zrobić na cykl zegara
Jeśli ma mniej do zrobienia to będzie szybciej robić
Dodatek:
Ah dobrze faktycznie jeśli kompilator stworzył już mnóstwo kodu maszynowego do przetworzenia, a następnie, jeśli to już dodany zillions rzeczy, aby poradzić sobie z tym, co typ danych wymaga porównywania, następnie Remo val jednego "małego" IF nie zmieni wcale prędkości.
Jeśli ktoś nadal czyta to, to jestem interesujący w dalszej dyskusji.
Phil
- 1. Dlaczego \% (\) jest szybsze niż \ (\) w Vimie?
- 2. Dlaczego ".join() jest szybsze niż + = w Pythonie?
- 3. Dlaczego DataTable jest szybsze niż DataReader
- 4. Wstawianie MySQL, szybsze w PHP niż C++, jest to oczekiwane?
- 5. Dlaczego "inc dword [esp + ebx]" jest szybsze niż "inc [esp]"?
- 6. Dlaczego moje zapytanie Aslinowane PLINQ jest szybsze niż moje nieuporządkowane?
- 7. Dlaczego rozpakowywanie jest szybsze niż dostęp do indeksu?
- 8. Dlaczego i = i + 1 jest szybsze niż i ++?
- 9. Dlaczego tworzenie HashMap jest szybsze niż tworzenie obiektu []?
- 10. Dlaczego tornado Mersenne jest szybsze niż liniowy generator kongruencji?
- 11. Mergesort - czy dno jest szybsze niż odgórne?
- 12. Co jest szybsze niż std :: pow?
- 13. Dlaczego użycie tabeli tymczasowej będzie szybsze niż zapytanie zagnieżdżone?
- 14. Dlaczego pętle są szybsze niż numpy dla mnożenia macierzy dwuwymiarowych
- 15. Python: dlaczego są * i ** szybsze niż/i sqrt()?
- 16. Scalanie pliku bez spacji jest szybsze niż w przypadku przestrzeni
- 17. Dlaczego dodawanie i mnożenie są szybsze niż porównania?
- 18. Szybsze podejście niż gsub w R
- 19. Dlaczego mnożenie macierzy jest szybsze przy użyciu numpy niż w przypadku ctypes w Pythonie?
- 20. w Pythonie, dlaczego jeśli rank: jest szybsze niż w przypadku ranga = 0:
- 21. Dlaczego prawda jest większa niż 3 w PHP
- 22. dlaczego drugie polecenie cp jest szybsze
- 23. Dlaczego rozumienie list jest dużo szybsze niż numpy w przypadku mnożenia tablic?
- 24. Dlaczego definiowanie funkcji prototypowych JS jest osobno szybsze niż w słowniku?
- 25. Dlaczego kopiowanie listy za pomocą plasterka [:] jest szybsze niż w oczywisty sposób?
- 26. Czy rozpakowanie Perla() jest zawsze szybsze niż substr()?
- 27. Czy "else if" jest szybsze niż "przypadek switch()"?
- 28. Czy tworzenie instancji literału obiektu jest szybsze niż ustawianie właściwości?
- 29. Czy używanie macierzy jest szybsze niż wykonywanie wielu instrukcji?
- 30. Szybsze niż wyszukiwanie binarne dla uporządkowanej listy
Jest szybszy, ale czy * znacznie * szybciej? – Piskvor
Proszę nie czytać o tym, co jest szybciej w php. Przeczytaj, jak uzyskać interesujące dane w pojedynczej kwerendzie SQL bez nadużywania JOIN. –
Do kogo może być zainteresowany tym samym przedmiotem '=== vs ==', ale w JAVASCRIPT, można przeczytać tutaj: http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter- which-equal-operator-i-use –