Techniki Zaawansowane
3 godz. 43 min · Python · Full-stack i Programowanie
Grzegorz SzymborskiProgramistaJeżeli na samym początku nie przygotujemy dobrze projektu, to gdy wrócimy do niego po dłuższym czasie - czekają nas kłopoty. Jeżeli uda się nam go uruchomić, to rozeznanie się w nim będzie udręką. Prowadzący pokaże Ci jak wyglądają jego produkcyjne aplikacje, na co zwraca uwagę i co pomaga mu trzymać porządek.
Biblioteka pytest posiada wiele ciekawych funkcjonalności. Parametryzowanie testów, fixture i uproszczona składnia pozwalają nam skupić na testowaniu tego, co kluczowe, wydzielając mniej istotne fragmenty kodu. To wszystko sprawia, że w pewnym momencie łatwiej będzie Ci pisać testy, niż ręcznie sprawdzać poprawność działania apki.
Jeżeli aplikacja, którą stworzysz, osiągnie dużą popularność, może się okazać, że przytłoczona dużym ruchem zacznie spowalniać... lub całkowicie przestanie odpowiadać. Opiszemy różne techniki służące temu, by temu zaradzić - od metod select i prefetch related, aż po cache. Na deser przeprowadzimy na stronie test obciążeniowy za pomocą narzędzia locust.
Django i Postgres to świetne połączenie. Framework ten posiada wbudowaną obsługę wyszukiwania pełnotekstowego oferowanego przez tę bazę. Warto wiedzieć, kiedy jej użyć, a kiedy wystarczy zwykłe icontains.
ORM w Django ułatwia mnóstwo operacji. A czasem nie dość to, że ułatwia... to jeszcze przyspiesza! Chcemy zainspirować Cię czterema metodami: annotate, aggregate, bulkupdate i bulkcreate. Gdy pojawią się one w naszym kodzie, zaczniemy doceniać uroki frameworka Django.
Kurs jest stworzony dla osób, które znają już podstawy Django i wiedzą, jak pisać proste strony. Znają modele, widoki, oraz niestraszny im jest Python. Zalecana jest również podstawowa znajomość dowolnej relacyjnej bazy danych. W kursie przedstawiamy niekiedy narzędzia i praktyczne przykłady, jak można ich użyć, ale w celu zaimplementowania konkretnego rozwiązania w projekcie wymagana będzie umiejętność czytania dokumentacji.
Tym rozdziale chciałem opowiedzieć Wam o
dodatkowych metodach których nie udało mi się opisać w kursie ale z których
korzystają i które wiem że bardzo pomagają przy działaniu naszej strony.
Jedną z pierwszych takich metod która mi przychodzi do głowy jest.
Rzeczy które długo się wykonują a mówiąc
konkretniej jeżeli mamy jakieś obciążające zadania np.
wysyłanie zdjęć na serwer zewnętrzny
przetwarzanie zdjęć obserwowanie PDF ów jeżeli mamy coś co może trwać sekundę ale
jednocześnie może trwać pięć sekund to słabo jest robić to w czasie kiedy
użytkownik czeka na Request i do tego służą narzędzia kuszące.
Jednym z najpopularniejszych serii
jest ono najdłużej wspierane jest bardzo dobrze dopracowane i
bardzo dobrze współpracuje z takim drugim który jest nieco łatwiejsze w
obsłudze i jest nieco bardziej uproszczony.
Kolejki chować można nawet rzeczy dość proste takie jak
lokowanie artykułów na serwisach społecznościowych tak jak jest to
zrealizowane na dużych portalach ponieważ wtedy mamy pewność że wszystkie
działania będą gdzieś zapisane i będą się wykonywały w odpowiednim czasie.
Można też wysyłkę maili przenieść do kolejki.
Kolejnym narzędziem które bardzo przyspiesza zwłaszcza
wyszukiwanie danych jest indeks baza danych.
Pamiętajmy żeby każde pole po którym często wyszukuje
którego często używamy miało parametr GB indeksu stawiamy na true.
Pozwoli to nam dramatycznie zmniejszyć czas odpowiedzi przy dużej ilości danych.
Jeżeli chcemy działać na naprawdę dużą
skalę możemy naszą Yang ową aplikację eskalować.
Oznacza to że uruchomimy nie jeden raz bekhend tylko uruchomimy go wiele razy i
za pomocą lub balansu zera będziemy serwować po kolei każdą z instancji to
znaczy że jeżeli wyjdzie dziesięciu użytkowników i mamy dziesięć serwerów to
jednym z takich jedną z takich metod balans gu jest rozporządzenie Ruchu.
Po kolei na każdy bekhend.
Tylko tutaj jest trudna rzecz z synchronizację danych
między tymi błędami ponieważ musimy mieć jedno źródło
danych które będziemy edytować na przykład jedną bazę danych nie możemy mieć
dziesięciu baz danych i musimy mieć miejsce w którym przechowuje sesje żeby
użytkownik przechodząc między nami był cały czas zalogowanie.
Kolejnym narzędziem które bardzo przydaje
się przy profilowane naszej aplikacje przy znajdowania słabych punktów znaków i
questów które Wypadałoby poprawić jest Django z Silk.
Działa on na zasadzie Millera który przechwytów każdy Request
i każdy Request wraz ze statystykami zapisuje do bazy danych.
Dzięki temu tak jak możecie zauważyć mamy
listę questów i to ile czasu one się wykonywały dzięki temu niekoniecznie my
musimy przeglądać Request i patrzeć w derbach.
Możemy wejść w Django Stick i na podstawie wszystkich użytkowników którzy byli na
naszej stronie zobaczyć gdzie mamy problem.
Bo problem może być np.
gdzieś w poście.
Problem może być gdzieś np.
w przekierowania który o którym niekoniecznie musimy wiedzieć.
Dzięki temu będziemy mogli łatwo to podejrzeć.
Problem z Django z silnikiem jest
natomiast taki że zapisuje on w bazie danych mnóstwo informacji.
Pamiętam mieliśmy kiedyś taką sytuację że baza danych zaczęła zajmować 500 GB.
Pomimo tego że nie było w niej za dużo informacji i się okazało że po usunięciu
tabeli wilkiem wróciła do 10 mega bajtów dlatego miejcie na uwadze że
Serb potrafi nam rozrasta się praktycznie w nieskończoność
i przy dużym obciążeniu potrafi też spowalnia działanie strony.