niedziela, 1 listopada 2015

Wydajność skryptu

Czy skracanie kodu wpływa na wydajność? Nie jestem maniakiem wydajności, ale bawiąc się Pythonem 3.3 pokusiłem się na zbadanie czasu wykonywania kodu. Należy mieć na uwadze że PyScripter też do czasu wykonywania dołożył swoje ułamki sekund, ale badanie jest wykonane w niezmiennym środowisku i wystarczy do porównań (metoda time.clock()). Obliczając czas postanowiłem go uśredniać, ponieważ Windows nie jest systemem czasu rzeczywistego, wątki Windows wpływają na pomiar czasu. Do badań napisałem prostą funkcję konwertującą typ string do listy: funkcja('abcd') --> ['a','b','c','d']. Ponieważ nie chciałem użyć innych metod, napisałem tę funkcję od podstaw:

 0.000274s.

Ponieważ funkcja wydała mi się zagmatwana i mało czytelna, trochę ją zmieniłem:

 0.000404s.

Ta funkcja od razu wygląda lepiej. I w tym momencie postanowiłem sprawdzić wydajność podobnych rozwiązań i zacząłem poprawiać kod na trochę inne sposoby. Nawet udało mi się zmniejszyć ilość linijek w funkcji – ta najkrótsza funkcja obliczała (0.001647s) ~6x dłużej od pierwszej funkcji (0.000274s)!
Pisząc kod trzeba zwracać uwagę gdzie umieszcza się deklarację zmiennej, żeby przypadkiem  nie wykonywała się wielokrotnie, co w dużych aplikacjach ma wpływ na wydajność. Takie umieszczenie deklaracji w funkcji jest mało wydajne, mimo że jest zwięzłe:

for i in range(0,len(Str)):

Natomiast umieszczenie deklaracji przed pętlą, powoduje że zostanie ona wykonana tylko raz (jednak zwiększa ilość wierszy kodu) i raz obliczona może zostać wielokrotnie użyta:

dls= len(Str)
for i in range(0,dls):

Na wydajność kodu wpływają także zastosowane moduły i sposób pisania kodu. Jednak zawsze warto wybrać kompromis między wydajnością a czytelnością, ponieważ czytelny kod łatwo poprawiać. Eksperyment był fajny!

Kod skryptu: