Domanda

Perché === più veloce di == in PHP?

È stato utile?

Soluzione

Perché il == operatore di uguaglianza costringe, o converte il tipo di dati temporaneamente per vedere se è uguale a l'altro operando, mentre (operatore identità) === non ha bisogno di fare qualsiasi conversione di sorta e quindi meno lavoro è fatto, rendendo più veloce .

Altri suggerimenti

=== non esegue fusione di caratteri, in modo 0 == '0' restituisce true, ma 0 === '0' - a false

.

In primo luogo, === controlla se i due argomenti sono gli stessi type - in modo che il numero 1 e la stringa '1' fallisce il controllo di tipo prima di qualsiasi confronto siano reali. D'altra parte, == non controlla il primo tipo e va avanti e converte entrambi gli argomenti allo stesso tipo e poi fa il confronto.

Pertanto, === rapida applicazione verifica una condizione sicuro

Ci sono due cose da considerare:

  1. Se tipi operandi sono diversi poi == e producono === risultati diversi . In questo caso la velocità degli operatori non ha importanza; ciò che conta è che uno produce il risultato desiderato.

  2. Se tipi operandi sono gli stessi, allora si può utilizzare sia == o === sia come produrrà stessi risultati . In tal caso la velocità degli operatori è quasi identico. Questo perché non conversione di tipo viene eseguita da entrambi gli operatori.

Ho confrontato la velocità di:

  • $a == $b vs $a === $b
  • dove $a e $b erano interi casuali [1, 100]
  • le due variabili sono state generate e confrontate un milione di volte
  • i test sono stati eseguiti 10 volte

Ed ecco i risultati:

 $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

Si può vedere che la velocità è quasi identico.

Io in realtà non so se è significativamente più veloce, ma === nella maggior parte delle lingue è un confronto di tipo diretto, mentre == cercherà di fare il tipo di coercizione, se necessario / possibile ottenere una corrispondenza.

Il == comporta un maggiore sovraccarico di conversione del tipo prima del confronto. === primo controlla il tipo, quindi procede senza dover fare alcuna conversione di tipo.

A causa === non ha bisogno di costringere gli operandi essere dello stesso tipo prima confrontandoli.

Dubito la differenza di velocità è molto però. In circostanze normali si dovrebbe utilizzare qualsiasi operatore ha più senso.

In conclusione === è più veloce perché non converte il tipo di dati per vedere se due variabili hanno lo stesso valore, ma quando si ha bisogno di vedere se due variabili hanno lo stesso valore che si intende utilizzare == se doesen't Mather cosa tipo sono variabili, o === se è importante anche il tipo di variabili.

veloce deve non solo essere misurato in tempo di esecuzione diretta (test diretti prestazioni sono quasi trascurabile in questo caso). Detto questo, avrei bisogno di vedere un test che coinvolge iterazione, o ricorsione, per vedere veramente se v'è una significativa, differenza cumulativa (se usato in un contesto realistico). Il tempo di test e debug vi farà risparmiare quando si tratta di casi limite dovrebbe essere significativo per voi, anche

Se i risultati del test sono corretti, allora deve essere un problema di compilatore,

Il processore farà di tutto viene detto di fare su un ciclo di clock

Se si ha meno a che fare allora sarà più veloce di fare

Aggiunta:

Ah beh in realtà se il compilatore ha già creato i carichi di codice macchina da elaborare, quindi se ha già aggiunto una marea di roba per far fronte a quale tipo di dati deve confrontare, poi la rimozione di uno "minore" se non sarà cambiare velocità molto a tutti.

Se qualcuno legge ancora questo sono allora io sono interessanti in più discussione.

Phil

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top