Profilowanie i optymalizacja
Wczoraj na blogu opisywałem rozwiązanie zadania „Misja Gynvaela 008”, jednak o ile udało się wygenerować mapę i odczytać hasło, to czas przetwarzania plików był stanowczo zbyt długi. Postanowiłem przyjrzeć się temu ponownie i postarać się coś przyśpieszyć.
Profilowanie
Pierwszym krokiem będzie sprawdzenie za pomocą narzędzia Blackfire co stanowi tzw. wąskie gardło, czyli jaka czynność trwa najdłużej. Ograniczyłem więc główną pętlę klasy Solver, tak aby przetwarzała ona jedynie 10 plików, następnie odpaliłem blackfire.
blackfire run php solver.php
Okazało się, że przetworzenie 10 plików trwa aż 6.31s, a wąskie gardło stanowi funkcja imagejpeg wywoływana aż 275 razy.
Optymalizacja
Nie ma potrzeby, aby plik mapy był zapisywany po każdym dodaniu punktu. Przerobiłem więc kod tak, aby przed główną pętlą w klasie Solver utworzyć obraz, a następnie po jej zakończeniu go zapisać. Dokładne zmiany można sprawdzić tutaj. Kolejne sprawdzenie za pomocą narzędzia blackfire przyniosło już zadowalający rezultat.
Obecnie przetworzenie wszystkich danych i narysowanie mapy zajmuje jakieś 80-90 sekund.
Parsed 187812 files in 83 seconds
Subscribe and master unit testing with my FREE eBook (+60 pages)! 🚀
In these times, the benefits of writing unit tests are huge. I think that most of the recently started projects contain unit tests. In enterprise applications with a lot of business logic, unit tests are the most important tests, because they are fast and can us instantly assure that our implementation is correct. However, I often see a problem with good tests in projects, though these tests’ benefits are only huge when you have good unit tests. So in this ebook, I share many tips on what to do to write good unit tests.
Dodaj komentarz