Di seguito sono riportati due snippet semplificati che non variano nel loro risultato.La clonazione di un oggetto prototipo offre miglioramenti delle prestazioni rispetto alla creazione di oggetti da zero?
Schema 1, oggetti da zero:
foreach ($recipients as $recipient) {
$message = new Message();
$message->setBody("This is the body of the message.");
$message->setRecipient($recipient);
$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
Pattern 2, la clonazione di un oggetto prototipo:
$prototype = new Message();
$prototype->setBody("This is the body of the message.");
foreach ($recipients as $recipient) {
$message = clone $prototype;
$message->setRecipient($recipient);
$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
unset($prototype);
fa la clonazione oggetto (modello 2) fornire miglioramenti delle prestazioni rispetto creare oggetti da zero (schema 1) in termini di utilizzo della memoria, raccolta dei dati inutili e/o cicli della CPU? Prendi in considerazione anche un numero elevato di proprietà fisse (che non cambiano tra le istanze) e un numero elevato di loop.
Aggiornamento: Ho bisogno di diverse istanze di oggetto in ogni ciclo. Ho aggiunto la chiamata saveToDatabase
agli esempi per assomigliare, per esempio dare un ID al messaggio. ;)
Grazie per la risposta. Nel mio caso sono richieste due istanze diverse. Ho aggiornato la mia domanda per riflettere meglio questo requisito. Ma penso che il tuo riferimento al benchmark 'clone' risponda abbastanza bene alla mia domanda: meglio clonare che creare nuovi oggetti. –
Clone non ha bisogno di cercare un costruttore ed eseguirlo. Più è pesante il costruttore, più grande è il vantaggio. – tacone
@tacone Tuttavia, deve cercare un __clone() magico, quindi è solo la parte di esecuzione che varia e tutto dipende dalla classe. – IMSoP