Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inny][Symfony2][SF2]Swift_Message powolne zapisywanie do spoola
prz3kus
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 30
Dołączył: 22.01.2007

Ostrzeżenie: (0%)
-----


Witam,
potrzebuje wysłać kilkadziesiąt tysięcy maili, chciałem zapisać sobie wszystkie maile do spoola typu file (czyli do plików) i potem wysłać w cronie.

Problem jest taki że 200 maili do spoola ładuje sie 30min a ich wielkości są bardzo różne pomimo, że zawartość to pięć identycznych dla każdego maila obrazków w sumie ważących niecałe 200KB, a wielkości generowanych plików w spoolu wacha się od 50MiB do 247KiB jest to dla mnie niezrozumiałe :/

oto kawałek mojego kodu i config

  1. swiftmailer:
  2. transport: "%mailer_transport%"
  3. host: "%mailer_host%"
  4. username: "%mailer_user%"
  5. password: "%mailer_password%"
  6. # spool: { type: memory }
  7. spool:
  8. type: file
  9. path: '%kernel.cache_dir%/swiftmailer/spool'


  1. $baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
  2. $message = \Swift_Message::newInstance();
  3.  
  4. $query = 'SELECT * FROM tabelka LIMIT 2000';
  5. foreach($db->query($query) as $wiersz)
  6. {
  7.  
  8. $nr_klienta = 'xxx;
  9. $secret = 'xxx;
  10. $emailTo = 'xxx;
  11. $message->setContentType("text/html")
  12. ->setSubject('Zapraszamy do ZZZ - nr klienta: '.$nr_klienta)
  13. ->setFrom('zzz@zzz.pl')
  14. ->setTo($emailTo)
  15. ->setReplyTo('zzz@zzz.pl')
  16. ->setBody($this->renderView('ZZZBundle:_emailViews:zzz.html.twig',
  17. array(
  18. 'topMail' => $message->embed(Swift_Image::fromPath($baseurl.'/bundles/zzz/images/topMail.jpg')),
  19. 'textMail_1' => $message->embed(Swift_Image::fromPath($baseurl.'/bundles/zzz/images/textMail_1.png')),
  20. 'textMail_2' => $message->embed(Swift_Image::fromPath($baseurl.'/bundles/zzz/images/textMail_2.png')),
  21. 'buttonMail' => $message->embed(Swift_Image::fromPath($baseurl.'/bundles/zzz/images/buttonMail.png')),
  22. 'bottomMail' => $message->embed(Swift_Image::fromPath($baseurl.'/bundles/zzz/images/bottomMail.jpg')),
  23. 'secret' => $secret
  24.  
  25. )));
  26. $message->getHeaders()->addTextHeader('X-MAILTAGS', ZZZ_TEST');
  27.  
  28. $this->get('mailer')->send($message);
  29. }


Domyślam się że coś namieszałem tylko co?

Nie wiem czemu nie mogę edytować tematu w zawartości mam same krzaczki więc piszę niżej sad.gif

Dodałem do konfiga:

  1. logging: false


Teraz jest o wiele lepiej 100 maili generuje się około minuty tylko nadal pliki są spore, chodź ich wielkość spadło o połowę.

Teraz 100 wygenerowanych w spoolu message waży 1GiB więc średnio 10MiB wiadomości, a powinna co-najmniej 20 razy mniej sad.gif

Ten post edytował prz3kus 1.04.2016, 08:48:41
Go to the top of the page
+Quote Post
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Co do czasu generowania to nie wiemy na czym to uruchamiasz, więc może jest całkiem krótki.
W plikach powinny być zserialozowane wiadomości. Jeżeli rozmiary są takie duże to być może, pojawia się jakiś błąd i serializowany jest cały kontener (choć i tak wydaje się to dużo) lub jakiś var_dump. Nie wiem co może być źle, bo nie mam doświadczenia. Mogę Ci zaproponoważ wykonanie tej pętli bez użycia funkcji send, a do plików html zapisuj wynik funkcji renderView. Możesz też w pętli serializować wiadomość i sprawdzać rozmiar, czy też są takie problemy. Możesz też spróbować odserializować plik ze spool (np. z największym rozmiarem) i sprawdzić co w nim siedzi.
Podziel się wynikami eksperymentów.
Go to the top of the page
+Quote Post
prz3kus
post
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 30
Dołączył: 22.01.2007

Ostrzeżenie: (0%)
-----


Na końcu każdej wiadomości dodaje coś takiego:

Cytat
s:37:"\0Swift_Mime_SimpleMimeEntity\0_encoder";O:47:"Swift_Mime_ContentEncoder_QpContentEncoderProxy":3:{s:60:"\0Swift_Mime_ContentEncoder_QpContentEncoderProxy\0safeEncoder";O:42:"Swift_Mime_ContentEncoder_QpContentEncoder":3:{s:14:"\0*\0_charStream";O:39:"Swift_CharacterStream_NgCharacterStream":9:{s:52:"\0Swift_CharacterStream_NgCharacterStream\0_charReader";N;s:59:"\0Swift_CharacterStream_NgCharacterStream\0_charReaderFactory";r:14;s:49:"...................


I ta linijka waży czasem kilka MiB sama reszta wiadomości to 10KiB. I czasem te linijka mam 200KiB a czasem 50MiB

Dziwny jest ten świat biggrin.gif

Sprawa się wyjaśniła za każdym razem trzeba w pętli uruchamiać

Cytat
$message = \Swift_Message::newInstance();


inaczej ciągle dodawał mi Headers maila do ostatnio utworzonego pliku, dlatego pliki mi rosły

dzięki destroyerr za próbę pomocy

Pozdrawiam czas na weekend biggrin.gif


EDIT:123213

Jeszcze napiszę, że teraz zapisuję sie do spolla w minutę ponad 2000 wiadomości wink.gif

Ten post edytował prz3kus 1.04.2016, 13:27:52
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 02:16