Czy czas uruchamiania aplikacji WWW jest tak ważny?

11

Rozmawiał z kimś o dodaniu kodu inicjalizacyjnego podczas uruchamiania aplikacji i narzekał, że powoduje to wydłużenie czasu uruchamiania. Naprawdę nie mógł podać powodu (przeczucie lub coś w tym rodzaju, nie wiem). To nie jest aplikacja do intensywnego użytku i zaczyna się za około minutę, wdrażamy kilka razy w roku.

Pamiętam, jak jakiś czas temu czytałem takie porady na pytania dotyczące SO, ludzie zalecający zainicjowanie podczas uruchamiania zamiast dostępu do strony z pieczęcią „jeśli możesz sobie pozwolić na karę”.

Pracowałem z aplikacjami internetowymi, które zaczęły się od 30 sekund do 4-5 minut, ale po uruchomieniu działały.

Więc czego mi brakuje? Chyba że jest to tak ważna aplikacja jak ... nie wiem ... dla rynku finansowego, aplikacji medycznych, eksploracji kosmosu itp., Czy to naprawdę tak ważny czas uruchamiania?

PS Mam na myśli wyłącznie aplikacje internetowe, aplikacje na komputery muszą zacząć błyskawicznie.

JohnDoDo
źródło
Czy zdefiniowano niefunkcjonalny wymóg uruchamiania aplikacji, czy jest to tylko dyskusja w trakcie opracowywania?
StuperUser,
@StuperUser: brak wymagań, po prostu dyskusja.
JohnDoDo,
W rzeczywistości istnieje witryna User Experience , na którą lepiej byłoby zapytać.
Cyklop,
@Cyclops: Właściwie bardziej interesują mnie powody po stronie serwera ogrodzenia, a nie po stronie użytkownika.
JohnDoDo,

Odpowiedzi:

18

Może to być duży czynnik podczas programowania: jeśli twoja platforma nie obsługuje zmiany kodu w uruchomionej aplikacji, czas uruchamiania staje się częścią cyklu sprzężenia zwrotnego, a nawet 30 sekund jest bolesne i zagraża wydajności.

Dla środowiska produkcyjnego to naprawdę nie ma znaczenia; albo niewielkie przestoje są dopuszczalne, a 5 minut to wciąż niewiele, albo nie, i trzeba wprowadzić jakieś przełączenie na żywo.

Michael Borgwardt
źródło
Tak, pomyślałem o cyklu programowania, ale to nie tak, że zmieniamy przecinek, wdrażamy, zmieniamy nazwę zmiennej, wdrażam itp. Osobiście wdrażam przy programowaniu maksymalnie 10 razy dziennie. Jednominutowe uruchomienie lub 1.2 nie ma aż tak dużej różnicy.
JohnDoDo,
7
@JohnDoDo: Ile z tego jest naprawdę naturalny przepływ pracy, a ile zwykle unika się długotrwałego wdrożenia? Szybki cykl sprzężenia zwrotnego może ogromnie pomóc w wydajności. Czasami potrzebujesz niewielkich, stopniowych zmian i natychmiastowego zobaczenia wyniku naprawdę tego potrzebujesz. 50 lat temu ludzie pisali programy na papierze, przesyłali je operatorowi i otrzymywali wydruk następnego dnia - czasem tylko błąd kompilatora. Czy nie wydaje ci się to strasznie nieefektywnym sposobem pracy? Cóż, dla wielu programistów wydaje się, że twoje 10 wdrożeń dziennie jest takie.
Michael Borgwardt,
1
Jeśli to możliwe, oceń opcję wykonania „próbnego” inicjowania lub serializacji struktur na dysk z danymi testowymi, aby przyspieszyć czasy uruchamiania podczas programowania.
Vinko Vrsalovic
Zgadzam się z Vinko, czy istnieje sposób na wyłączenie kosztownych funkcji init () podczas budowania w trybie debugowania? Nie przejmuj się jednak, jeśli to, co inicjujesz, da ci różne wyniki w zakresie tworzenia i produkcji.
AndyMcKenna
4

Sądzę, że dzieje się tak, gdy słynna dialektyczna zasada Hegla dotycząca przejścia od ilości do jakości faktycznie działa.

Widzisz, czas jest zawsze ważny. Zgadzam się ze słowami Michaela Borgwardta na temat znaczenia szybkiego budowania podczas programowania / testowania, ale nalegam, że (może być w inny sposób) jest również bardzo ważny dla produkcji.

Każdy programista, który wdrożył jakiś zły kod do produkcji, wie, że poprawka udostępniona w ciągu 5 minut i 1 minuty to naprawdę bardzo różne rzeczy.

shabunc
źródło
2

Prawdziwe pytania dotyczą tego, czy aplikacja będzie działać bez inicjalizacji. Mamy nowych pracowników, którzy mają obsesję na punkcie „wydajności”, moja odpowiedź brzmi: nie obchodzi mnie, jak szybko dajesz złe wyniki. IMHO skraca rogi, algorytmy zniekształcania, ponieważ „tak będzie szybciej”, a inne świetne pomysły wprowadzają tylko błędy.

Jeśli wymagana jest inicjalizacja, zrób to. Ile czasu zostanie zmarnowane, gdy użytkownicy końcowi uzyskają błędne wyniki, ostatecznie stwierdzą, że aplikacja internetowa jest niewłaściwa, zadzwonią i złożą skargę, a Ty będziesz musiał wrócić i debugować / naprawić / przetestować / wdrożyć ponownie? teraz zapytaj kolegę, jak zaoszczędzono czas. (założę się, że i tak rdzenie serwera są w 99% bezczynne)

jqa
źródło
2

To pytanie nie dotyczy żadnej konkretnej platformy. Istnieją platformy, na których czas uruchamiania jest naprawdę bardzo ważny.

Na przykład w Google App Engine; jeśli twoja strona nie jest uzyskiwana (lub raczej jest uzyskiwana rzadziej niż inna aplikacja w tym samym węźle), zostanie ona od czasu do czasu rozładowana.

Tak więc, jeśli masz 99% niższej częstotliwości dostępu do witryny, to czas uruchomienia to czas dostępu; twoja aplikacja jest restartowana przy prawie każdym dostępie. jeśli w top 1%, a następnie aplikacja jest podręczny się na wielu węzłach i chociaż wiele dostępów strona powróci z już rozpoczął przykład, niektórzy nadal nie będzie, a więc musisz przerywany, długi czas dostępu .

To samo dotyczy wielu innych środowisk hostingowych. Wycieki w bibliotekach stron trzecich, a nawet we własnym kodzie, które po prostu wymknęły się wykryciu, mogą oznaczać, że jedynym niezawodnym sposobem na uruchomienie usługi sieci Web jest przeładowanie jej co tyle żądań (często od 100 do 10 000), i tak dalej czas uruchomienia jest często opłacany. Używanie tego wzorca jest dopuszczalne, gdy aplikacja jest nieszczelna, ale uruchamia się szybko; jest to niewykonalne, gdy uruchomienie aplikacji trwa dłużej niż kilka sekund.

SingleNegationElimination
źródło
1

Ryzykujesz, że Twoja aplikacja zostanie uznana za niespełniającą standardów lub jeszcze gorzej, twoją zdolność do programowania. Teraz ta aplikacja może zaoszczędzić komuś tyle czasu i / lub wykonać tak potrzebne zadanie, że wdzięczni użytkownicy mogą spojrzeć poza długi start.

Programowanie w taki sposób, aby leniwie ładować aplikację, może potrwać dłużej, ale tylko interesariusze mogą ustalić, czy warto. Miałem raport, który trwał 55 sekund. i obniżyliśmy do 35. Nikt tego nie zauważył. Chociaż spędziłem dwa razy więcej czasu na zdobyciu go z 35 do 18 lat, wszyscy zauważyli i byli wdzięczni i pod wrażeniem. Przejście od 5 do 3 minut w przypadku aplikacji używanej kilka razy w roku nie jest wielkim problemem. Użytkownicy będą mieli mniej czasu na spędzanie na Facebooku lub kupowanie kawy.

Percepcja jest kluczem. Jeśli zespół nie jest zadowolony z zespołów programistów w ogóle, a konkretnie z tej aplikacji, możesz zbudować dobrą wolę i przyspieszyć.

JeffO
źródło
Czas uruchamiania aplikacji internetowej nie powinien jednak wpływać na zwykłych użytkowników. Drugi programista jest zirytowany, ponieważ osobiście ponownie uruchamia aplikację wiele razy dziennie w ramach regularnego rozwoju.
AndyMcKenna