# ile trwa otwarcie czatu po kliknięciu

Kliknęliśmy siedem widgetów czatu na zdławionym setupie klasy telefonu i zmierzyliśmy, kiedy da się pisać. Zimny i ciepły cache, po 5 przebiegów, nasz też.

2026-10-26 · Kuba

Na zdławionym setupie klasy telefonu czat Spookata jest gotowy do pisania 0,80 sekundy po pierwszym kliknięciu i 0,13 sekundy za kolejnym. Jeden widget otworzył się przy pierwszym kliknięciu szybciej, o 0,15 sekundy, bo ściągnął cały swój czat, zanim ktokolwiek kliknął. W tym wpisie są liczby, to, ile kosztuje każde z podejść, i to, dlaczego cały trik to jeden round trip.

## co mierzyliśmy

Moment, w którym odwiedzający decyduje się napisać, to jedyny moment, dla którego widget czatu istnieje. Czyli: od kliknięcia w launcher do pierwszej rzeczy, której odwiedzający może użyć, pola wiadomości albo, przy widgetach, które otwierają się na ekranie startowym, przycisku, który do niego prowadzi.

Setup to to samo laboratorium co w reszcie serii ([jak testujemy](/pl/blog/how-we-test-chat-widgets/)), z kilkoma rzeczami specyficznymi dla tego testu:

- **Dławienie.** Mobilne wartości z Lighthouse, nałożone throttlingiem z DevTools: 562,5 ms opóźnienia na każdym requeście, 1,47 Mb/s w dół, 675 kb/s w górę i 4× wolniejszy CPU. To średniej klasy telefon na wolnym 4G. Włączamy je tuż przed kliknięciem, więc dotyczy tylko otwierania, a nie ładowania strony.
- **Zimno.** Świeży profil przeglądarki. Strona się ładuje, launcher się pokazuje, potem czekamy jeszcze 15 sekund, żeby każdy widget skończył start, i klikamy myszą w środek launchera.
- **Ciepło.** Ten sam profil, nowa karta z tą samą stroną, więc pliki widgetu są w cache HTTP przeglądarki. Ta sama procedura.
- **Pomiar.** Od kliknięcia, aż element, którego da się użyć, będzie widoczny, sprawdzane co ~25 ms. Liczby są więc dokładne do około ±25 ms.
- **Przebiegi.** Po 5 na widget, zmierzone 27 września 2026. Podajemy mediany. Wiersze Spookata zmierzyliśmy jeszcze raz tego samego ranka, po poprawce opisanej niżej i raz jeszcze, kiedy launcher schudł, na tym samym setupie: zimne otwarcia mieściły się między 776 a 829 ms.

Spookat, Tawk.to i Tidio chodziły na naszej stronie testowej. Crisp, Intercom, LiveChat i Chatwoot odmawiają działania na domenie, której właściciel nie dopuścił, więc klikaliśmy je na stronie samego vendora, z jego własnymi ustawieniami. Panel czatu Spookata idzie z naszego produkcyjnego CDN; jego socket trafia do małej lokalnej atrapy, a throttling z DevTools spowalnia ten socket tak samo jak prawdziwy (sprawdziliśmy: pierwsza wiadomość przyszła po 587 ms z throttlingiem i po 1,3 ms bez). Panel Spookata nie czeka na ten socket, żeby dało się pisać, więc atrapa nie zmienia jego czasu.

## wyniki

| widget | zimno: klik → da się pisać | ciepło | pobrane po kliknięciu (zimno) | pobrane przed kliknięciem |
|---|---|---|---|---|
| Chatwoot | 0,65 s | 0,53 s | 0 kb | 864 kb |
| Spookat | 0,80 s | 0,13 s | 17 kb | 2,0 kb |
| Tidio | 1,08 s | 1,08 s | 0 kb | 511 kb |
| Intercom | 1,64 s | 1,67 s | 151 kb | 1006 kb |
| Crisp | 2,60 s | 0,09 s | 125 kb | 121 kb |
| Tawk.to | 5,09 s | 5,09 s | 120 kb | 256 kb |
| LiveChat | nie trzeba klikać | nie trzeba klikać | nic | 358 kb |

Ostatnia kolumna pochodzi z [ważenia](/pl/blog/chat-widget-weigh-in/): tyle każdy widget ściąga przy ładowaniu strony, zanim ktokolwiek czegoś dotknie.

Przeczytaj dwie ostatnie kolumny razem, a wzór jest oczywisty. Chatwoot i Tidio nie ściągają nic po kliknięciu, bo już ściągnęły 864 kb i 511 kb przy ładowaniu strony. Spookat ściąga prawie wszystko po kliknięciu, bo przy ładowaniu strony ściągnął 2,0 kb, a i tak otwiera się jako drugi, przed zapłaconym z góry czatem Tidio.

## widget po widgecie

### chatwoot: 0,65 s, zapłacone z góry

Okno czatu Chatwoota to iframe, który jest już załadowany i ukryty, gdy strona się otwiera. Kliknięcie tylko go pokazuje, na ekranie startowym z przyciskiem „Start Conversation”. Nic nie przyszło przez sieć, więc te 0,65 sekundy to widget, który pokazuje się i rysuje na 4× zwolnionym CPU.

### tidio: 1,08 s, zapłacone z góry

Ten sam pomysł. Tidio miał swój skrypt widgetu (228 kb) załadowany przed kliknięciem, więc otwarcie w ogóle nie potrzebuje sieci. 1,08 sekundy jest identyczne na zimno i na ciepło, co znaczy, że to renderowanie i animacja na wolnym CPU, a nie pobieranie. Tidio otwiera się na ekranie startowym z przyciskiem „Chat with us”.

### intercom: 1,64 s

Na intercom.com kliknięcie dociągnęło 12 do 14 kolejnych requestów (31 do 151 kb, różnie w różnych przebiegach) i otworzyło od razu rozmowę, którą strona wypchnęła nam jako nowym odwiedzającym, z polem wiadomości. Zimno i ciepło wychodzi tak samo, więc ten czas nie idzie na czekanie na własne pliki.

### spookat: 0,80 s na zimno, 0,13 s na ciepło

Oto gdzie idą te 0,80 sekundy. W chwili, gdy wciska się przycisk myszy (albo palec dotyka ekranu, albo na launcherze wciska się Enter lub spację), launcher zaczyna dwa pobierania obok siebie: panel czatu (14,5 kb po kablu) i arkusz stylów twojego stylu (2,2 kb). Launcher zna już wygląd strony, więc wie, o który arkusz poprosić. Kiedy oba są na miejscu, panel się pokazuje z kursorem w polu wiadomości. Socket do naszego API łączy się w tle, a wiadomość napisana, zanim wstanie, czeka i wychodzi, gdy tylko się połączy.

To jeden round trip: 562,5 ms opóźnienia, pobieranie i rysowanie panelu na 4× zwolnionym CPU. Na ciepło oba pliki przychodzą z cache i nie zostaje żaden round trip, tylko rysowanie: 0,13 sekundy.

Spookat robi to wszystko w jednym round tripie. W chwili, gdy odwiedzający wciska przycisk, launcher zaczyna pobierać panel i arkusz stylów strony naraz, a panel jest gotowy do pisania, zanim połączenie w ogóle się zestawi. Zanim odwiedzający sięgnie po przycisk, na stronie jest tylko launcher, i nic nie gada z naszym API przed kliknięciem.

### crisp: 2,60 s na zimno, 0,09 s na ciepło

Przy pierwszym kliknięciu Crisp ściąga 4 requesty, 125 kb, zanim pokaże pole wiadomości. W ciepłej karcie te same pliki były już w cache i załadowały się razem ze stroną, a kliknięcie otworzyło czat w 0,09 sekundy, najszybciej ze wszystkich widgetów we wszystkich przebiegach.

### tawk.to: 5,09 s, na zimno i na ciepło

Tawk.to ściągnął po pierwszym kliknięciu 13 requestów i 120 kb, a po ciepłym 15 requestów, ale tylko 2 kb. Oba trwały 5,09 sekundy, w granicach 25 ms we wszystkich 10 przebiegach. Kiedy czas nie drgnie przy ciepłym cache, to czekanie nie jest pobieraniem. Nie sprawdzaliśmy, na co czeka Tawk.to, tylko że za każdym razem czeka tyle samo. W konfiguracji tawk.to panel otwiera się z powitaniem asystenta AI i proponowanymi pytaniami nad polem wiadomości.

### livechat: nie ma czego klikać

Na livechat.com zamknięty widget to nie okrągły przycisk. To karta powitalna z polem wiadomości, widoczna od załadowania strony. Da się więc pisać bez klikania czegokolwiek i nie ma kliknięcia, które można by zmierzyć. To decyzja projektowa, i to szybka dla odwiedzającego. To też powód, dla którego LiveChat ściągnął 358 kb przed jakąkolwiek interakcją.

## „da się używać” to nie wszędzie ten sam ekran

Mierzyliśmy pierwszą rzecz, na której odwiedzający może coś zrobić, a ta rzecz się różni:

| widget | pierwszy ekran po kliknięciu | co odwiedzający robi dalej |
|---|---|---|
| Spookat | rozmowa z powitaniem i polem wiadomości z kursorem | pisze |
| Tawk.to | rozmowa z polem wiadomości i proponowanymi pytaniami | pisze albo wybiera pytanie |
| Crisp | ekran startowy z polem wiadomości i proponowanymi pytaniami | pisze |
| Intercom | rozmowa wypchnięta przez stronę, z polem wiadomości | pisze |
| Tidio | ekran startowy z przyciskiem „Chat with us” | klika jeszcze raz, potem pisze |
| Chatwoot | ekran startowy z przyciskiem „Start Conversation” i artykułami pomocy | klika jeszcze raz, potem pisze |
| LiveChat | pole wiadomości już przed kliknięciem | pisze |

Szybkie wyniki Tidio i Chatwoota przychodzą więc z drugim stuknięciem, zanim ktokolwiek coś napisze. Ekran startowy to nic złego: tam mieszkają artykuły pomocy i podpowiedzi. Ale jeśli pytanie brzmi „ile, zanim mogę coś powiedzieć”, te dwa potrzebują jednego kroku więcej, niż pokazuje tabela wyżej.

Panel Spookata przy otwarciu wstawia kursor w pole wiadomości, więc pierwsze, co odwiedzający dostaje po kliknięciu, to miejsce do pisania.

## czemu na telefonie opóźnienie bije bajty

Nasze kliknięcie ściąga 17 kb. Przy 1,47 Mb/s to mniej niż 100 ms. Reszta to czekanie: 562,5 ms na każdy round trip, kiedy telefon wysyła request i czeka na pierwszy bajt odpowiedzi.

Dlatego, gdy widget jest już mały, round tripy znaczą więcej niż rozmiar. Zmniejszenie panelu o połowę dałoby około 50 ms. Wszystko w jednym round tripie: to daje nasze 0,80 sekundy przy tych samych bajtach. To też powód, dla którego widgety zapłacone z góry dobrze wypadają w tym teście: swoje round tripy zrobiły podczas ładowania strony, kiedy nikt nie liczył.

## kompromis w jednej tabeli

| widget | razem pobrane do czatu, w którym da się pisać (zimno) | kto płaci |
|---|---|---|
| Spookat | 19 kb | tylko ci, którzy klikną |
| Crisp | 246 kb | wszyscy za 121 kb, klikający za resztę |
| Tawk.to | 376 kb | wszyscy za 256 kb, klikający za resztę |
| LiveChat | 358 kb | wszyscy |
| Tidio | 511 kb | wszyscy |
| Chatwoot | 864 kb | wszyscy |
| Intercom | 1157 kb | wszyscy za 1006 kb, klikający za resztę |

Widget może być szybki przy kliknięciu na dwa sposoby. Może zrobić robotę z wyprzedzeniem dla każdego odwiedzającego albo zrobić bardzo mało, wszystko po kliknięciu. Pierwszy sprawia, że kliknięcie wydaje się natychmiastowe, a każde wyświetlenie strony jest cięższe. Drugi trzyma wyświetlenia strony lekkie, a pierwsze kliknięcie czeka na sieć.

Większość odwiedzających nigdy nie otwiera czatu. Dla nich szybkość zapłacona z góry to czysty koszt: ściągają czat, którego nigdy nie zobaczą. Dla tych, którzy go otwierają, różnica między 0,65 sekundy Chatwoota a naszymi 0,80 to 150 milisekund na wolnym telefonie, kupione za 864 kb od każdego odwiedzającego.

Drugie podejście wybraliśmy celowo. 2 kb przy każdym wyświetleniu strony, a 17 kb i mniej niż sekunda na najgorszym łączu dla ludzi, którzy naprawdę chcą pogadać. Na zwykłym łączu ten round trip to dziesiątki milisekund, a nie pół sekundy.

## co zmieniliśmy, a czego nie zrobimy

Nie będziemy preloadować panelu wszystkim. To zrobiłoby z nas widget na 20 kb przed kliknięciem, a cały sens jest w tym, że nim nie jesteśmy.

Co zmieniliśmy zamiast tego, nie rezygnując z tego:

- Panel i arkusz stylów ładują się obok siebie, a nie jeden po drugim.
- Oba ruszają na `pointerdown`, w chwili, gdy palec dotyka ekranu albo wciska się przycisk myszy, chwilę przed tym, jak odpali się kliknięcie. Z klawiatury na Enter albo spację. Przejście Tabem obok launchera nie ładuje niczego.
- Panel pokazuje się, gdy tylko jego pliki są na miejscu. Nie czeka już na socket i ustawienia strony.

Jeden round trip: 0,80 sekundy na zimno, 0,13 sekundy na ciepło, 17 kb.

## czego ten test nie pokazuje

- **Prawdziwe sieci.** Throttling z DevTools dokłada stałe opóźnienie do każdego requestu. Prawdziwa sieć komórkowa się waha, a pierwsze połączenie z nowym serwerem kosztuje też DNS i handshake TLS, czego ten setup nie modeluje dla żadnego widgetu.
- **Prawdziwe konfiguracje.** Cztery widgety chodziły z ustawieniami swoich vendorów na ich własnych stronach. Twoja instalacja tego samego widgetu otworzy się na innym pierwszym ekranie.
- **Co dzieje się potem.** Wysłanie wiadomości, odpowiedź, ponowne połączenie po zerwaniu: to wszystko jest poza tym testem.

## sprawdź sam

Surowe dane są w [/research/click-to-open-2026-09.json](/research/click-to-open-2026-09.json): każdy przebieg, zimny i ciepły, z tym, co zostało pobrane między kliknięciem a czatem gotowym do pisania, wartości throttlingu i dokładne snippety. Skrypt to `click.ts` w [laboratorium widgetów](/research/widget-lab/).

Żeby spróbować na swojej stronie: otwórz DevTools, ustaw throttling sieci na „Slow 4G”, a w panelu Performance CPU na 4× wolniej, przeładuj, poczekaj, aż strona się uspokoi, i kliknij czat z otwartą zakładką Network. Patrz, co się ładuje po kliknięciu i ile trwa, zanim da się pisać.

## no to jak

Jeśli liczy się dla ciebie tylko szybkość otwarcia na wolnym telefonie, jeden widget w tym teście otworzył się przy pierwszym kliknięciu o 0,15 sekundy szybciej niż nasz, a żeby to zrobić, ściągnął 864 kb od każdego odwiedzającego. Spookat to 2 kb, dopóki ktoś nie sięgnie po przycisk, a potem jeden round trip do pola wiadomości.

[Kliknij sam](/pl/pricing/): 14 dni, bez karty.

---
source: https://spookat.com/pl/blog/chat-widget-click-to-open/
