Tại sao ===
nhanh hơn ==
trong PHP?
=== vs ==
, nhưng trong JAVASCRIPT, có thể đọc tại đây: stackoverflow.com/questions/359494/
Tại sao ===
nhanh hơn ==
trong PHP?
=== vs ==
, nhưng trong JAVASCRIPT, có thể đọc tại đây: stackoverflow.com/questions/359494/
Câu trả lời:
Bởi vì toán tử đẳng thức ==
cưỡng chế hoặc chuyển đổi, loại dữ liệu tạm thời để xem liệu nó có bằng toán hạng khác hay không, trong khi đó ===
(toán tử nhận dạng) không cần thực hiện bất kỳ chuyển đổi nào và do đó ít được thực hiện, làm cho nó nhanh hơn.
Đầu tiên, === kiểm tra xem hai đối số có cùng loại không - vì vậy số 1 và chuỗi '1' không thành công trong kiểm tra loại trước khi thực hiện bất kỳ so sánh nào. Mặt khác, == không kiểm tra loại đầu tiên và tiếp tục và chuyển đổi cả hai đối số thành cùng loại và sau đó thực hiện so sánh.
Do đó, === nhanh hơn trong việc kiểm tra tình trạng lỗi
==
cũng sẽ kiểm tra loại đầu tiên để xem có cần thực hiện chuyển đổi loại nào không. Thực tế là ===
không thực hiện bất kỳ chuyển đổi nào trong bước sau đây là điều làm cho nó nhanh hơn.
Có hai điều cần xem xét:
Nếu các loại toán hạng là khác nhau ==
và ===
tạo ra kết quả khác nhau . Trong trường hợp đó, tốc độ của các nhà khai thác không thành vấn đề; Điều quan trọng là cái nào tạo ra kết quả mong muốn.
Nếu các loại toán hạng giống nhau thì bạn có thể sử dụng ==
hoặc ===
cả hai sẽ tạo ra kết quả giống nhau . Trong trường hợp đó, tốc độ của cả hai toán tử gần như giống hệt nhau. Điều này là do không có chuyển đổi loại nào được thực hiện bởi một trong hai toán tử.
Tôi so sánh tốc độ của:
$a == $b
đấu với $a === $b
$a
và $b
là số nguyên ngẫu nhiên [1, 100]Và đây là kết quả:
$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
Bạn có thể thấy rằng tốc độ gần như giống hệt nhau.
Tôi thực sự không biết liệu nó có nhanh hơn đáng kể hay không, nhưng === trong hầu hết các ngôn ngữ là so sánh kiểu trực tiếp, trong khi == sẽ cố gắng thực hiện cưỡng chế kiểu nếu cần / có thể để đạt được kết quả khớp.
Bởi vì ===
không cần phải ép buộc các toán hạng phải cùng loại trước khi so sánh chúng.
Tôi nghi ngờ sự khác biệt về tốc độ là rất nhiều mặc dù. Trong trường hợp bình thường, bạn nên sử dụng bất kỳ toán tử nào có ý nghĩa hơn.
Nhanh hơn không nên được đo trong thời gian thực hiện trực tiếp (kiểm tra hiệu suất trực tiếp gần như không đáng kể trong trường hợp này). Điều đó nói rằng, tôi sẽ cần phải xem một bài kiểm tra liên quan đến phép lặp, hoặc đệ quy, để thực sự xem liệu có sự khác biệt đáng kể, tích lũy (khi được sử dụng trong bối cảnh thực tế). Thời gian kiểm tra và gỡ lỗi bạn sẽ tiết kiệm được khi xử lý các trường hợp cạnh cũng có ý nghĩa với bạn
Trong giá trị php (c code) là một "lớp" như:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
Khi bạn đang so sánh $a == $b
và $a
là int
loại, sẽ có một cái gì đó như:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
nhưng string
'1'
sẽ không được chuyển sang mã ascii 49
, nó sẽ được 1
.
Khi bạn so sánh $a === $b
và $a
là int
loại, sẽ có lúc như:
if ($a->int_ == $b->int_)
Nếu kết quả kiểm tra là chính xác, thì đó phải là một vấn đề về trình biên dịch,
Bộ xử lý sẽ làm bất cứ điều gì được yêu cầu làm theo chu kỳ đồng hồ
Nếu nó có ít việc phải làm thì sẽ nhanh hơn để làm
Thêm vào:
Thực sự thì nếu trình biên dịch đã tạo ra vô số mã máy cần xử lý, thì nếu nó đã thêm hàng trăm thứ để đối phó với loại dữ liệu nào cần so sánh, thì việc loại bỏ một "nhỏ" IF sẽ không thay đổi tốc độ nhiều ở tất cả.
Nếu bất cứ ai vẫn đọc được điều này thì tôi thú vị trong cuộc thảo luận nhiều hơn.
Phil