Jsou WebSockets v Chrome pomalé?

V mém posledním článku, kde jsem mluvil o testování jednotek Socket.IO s Jasmine, jsem zmínil, že při asynchronním připojování a odpojování od serveru Socket.IO musím použít časové limity, které byly sekundy a půl. Fungovalo to dobře s časovými limity 750 milisekund ve Firefoxu, ale když jsem to testoval v Chrome, byly dosaženy časové limity a specifikace selhaly. Pojďme se podívat, jestli tomu dokážeme přijít na kloub a přijít na to, proč zde Chrome tak selhal.

Nejprve se chci jen omluvit, že je tento článek pozdě. Pro ty z vás, kteří mě pozorně sledují, víte, že obvykle zveřejňuji každou středu, ale výlet za rodinou se nečekaně prodloužil a můj rozvrh se dostal mimo mísu. Načasování tohoto příspěvku by však mělo být jediným problémem s plánováním tohoto týdne. Každopádně k důležitým informacím.

Shrnutí mých výsledků testování

Provedl jsem spoustu testů a upřímně, nejsem si jistý, co přesně způsobuje problém, ale nemusí to být nutně Chrome sám o sobě. Provedl jsem testy v nejnovějších verzích Chrome a Firefoxu na dvou různých počítačích s naprosto odlišnými výsledky. Pro Firefox na obou počítačích trvalo připojení a okamžité odpojení připojení WebSocket k serveru Socket.IO asi 1/3 sekundy. Chrome byl ale úplně jiný příběh.

Na mém PC (s procesorem AMD Phenom II X4 955) Chrome zabral sekundu na připojení a odpojení přes přenos WebSocket (testoval jsem více přenosů). Na mém notebooku (s CPU Intel Core i7 2760QM) to trvalo téměř vždy méně než 50 ms. Může a nemusí to mít nic společného s procesorem, ale to je v podstatě to jediné, co mě napadá.

Vyzkoušejte si to sami

Testy jsem uložil do úložiště GitHub, takže pokud to někdo chce vyzkoušet na svém počítači a případně se mi pokusit poskytnout více informací o tomto zvláštním problému, je to tam, aby to vyzkoušel. Můžete to vidět zde.

Pokud to vyzkoušíte, zanechte komentář s výsledky, které jste našli. Pokyny, jak jej nastavit a spustit, jsou v souboru README k projektu. Test prochází každý přenos jednotlivě, ale většinou mě zajímá jen čas nahlášený pro přenos WebSocket.

Závěr

Opravdu nevím, co z tohoto cvičení vyvodit, možná kromě toho, že je důležité testovat věci ve více prohlížečích na více počítačích. Stále musím otestovat, abych se ujistil, že zprávy jsou předávány tam a zpět ze serveru slušným tempem, protože pokud ano, pak opravdu nezáleží na tom, jak dlouho trvá připojení, protože aplikace bude mít tendenci připojit pouze jednu čas, kdy to poprvé začíná. Každopádně doufám, že mi všichni pomůžete najít nějaké odpovědi a možná pomůžeme vylepšit Chrome. Bůh žehnej a šťastné kódování!