Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Routery i sposoby routingu, Czyli jak to zrobić wydajnie, a się nie narobić
kwiateusz
post 21.07.2008, 09:31:30
Post #1


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




Zgłoszono zapotrzebowanie na taki temat więc tworzę smile.gif

Myśl przewodnia: "W jaki sposób tworzyć routery na potrzeby naszych aplikacji, jakie są wydajne a jakie nie. Jakich używać a jakich nie używać."
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
eai
post 21.07.2008, 10:04:26
Post #2





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


Przeglądając framework Zenda, system Rutowania oparty jest o jeden Router_Rewrite zawierający tablicę obiektów tras, na których poźniej wykonywana jest pętla foreach i każdemu z osobna jest wywoływana metoda $route->match($pathInfo).

Pomysł bardzo wygodny, bo możemy definiować sobie tyle tras różnego rodzaju ile chcemy, implementując oczywiście odpowiedni interfejs. Minusem jest jednak wydajność takiego rozwiązania.

Myśle że lepszym pomysłem byłoby rozdzielić Router_Rewrite na routery:
a) Rewrite (domyślny ostatni w kolejności do sprawdzania router)
- brak magazynowania tras, bo nie byłoby takiej potrzeby ponieważ router wyciąga parametry z tego co dostaje (/onas/kontakt)
B) Static (statyczny router):
- magazynuje tylko statyczne trasy i jej parametry
- brak dynamicznych parametrów
- przechowuje trasy w tablicy a indeksem tablicy jest szablon trasy (np. o-nas,kontakt.html)
- błyskawiczne znajdowanie trasy
c) Static Rewrite (statyczno-dynamiczny router):
- magazynuje tylko statyczne trasy i jej parametry
- możliwość dynamicznych parametrów (id/3)
- przechowuje trasy w tablicy a indeksem tablicy jest szablon(np. /pl/wydarzenia-o-biznesie) trasy (np. /pl/wydarzenia-o-biznesie/id/5 gdzie /pl/wydarzenia-o-biznesie to trasa statyczna a id/5 to dodatkowy parametr dynamiczny)
- dość szybkie znajdowanie tras

d) Regex (rutowanie za pomocą wyrażeń regularnych)
- magazynuje wszelkiego rodzaju trasy i ich parametry
- przechowuje trasy w tablicy a indeksem jest pattern wyrażenia regularnego
- niestety mało wydajne wyszukiwanie - konieczność użycia wyrażeń regularnych

W pierwszej kolejności nasz framework zacząłby od sprawdzania tras statycznych, następnie od statyczno - dynamicznych, potem wyrażenia regularne i na koniec rewrite który wyciąga z urla parametry jeśli nie znaleziono nic w powyższych routerach.

Po testach szybkości:
3 krotnie szybciej routing się wykonuje jeśli mamy 3 routery a trasy i parametry przechowywujemy na tablicach, niż używając jednego routera i przechowywując instancje obiektów tras w jednej tablicy.

Routing oparty o instancje obiektów tras:
Dodanie tras statycznych:0.00089502334594727
Dodanie tras regex:0.0009760856628418
Szukanie tras:0.00070309638977051
Czas całkowity:0.0026209354400635

Routing oparty o 3 routery i tablicę do przechowywania tras i parametrów:
Dodanie tras statycznych:0.00034093856811523
Dodanie tras regex:0.00036096572875977
Szukanie tras:0.00030183792114258
Czas całkowity:0.0010831356048584

Ten post edytował eai 21.07.2008, 10:59:55
Go to the top of the page
+Quote Post

Posty w temacie
- kwiateusz   Routery i sposoby routingu   21.07.2008, 09:31:30
- - eai   Przeglądając framework Zenda, system Rutowania opa...   21.07.2008, 10:04:26
- - Cysiaczek   Mam prośbę: czy mógłbyś wykonać miarodajne testy n...   21.07.2008, 15:46:24
- - eai   To były testy w pętli for i <= 100, robiłem tes...   21.07.2008, 15:49:12
|- - Sedziwoj   Cytat(eai @ 21.07.2008, 16:49:12 ) To...   23.07.2008, 09:58:10
- - SHiP   Ja swój router oparłem o dynamiczne dobierani...   31.07.2008, 10:41:15
|- - bigZbig   Cytat(SHiP @ 31.07.2008, 11:41:15 ) ....   21.10.2008, 18:33:01
- - Sedziwoj   @SHiP Wiesz, można mieć tak że jest obiekt który t...   31.07.2008, 14:06:06
- - splatch   Bardzo dobry routing posiada Agavi, opis w dokumen...   9.09.2008, 08:02:23
- - jarek_bolo   W Kohanie integrują Routing oparty na tym: http://...   9.09.2008, 15:26:44
- - Sedziwoj   @bigZbig Nie chodzi o to aby wykorzystywać wi...   21.10.2008, 22:51:19
|- - bigZbig   Cytat(Sedziwoj @ 21.10.2008, 23:51:19...   24.10.2008, 14:46:52
|- - Sedziwoj   Cytat(bigZbig @ 24.10.2008, 15:46:52 ...   27.10.2008, 10:38:42
- - Sh4dow   Nie wiem ale czasami takiego sposobu rozwiązywania...   22.10.2008, 10:04:23
- - Moli   W temacie ostatnio nikt nie pisze, więc opiszę w j...   29.12.2008, 21:39:15
- - wlamywacz   No i może ja swój router opiszę. Zasada jego dział...   30.12.2008, 15:01:24
- - bim2   To może ja zapodam już gotowy Router. Pe...   13.01.2009, 23:25:59
- - bigZbig   @bim2 Widze, że coś podobnego do rootera w Zend Fr...   13.02.2009, 15:09:52
- - bim2   W sumie można dopisać do tych confingu które położ...   13.02.2009, 15:53:11
- - Helid   Najpraktyczniejszym rozwiązaniem jest już powyżej ...   10.02.2010, 19:01:33
- - tomahawk   Pozwolę sobie odkopać temat. Jak proponujecie prz...   1.08.2010, 20:36:41
|- - bmL   Cytat(tomahawk @ 1.08.2010, 21:36:41 ...   15.10.2010, 00:18:58
- - NuLL   1. W mojej opinii dane z routingu powinno sie wyko...   2.08.2010, 20:29:54
- - Ormin   A teraz coś innego , hasło Router, ale nie chodzi ...   2.09.2010, 17:59:38
- - hind   ja u siebie mam rozwiązane to w ten sposób że do k...   15.10.2010, 09:15:35
- - Crozin   CytatJedyny minus to to że articleName (które dopi...   15.10.2010, 14:28:21
- - bmL   Będę musiał sprawdzić jak to jest dokładnie zrobio...   15.10.2010, 15:05:59
- - mrWodoo   Mój router http://wklej.to/UbZca Klucz zabezp. - 1...   2.05.2013, 14:47:24
- - em1X   Cytat(mrWodoo @ 2.05.2013, 15:47:24 )...   19.10.2013, 00:08:43


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 Wersja Lo-Fi Aktualny czas: 10.06.2024 - 07:44