Anche qui, sensorario, ti esprimo solo il mio umile punto di vista. La mia esperienza è ancora limitata, però …
Prova a fare questo test (ed inorridirai come me la prima volta che l’ho notato)
Begin Transaction
Execute
Execute
Execeute (qui fai apposta qualcosa che la faccia fallire, inserisci un errore sql per esempio)
Commit
Vedrai, ed inorridirai, che Yii NON le gestisce bene le transazioni (o forse la colpa è di mysql sotto), in realtà se la terza SQl fallisce, il rollback delle prime due NON viene fatto.
Questo è un fattore, l’altro fattore è prestazionale. Ci vuole davvero meno (in termini di esecuzione, non di tempo di sviluppo) a usare mysqli a mano, piuttosto che passare per le transaction.
Dove le performance sono a dir poco vitali, l’ottimizzazione dei tempi passa quasi sempre da una strada mooooolto lontana ai framework, qualsiasi essi siano.
Fai un test diviso in tre parti fatto così
-
1000 insert query fatte tramite Yii::ap()->db->createCommand($sql)->execute();
-
idem, ma incapsulandole in una transaction fatta da Yii
-
un bel try…catch con dentro 1000 query fatte tramite la classe mysqli nativa di php
Purtroppo il codice nativo può essere anche 10 volte più performante rispetto al framework, ma questo è ovvio, scontato, naturale, comprensibile ed accettabile.
Semplicemente, comesviluppando un software in .NET le parti vitali talvolta si fanno in C++ a basso livello, così sviluppando in Yii le parti che necessitano di performance da paura si fanno a manina.
Yii è eccellente per agevolare la vita, ma alcune parti dell’applicazione, se si lavora sotto carichi (in termini di request http e di query) vanno quasi per forza fatte a mano.