Počasen odzivni čas pri pošiljanju emailov
3 naročniki
3 naročniki
Na strani, ko uporabniki komentira fotografijo, skripta preveri komu vse mora poslati email. Vendar celoten proces samega pošiljanja emaila traja enostavno predolgo (od 2-10 sekund).
Malo sem raziskoval kaj v PHP kodi porabi največ časa in našel to:
// fetch response line after line
while (!feof($fp)) {
$result = fgets($fp, 1);
if (strlen($result)!=0) {
if (substr($result, 0, 3) == 250) {
$ok = 1;
// lower timeout after first valid response
if (function_exists('stream_set_timeout')) {
stream_set_timeout($fp, 1);
}
}
else {
// reset ok on error
$ok = 0;
break;
}
}
else {
// EOF
break;
}
}
Od začetka tega "ukaza" pa do konca se porabi tisti 2 oziroma 10 sekund.
Je kdo tako dober in mogoče iz te kode lahko razbere ali je kakšna možnost optimizacije oziroma popravka?
4 odgovori
Tole je komunikacija s mail strežnikom. Če traja, preden se stran zaradi tega pokaže, bi bila moja rešitev problema asinhrono pošiljanje e-mailov.
Pošiljanje maila naj samo vse maile zapiše v bazo, ločena skripta pa pošilja maile. Zgorej pa čaka na response, da vrne. Lahko sicer daš timeout na 1, vendar če se ti bo strežnik javljal dlje kot 1 sekundo, bo izgledao, kot da mail ni bil poslan, čeprav je mogoče bil.
@Roky mogoče poznaš kak live example, da vidim kako bi to naredil?
Problem tukaj je, da uporabnik doda komentar prek jquery-a in čaka na celoten respond, da mu pokaže oddani komentar. Vmes pa seveda server počasi pošilja vse maile. Verjetno bi moral nekako ločit, da ena funkcija zapiše komentar v bazo, vzporedno pa se zalaufa še funkcija, ki pošlje obvestila na maile o novem komentarju.