Dzisiaj chciałem jak najszybciej zajrzeć do komputera, żeby sprawdzić ile czasu generowały się moje pliki, których generowanie zostawiłem na noc. Przychodzę, a moje biurko stoi w innym miejscu. Miejsce całkiem fajne i mam z przodu miejsce na nogi, gdzie stoi popsute krzesełko, na którym kładę stopy, także tutaj nie mogę narzekać (wczoraj przestawiałem biurko w inne miejsce, bo cały czas kombinujemy jak ustawić biurka, żeby zmieścić jeszcze jedną osobę). Siadam więc w nowym miejscu, ruszam myszką, żeby monitory wyszły ze stanu wygaszenia a tu nic się nie dzieje. Zerkam w dól, a komputer wyłączony. Powiedziałem tylko na głos, że dziękuję za wyłączenie kompa, ale zostawiłem go specjalnie włączonego, bo coś mi się generowało. No nic, na dokładne dane nie miałem co liczyć, ale zacząłem szperać po logach, bo trochę się tam zapisywało. Czas wykonania nie wyglądał zadowalająco. Wręcz mocno niezadowalająco. Widać metoda
usort niespecjalnie daje radę na tak dużych zbiorach. Pogadałem o tym w kuchni z kolegą i zaczęliśmy się zastanawiać nad innymi opcjami. Pogrzebałem trochę i znalazłem metodę
array_unshift(), która wstawia element na początek tablicy. Wykorzystałem ją więc w prostym ifie, gdzie przy pomocy tej metody wstawiałem mieszkańców Warszawy na początek tablicy, a metodą
array_push() pozostałych na koniec. Tę drugą później zamieniłem na
$tablica[] = $element, bo przeczytałem gdzieś na
php.net, że tak będzie szybciej. Dokładny cytat wygląda tak:
Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.
Teraz testy wyszły wyśmienicie, bo przesortowanie 26000+ obiektów zajęło około minuty, a nie dwóch godzin jak przy
usort(). Dalej już bawiłem się z dalszą częścią tej funkcjonalności, a więc obsługą i nazwami plików oraz aktualizacją datą ukończenia generowania całości w bazie. Tutaj znowu się zaczął jakiś problem i metoda, która dopisałem w repozytorium tej klasy nie chciało działać. Errory, które się pojawiały były dla mnie nieczytelne, więc zawołałem kolegę. On też nie bardzo od razu wiedział czemu to nie działa i trochę się bawił metodą prób i błędów. Koniec końców, okazało się, że trzeba było ustawić format daty zapisywanej do bazy, bo jakoś domyślny nie chciał działać, chociaż zupełnie nic na to nie wskazywało i obaj patrzyliśmy po sobie, że ten błąd był mega głupi.
W dalszej części dnia zająłem się powiązanymi poprawkami we front-endzie, czyli wyświetlanie statusu generowanych plików. Napisałem jakiś podstawowy end-point, ale przerwałem w pewnym momencie, bo wciąż nie mamy rozwiązanego problemu, gdzie te pliki będą docelowo lądować i jak będą udostępnianie klientowi. Zwłaszcza, że kolega poprawia kod innej części generowania tych wysyłek i w zasadzie jeśli to się zmieni, to mój status generowania tych plików, który robiłem w zeszłym tygodniu poleci do kosza, bo sporo się może zmienić. No ale to już będziemy ustalać w poniedziałek.
Brak komentarzy:
Prześlij komentarz