Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] imap library - bardzo wolna aplikacja
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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 ? (IMG:style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.

Ten post edytował thek 16.10.2009, 11:27:34
Go to the top of the page
+Quote Post
Wolfie
post
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


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.....

Ten post edytował Wolfie 16.10.2009, 12:14:33
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 08:25