środa, 4 marca 2015

Optymalizacja kodu w ruby

Parę ciekawostek odnośnie optymalizacji kodu w ruby

Czasem warto poznać różne "sztuczki" aby przyspieszyć aplikację napisaną w ruby. Przejdźmy od razu do rzeczy:

1. Zamiast używać begin..rescue podczas zabezpieczenia się przed NoMethodError można użyć Object#respond_to?(:metoda)
Przyspieszenie: 10x

2) Jeśli mamy posortowaną tablicę to użycie Array#bsearch zamiast popularnego Array#find przyspieszy niemalże "diabolicznie" ;) Array#find działa w taki sposób, że sprawdza warunek na każdym elemencie, natomiast Array#bsearch (przeszukiwanie binarne) znajduje środek a następnie sprawdza warunek czy wartość jest większa, mniejsza, równa wtedy podejmuje decyzję czy szukać środka w pierwszej części czy w drugiej. Szczegółowe wytłumaczenie można zobaczyć sobie tutaj: http://en.wikipedia.org/wiki/Binary_search_algorithm

3) Zamiast Hash#merge można zastosować Hash#merge! Działa to szybciej dlatego, że merge! wykona operację bez zbędnego kopiowania siebie samego.
Przyspieszenie: 25x

4) Losowa wartość z tablicy. Array#shufle.first - działa w taki sposób, że najpierw alokuje miejsce w pamięci dla kopii tablicy a następnie kopiuje losowo wartości. Jak widać musi sporo pracy wykonać. Zamiast "szufli", można skorzystać z Array#sample
Przyspieszenie: 17x

Ruby ma więcej takich rzeczy, postaram się wyciągnąć podobne, które rozsiane są po różnych konferencjach.

opracowane na podst. https://www.omniref.com/github/JuanitoFatas/fast-ruby/HEAD/files/Rakefile

3 komentarze:

Karolina Zarębska pisze...

Fajnie wyczerpany teamt.

Dominika Starańska pisze...

Na dobrą sprawę ja się samym programowaniem nie zajmuję i jestem zdania, ze w to miejsce fajnie sprawdza się audyt SEO. Nawet jak czytałam w https://medialnie.info/audyt-seo/ to moim zdaniem fajnie jest wiedzieć co się dzieje na naszej stronie www.

Joanna Zadrożna pisze...

Ładnie to wygląda.