Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] imap library - bardzo wolna aplikacja
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam,

Mam taki problem ze buduje klienta poczty elektronicznej, no i teraz za kazdym razem gdy wysylam jakies żądanie przechodzi przez bootstrap'a wszystko leci przez kontrolery i tam zostaje wywolany model oraz widoki. Sęk w tym ze za kazdym żądaniem musze od poczatku uzywac funkcji imao_open, wyglada to mniej wiecje tak :

Oto kawalek kontrolera :

  1. function mailbox() {
  2. //echo 'MailboxController action mailbox!';
  3. print_r($_SESSION);
  4. $this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap');
  5. $this->model->reconnect($_POST['mailbox']);
  6. $view = new LoginView;
  7. $boxes = $this->model->getMailboxes();
  8. $msgsParts = $this->model->getMsgsParts(3);
  9. $view->setVars('boxes', $boxes);
  10. $view->setVars('parts',$msgsParts);
  11. $view->display($_POST['action']);
  12. }
  13.  
  14. function message($params) {
  15. print_r($params['id']);
  16. $view = new LoginView;
  17. $this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap');
  18. $view->setVars('message', $this->model->getMessage($params['id']));
  19. $view->display('message');


Linijka
  1. $this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap');


Odpowiada za polaczenie sie do skrzynki imap (w modelu jest to imap_open()) a to trwa przynajmniej 5 sekund, i za kazdym razem gdy np chce wyswietlic inna skrzynke musze czekac az zainicjuje sie kolejne polaczenie, to samo gdy chce zobaczyc dana wiadomosc, w w/w przykladnie funkcja message($params) tez musi połączyć sie od nowa poprzez imap_open i przez to aplikacja jest strasznie wolna, jak moznaby poprawic szybkosc aplikacji ?

Ktos kto pisal kiedykolwiek klienta pocztowego moze cos podpowiedziec ?

Edit----------------------------------------------
Moje pytanie jest tak proste czy tak trudne ze nikt nie chce odpowiedziec ? dry.gif
thek
Wolfie... Przecież imap_connect zwraca Ci identyfikator połączenia. Przechowuj go w ogólnodostępnym miejscu i używaj w razie pobierania wiadomości czy wszelkich operacjach, aż do wylogowania włącznie. Co do połączenia z nowym mailbox to zawsze poczekasz sobie na otwarcie połączenia i tutaj nic nie przyspieszysz raczej. To co możesz zrobić ewentualnie to kombinowanie z systemem zakładek. Każdy mailbox byłby jako obiekt AJAX w swojej zakładce. Przechowywać byś musiał tylko uchwyty connect na każdą z zakładek i wykonywać żądania na odpowiedniej skrzynce w zależności od tego w której zakładce co. Bo myślę, że choć wykonanie rozłączenia z jedną skrzynką by logować do innej jest prostsze, to potem przejście znów do pierwszej wylogowuje z drugiej i ponownie loguje do pierwszej. A tak kombinując z AJAXem, byś mógł mieć tyle kont otwartych ile chcesz (a raczej ile komp wytrzyma).

Tutaj akurat teoretyzuję i raczej na logikę wymyślam rozwiązanie, bo nigdy nie potrzebowałem tworzyć webowego klienta mailowego. Myślę, że rozwiązanie jakie proponuję, usprawniło by i przyspieszyło całość. Proponuję AJAX w systemie zakładek, bo przeładowywanie całej strony kończyło by się połączeniami do każdej ze skrzynek i asynchroniczność jest tutaj moim zdaniem jak najbardziej wskazana.
Wolfie
No ale ja wlasnie mam to zrobione ajaxem. Ajaxem przekazuje zmienne do kontrolera, w raczej do index.php ktory tworzy instancje klasy MainController i dalej przekazuje zmienne do odpowiedniego kontrolera, wiec tak naprawde mi nie przeladowuje calej strony, ale żądania leca od poczatku ze tak powiem.

Juz podobny temat omawialem z wookieb, zobacz tutaj

No i wlasnie ta rozmowa z wookieb mnie zmusila zeby napisac ten temat, a jakbym łączył sie z serwerem zanim jeszcze przekaze żądania do bootstrapa to cos da ? Czyli tak jakby połączenie z serwerem pocztowym bylo niezależne od żądań.....

Cytat
Co do połączenia z nowym mailbox to zawsze poczekasz sobie na otwarcie połączenia i tutaj nic nie przyspieszysz raczej.


No jasne, ale jak zrobic zeby nie musiec wywolywac imap_open , a jednynie imap_reopen , bo właśnie przez to ze musze ciagle wywoływać imap_open to ta aplikacja jest tak wolna.....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.