Możesz zobaczyć dwa uproszczone fragmenty poniżej, które nie różnią się pod względem wyniku.Czy klonowanie obiektu prototypowego zapewnia poprawę wydajności w stosunku do tworzenia obiektów od początku?
wzór 1, obiekty od podstaw
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);
}
Wzór 2 klonowanie obiektu prototype:
$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);
Does klonowanie obiektu (wzór 2) zapewniają wyższą wydajność ponad tworzenia obiektów od zera (wzór 1) pod względem wykorzystania pamięci, odśmiecania i/lub cykli procesora? Rozważ także dużą liczbę stałych właściwości (które nie zmieniają się między instancjami) i dużą liczbę pętli.
Aktualizacja: Potrzebuję różnych wystąpień obiektu w każdej pętli. Dodałem saveToDatabase
połączenie do przykładów, aby przypominać to, niech to na przykład da identyfikator do wiadomości. ;)
Dzięki za odpowiedź. W moim przypadku wymagane są dwa różne przypadki. Zaktualizowałem moje pytanie, aby lepiej odzwierciedlić to wymaganie. Ale myślę, że twoje odniesienie do benchmarków 'clone' odpowie dobrze na moje pytanie: lepiej klonować niż tworzyć nowe obiekty. –
Klon nie musi szukać konstruktora i wykonywać go. Im cięższy konstruktor, tym większa korzyść. – tacone
@tacone Musi jednak szukać magicznego __clone(), więc różni się tylko częścią wykonawczą i wszystko zależy od klasy. – IMSoP