Чому ===
швидше, ніж ==
у PHP?
=== vs ==
, але в JAVASCRIPT, можна прочитати тут: stackoverflow.com/questions/359494 / ...
Чому ===
швидше, ніж ==
у PHP?
=== vs ==
, але в JAVASCRIPT, можна прочитати тут: stackoverflow.com/questions/359494 / ...
Відповіді:
Оскільки оператор рівності ==
примушує або перетворює, тип даних тимчасово перевіряє, чи є він рівним іншому операнду, тоді як ===
(оператору ідентичності) не потрібно робити якісь перетворення, і, таким чином, проводиться менше роботи, що робить його швидшим.
По-перше, === перевіряє, чи є два аргументи одного типу - значить, число 1 та рядок "1" не спрацьовують під час перевірки типу, перш ніж проводиться порівняння. З іншого боку, == не перевіряє тип спочатку і продовжує і перетворює обидва аргументи в один і той же тип, а потім проводить порівняння.
Тому === швидше перевіряє стан відмови
==
також перевіряє тип спочатку, щоб побачити, чи потрібно проводити перетворення типів. Факт, ===
який не здійснює перетворення на наступному кроці, - це робить його швидшим.
Слід розглянути дві речі:
Якщо типи операндів різні , то ==
і ===
виробляють різні результати . У цьому випадку швидкість роботи операторів не має значення; важливо, що з них дає бажаний результат.
Якщо типи операндів однакові, ви можете використовувати або обидва, ==
і те ===
і інше дасть однакові результати . У цьому випадку швидкість обох операторів майже однакова. Це відбувається тому, що жодне з операторів не здійснює перетворення типів.
Я порівняв швидкість:
$a == $b
проти $a === $b
$a
і $b
були випадкові цілі числа [1, 100]І ось результати:
$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
Видно, що швидкість майже однакова.
Я не знаю, чи значно швидше, але === у більшості мов - це пряме порівняння типів, тоді як == намагатиметься ввести примус при необхідності / можливо, щоб отримати збіг.
Тому ===
що не потрібно примушувати операнди бути однотипними, перш ніж порівнювати їх.
Я сумніваюся, різниця у швидкості дуже велика. У звичайних обставинах ви повинні використовувати той, який має більше сенсу.
На закінчення === швидше, тому що не перетворює тип даних, щоб побачити, чи мають дві змінні однакове значення, але коли вам потрібно побачити, чи мають дві змінні однакове значення, ви будете використовувати ==, якщо не значите, який тип є змінними , або ===, якщо важливий також тип змінних.
Швидше не слід вимірювати просто час прямого виконання (прямі тести на працездатність майже незначні в цьому випадку). З огляду на це, мені потрібно пройти тест, що включає ітерацію чи рекурсію, щоб реально побачити, чи є значна, сукупна різниця (при використанні в реалістичному контексті). Час тестування та налагодження, який ви заощадите під час розгляду крайових справ, також має бути важливим для вас
У php (c коді) значення - це "клас" типу:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
Коли ваш порівнюють $a == $b
і $a
є int
типом, то буде що - щось на кшталт:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
але string
'1'
не буде приведено до коду ascii 49
, це буде 1
.
Коли ви порівнюєте $a === $b
і $a
є int
тип, буде , як торкнутися:
if ($a->int_ == $b->int_)
Якщо результати тестування є правильними, це має бути проблема компілятора,
Процесор буде робити все, що йому сказано, робити в тактовому циклі
Якщо це менше робити, то це буде робити швидше
Доповнення:
Ну, власне, якщо компілятор вже створив навантаження машинного коду для обробки, то якщо він уже додав мільйони речей, щоб впоратися з тим, який тип даних потребує порівняння, то видалення одного "другорядного" ІФ не змінить швидкості сильно зовсім.
Якщо хтось все ще читає це, то мені цікавіше більше обговорення.
Філ