poniedziałek, 28 czerwca 2010

Co to znaczy „wystarczająco szybko”?

Oczywiście dobrze jest gdy aplikacja działa tak szybko, że użytkownik podczas pracy w ogóle nie zauważa opóźnień w działaniu interfejsu i nie musi „czekać” na program. Stan ten jest jednak trudny do osiągnięcia nawet w aplikacjach typu desktop, nie mówiąc już o aplikacjach internetowych. Dlatego dobrze jest określić co to znaczy „wystarczająco szybko” i dążyć do tego, aby tworzone aplikacje zbliżały się do tego punktu.

To co użytkownik uzna za akceptowalne tempo pracy danej aplikacji jest zjawiskiem psychologicznym nie da się go więc precyzyjnie wyznaczyć. Co innego będzie akceptowane przez różnych użytkowników, co innego również będzie akceptowalne dla tego samego użytkownika w zależności od wagi jaką przykłada do danego zagadnienia. Dodatkowym czynnikiem jest subiektywne odczucie użytkownika o tym jak skomplikowanych operacji wymaga żądane przez niego działanie. Jeżeli uważa on, że jest to coś trudnego i maszyna musi się przy tym „napracować” to jest on w stanie wybaczyć jej znacznie dłuższy czas oczekiwania. Co za tym idzie określając czas jaki będzie akceptowalny dla potencjalnych użytkowników należy brać pod uwagę rodzaj informacji jakich dostarczać będzie witryna oraz jak dużo przeciętny użytkownik będzie skłonny na nie czekać.

Poniżej zamieszczamy ogólne wytyczne co do subiektywnego odbioru czasu jaki poświęcić trzeba oczekując na wyświetlenie strony.
- 0,1 sekundy: Opóźnienie takie daje użytkownikowi wrażenie, że bezpośrednio oddziałuje na dane obiekty. Jest to czas, którego nie traktuje on jako oczekiwanie na wykonanie zadanego polecenie. W przypadku aplikacji internetowych jest to poziom praktycznie nieosiągalny i może być traktowany głównie jako pewien punkt odniesienia.
- do 1 sekundy: Podobnie jak w poprzednim przypadku użytkownik odnosi wrażenie płynności interfejsu, chociaż czas potrzeby na odpowiedź aplikacji jest już zauważalny. Poziom ten można osiągnąć gdy nie zachodzi potrzeba ponownego wczytania całej strony, jest to więc poziom oczekiwany dla zadań opartych o technologię AJAX.
- kilka sekund: Użytkownik odnosi wrażenie, że komputer „pracuje nad powierzonym mu zadaniem”. W przypadku aplikacji typu desktop, jeżeli zadanie nie jest uznawane za trudne i wymagające czasu, użytkownik odniesie już wrażenie, że aplikacja działa ospale i nie będzie z niej zadowolony. W przypadku witryn internetowych jest to poziom akceptowalny przy wczytywaniu całych stron, jednak pod warunkiem, że widać postępy w realizacji zadania. Jeżeli strona nie odpowiada przez kilka sekund i wyświetla jedynie biały ekran, to użytkownik najprawdopodobniej rozważa już jej opuszczenie, a z pewnością pierwsze wrażenie nie jest pozytywne.
- granica 10 sekund: Jest to orientacyjna bariera, po przekroczeniu której użytkownik traci cierpliwość i nie ma już ochoty dłużej oczekiwać na realizację swojego żądania. Poziom ten nie powinien występować w normalnych przypadkach związanych z wyświetlaniem stron internetowych. Użytkownik może go zaakceptować jedynie wtedy, gdy wie, że na żądanej stronie będzie interesująca go informacja, lub gdy realizacja żądania będzie gwarantować mu osiągnięcie celu. Co za tym idzie musi to być użytkownik już związany ze stroną, który zna jej sposób funkcjonowania i rezultaty poszczególnych żądań. Dla nowych użytkowników będzie to sygnał do natychmiastowego opuszczenia witryny. Jeżeli jakieś zadanie z pewnych względów wymaga tak długiego czasu oczekiwania, a potencjalni użytkownicy będą w stanie je tolerować, to należy im to wyraźnie zasygnalizować i informować na bieżąco o postępach w jego realizacji. Pomocne mogą tu być różnego rodzaju paski postępu.

Wnioski:
1) Proste zdarzenia nie wiążące się z ponownym wczytaniem strony lub przejściem na inną stronę (np.: różne zastosowania technologii AJAX) powinny trwać krócej niż sekundę.
2) Wczytywanie strony może trwać kilka sekund, lecz absolutnie nie więcej niż dziesięć. Poziomem, do którego odczucia użytkownika są pozytywne, jest około pięć sekund. Użytkownik powinien na bieżąco widzieć postępy w wykonywaniu prac (progresywne ładowanie strony).
3) Zadania wymagające więcej niż dziesięciu sekund zawsze powinny być sygnalizowane użytkownikowi, a stopień ich realizacji powinien być na bieżąco wyświetlany na pasku postępu, tak aby łatwe było oszacowanie czasu jako pozostał do ukończenia zadania.

wtorek, 15 czerwca 2010

Optymalizacja - od czego zacząć?

Czy należy optymalizować serwisy internetowe? Jeżeli chcemy, aby prezentowana przez nas treść miała chociaż potencjalną szansę dotrzeć do użytkownika to odpowiedź jest prosta – TAK! W innym przypadku użytkownik znudzony przeciągającym się oczekiwaniem na wyświetlenie treści z pewnością opuści naszą stronę i trefi do konkurencji, która była w stanie stworzyć serwis działający wystarczająco szybko. To ostatnie określenie jest oczywiście problematyczne, ale zajmiemy się nim następnym razem starając się ustalić "co to znaczy wystarczająco szybko?". Teraz natomiast rozpatrzmy kwestię od czego należy rozpocząć planowanie przyspieszania naszej aplikacji internetowej.

Wyciśnięcie maksymalnej wydajności z każdego elementu jest stanem równie pożądanym co niewykonalnym. Proces taki wymagałby zazwyczaj prześledzenia każdego nawet najmniejszego elementu, zbadania jego wpływu na pozostałe elementy, kolejnych faz optymalizacji i pomiarów. W efekcie konieczne byłoby gruntowne przebudowanie całego sytemu, często wiążące się również ze zmianami sprzętowymi. Proces taki byłby niezwykle drogi i czasochłonny a osiągnięty efekt mógłby nie być wart takich poświęceń. Dlatego warto zoptymalizować te czynniki, które mają największy wpływ na czas jaki użytkownik musi poświęcić na otrzymanie żądanej treści. Jeżeli uda nam się przyspieszyć o 30% elementy odpowiedzialne za 80% czasu wyświetlania strony, to osiągniemy więcej niż przez zredukowanie do zera czasu przeznaczanego na pozostałe 20%. Dlatego skupić należy się na tych elementach, które są najbardziej czasochłonne, a które można znacznie przyspieszyć bez całkowitej przebudowy systemu i ponoszenie znacznych kosztów.

W przypadku wielu stron internetowych podstawowym obszarami zainteresowania powinny być następujące kwestie:
- zmniejszenie ogólnego rozmiaru strony, w szczególności plików graficznych oraz stylów CSS i kodu JavaScript
- zmniejszenie ogólnej liczny żądań HTTP
- wykorzystanie buforowania elementów przez przeglądarki

Cele te da się z dobrym rezultatem osiągnąć poprzez optymalizacje plików graficznych, stosowanie CSS Sprite, kompresję treści przesyłanej do przeglądarki, zarządzanie nagłówkami Expires, odpowiednie rozmieszczenie elementów w dokumencie HTML oraz optymalizację struktury plików CSS i JavaScript. Co więcej zabiegi te pozwalają w większości przypadków nawet dwukrotnie przyspieszyć czynniki odpowiedzialne za 60 – 80% czasu oczekiwania na wyświetlenie strony.

Dodatkową zaletą jest również obniżenie kosztów funkcjonowania strony poprzez zmniejszenie ruchu sieciowego przy nie zmienionej liczbie wyświetleń strony.