Będzie zależał od kontekstu.
„Naprawianie kwadratowego błędu wydajności środowiska uruchomieniowego” jest zwykle tym, co widzę. Jednak to, czy należy to naprawić (zmiana kodu), zależy od kontekstu.
Należy pamiętać, że bazy danych zapewniają wiele narzędzi zwiększających złożoność czasu. Na przykład, aby uzyskać najlepsze wyniki N z bazy danych, po prostu to powiedz. Podczas przekształcania niewydajnego kludge we wbudowane zoptymalizowane wywołanie wyjaśnienie wydaje się zbędne.
Powód, dla którego uważam algorytm z kwadratowym środowiskiem wykonawczym, aby zasługiwał na przegląd kodu (dyskusja), jest nie tyle dlatego, że jest wolny (powolny jest względny; kwadratowy jest szybki w porównaniu do wykładniczego), ale dlatego, że ludzka intuicja (np. Twoi klienci lub inni programiści) są wewnętrznie niewygodni dzięki funkcji oprogramowania, która odbiega zbyt daleko od liniowego czasu działania, ze względu na mieszanie oczekiwań z życia codziennego.
Wiele skarg klientów dotyczących wydajności oprogramowania można podzielić na dwie kategorie:
Cały system (oprogramowanie i sprzęt) został określony na podstawie szacowanego zużycia. W zeszłym tygodniu wszystko działa dobrze, pewna funkcjonalność zajęła mniej niż 5 sekund. W tym tygodniu po zainstalowaniu aktualizacji ta sama funkcja trwa dłużej niż 1 minutę.
- Jest to porównanie z poprzednio testowaną wydajnością. Klient utrzymuje przyszłe wyniki w absolutnej mierze ludzkiej skali czasowej (od sekund do minuty).
Przesłałem do systemu 100 zleceń. Dlaczego przetwarzanie zajmuje 400 razy więcej czasu niż jedno zadanie?
- Klient oczekuje, że czas przetwarzania będzie liniowy. W rzeczywistości klient nie może zrozumieć ani zaakceptować faktu, że istnieją zadania wolniejsze niż liniowe.
Z tego powodu klient uzna czas wykonania za błąd, jeśli oba są prawdziwe:
- Wolniej niż liniowo
- Zauważalne (tzn. Mieszczą się w ludzkim przedziale czasu (dłuższym niż sekundy lub minuty) przy typowych rozmiarach zadań)
Uzasadnione argumenty wyjaśniające, że kwadratowy algorytm uruchomieniowy nie stanowi problemu (tzn. Nie zasługuje na zmianę kodu):
- Rozmiar zadania zwykle obsługiwanego przez tę kwadratową funkcję środowiska wykonawczego jest nieco ograniczony
- Biorąc pod uwagę typowy zakres wielkości, rzeczywisty (bezwzględny) czas wykonania jest wciąż wystarczająco krótki, aby można go było odrzucić
- Jeśli użytkownik faktycznie próbuje wysłać zadanie, które jest wystarczająco duże, aby było zauważalne, użytkownik otrzyma komunikat ostrzegający o długim czasie działania
- Użytkownicy systemu są ekspertami, dlatego wiedzą, co robią. Na przykład użytkownicy interfejsu API powinni przeczytać drobny druk w dokumentacji interfejsu API.
Wiele algorytmów przydatnych w typowym tworzeniu aplikacji jest w rzeczywistości wolniejszych niż liniowe (głównie O (N log N), jak w sortowaniu), dlatego duże oprogramowanie faktycznie spróbuje obejść to, sortując tylko odpowiednią część danych lub użyj technik filtrowania histogramu (statystycznego), które osiągają podobny efekt.
Dotyczy to klientów oprogramowania, ale jeśli uważasz, że użytkownicy biblioteki oprogramowania lub funkcji API również są „klientami”, odpowiedź nadal będzie obowiązywać.