Routery i sposoby routingu, Czyli jak to zrobić wydajnie, a się nie narobić |
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ć |
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ę
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ć." |
|
|
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 |
|
|
Wersja Lo-Fi | Aktualny czas: 10.06.2024 - 07:44 |