SlideShare a Scribd company logo
1 of 23
Javascript na steroidech
aneb Jak jsme optimalizovali nový Email.cz



Marek Fojtl, UI vývojář, marek.fojtl@firma.seznam.cz
Nový Email.cz
• Javascriptová aplikace (HTML5, CSS3)
• JAK framework (http://jak.seznam.cz)
• FastRPC (http://opensource.seznam.cz/FastRPC)

• Vývoj více než 3 roky (nový backend i frontend)
• Stále se vyvíjí




www.seznam.cz                                 @marekfojtl
Nový Email.cz – výpis zpráv
                      Základní rozvržení

                      Umožňuje zobrazení
                      více zpráv na obrazovce




www.seznam.cz                       @marekfojtl
Nový Email.cz – výpis zpráv
                      Rozšířené rozvržení

                      Umožňuje uživateli číst
                      detail zprávy a mít
                      zobrazený výpis zpráv
                      současně




www.seznam.cz                       @marekfojtl
Nový Email.cz – výpis zpráv
                      Kancelářské rozvržení

                      Rovněž umožňuje
                      uživateli číst detail
                      zprávy a mít zobrazený
                      výpis zpráv současně.
                      Vhodné při otočení
                      monitoru na výšku.




www.seznam.cz                       @marekfojtl
Nový Email.cz – nastavení
                      Nastavení v modálním
                      okně.




www.seznam.cz                      @marekfojtl
Nový Email.cz – psaní zprávy
                      Psaní zprávy prošlo také
                      redesignem.




www.seznam.cz                       @marekfojtl
Nový Email.cz – adresář
                      Stávající adresář. Vyvíjí
                      se nový.




www.seznam.cz                         @marekfojtl
Jaké nastaly problémy
• Příliš dlouhé zpracovávání načtených dat a jejich
  zobrazení
• Pomalá odezva při zobrazení detailu zprávy




www.seznam.cz                                 @marekfojtl
Co obecně ovlivňuje výkon
•   Architektura PC uživatele
•   Javascript => interpretovaný jazyk
•   Prohlížeč (neoptimalizovaný interpreter)
•   Neoptimální kód
•   Neoptimální algoritmus




www.seznam.cz                                  @marekfojtl
Oblasti, na které se zaměříme
•   Volání funkcí
•   Procházení pole – cache prvků
•   Zřetězení vs Array.join
•   Globální proměnné
•   Tipy při vytváření HTML elementů




www.seznam.cz                          @marekfojtl
Metodika
•   Testovací platforma: http://jsperf.com
•   Testovací stroj: Mac mini (Intel i7 2,3GHz)
•   Operační systém: OS X 10.8, Windows 7
•   Prohlížeče: Firefox 18, Chrome 24, Opera 12.11,
    Safari 6.0.2, Internet Explorer 10 RP, 9




www.seznam.cz                                   @marekfojtl
Volání funkcí
function inc(c) { return ++c; }
var a=0;
var b=0;

/* ========================= DUEL ========================= */
b = ++a;

                                  VS
b = inc(a)




www.seznam.cz                                               @marekfojtl
Volání funkcí




                Zdroj: http://jsperf.com/barcamp-vsetin-a


www.seznam.cz                                               @marekfojtl
Procházení pole – cache prvků
var DATA=[10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

/* ========================= DUEL ========================= */
var min=DATA[0];
for(var i=1; i<DATA.length; i++) {
  if (DATA[i] < min) { min = DATA[i]; }
}


                                            VS

var min=DATA[0];
for(var i=1, len=DATA.length; i<len; i++) {
  var data = DATA[i];
  if (data < min) { min = data; }
}


www.seznam.cz                                               @marekfojtl
Procházení pole – cache prvků




                Zdroj: http://jsperf.com/barcamp-vsetin-b


www.seznam.cz                                               @marekfojtl
Globální proměnné




                Zdroj: http://jsperf.com/barcamp-vsetin-c


www.seznam.cz                                               @marekfojtl
Zřetězení vs Array.join
var slova = ["Takže", "dobrý", "večer"];
var veta = "";

/* ========================= DUEL ========================= */
veta = "";
for(var i=0, len=slova.length; i<len; i++) {
     if (i) { veta += " "; }
     veta += slova[i];
}


                                           VS
veta = slova.join(" ");




www.seznam.cz                                               @marekfojtl
Zřetězení vs Array.join




                Zdroj: http://jsperf.com/join-vs-zretezeni/2


www.seznam.cz                                                  @marekfojtl
Tipy při vytváření prvků DOMu
•   vytváření elementů mimo DOM
•   document.createDocumentFragment
•   node.innerHTML
•   pomocníci setTimeout a setInterval




www.seznam.cz                            @marekfojtl
Obecný přínos optimalizací
• User eXperience!
• Šetření systémových prostředků klientských PC
• Vytváření výkonnostních rezerv pro náročnější
  výpočty




www.seznam.cz                              @marekfojtl
Tipy na závěr
•   Kritické bývají cykly a často se opakující události
•   Profilování
•   Testujte na méně výkonných strojích
•   Optimalizace vs čitelnost kódu
•   Důležité zejména v mapových aplikacích, hrách ...




www.seznam.cz                                    @marekfojtl
Děkuji za pozornost
Marek Fojtl, UI vývojář, marek.fojtl@firma.seznam.cz

www.seznam.cz                                          @marekfojtl

More Related Content

Similar to Javascript na steroidech

Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariRoman Pichlík
 
Bezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikaceBezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikaceMichal Špaček
 
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5Michal Špaček
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace Jan Hřídel
 
NoSQL databáze, MongoDB
NoSQL databáze, MongoDBNoSQL databáze, MongoDB
NoSQL databáze, MongoDBLukáš Korous
 
Noční můry webového vývojáře
Noční můry webového vývojářeNoční můry webového vývojáře
Noční můry webového vývojářeMichal Špaček
 
Relační databáze efektivně z pohledu vývojáře
Relační databáze efektivně z pohledu vývojářeRelační databáze efektivně z pohledu vývojáře
Relační databáze efektivně z pohledu vývojářeJan Smitka
 
XSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQXSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQMichal Špaček
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciMartin Krištof
 
Bezpečnost WordPress pro začátečníky
Bezpečnost WordPress pro začátečníkyBezpečnost WordPress pro začátečníky
Bezpečnost WordPress pro začátečníkyVladimír Smitka
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptCtvrtkoncz
 

Similar to Javascript na steroidech (20)

Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
Screen scraping se ScraperWiki (Jindřich Mynarz)
Screen scraping se ScraperWiki (Jindřich Mynarz)Screen scraping se ScraperWiki (Jindřich Mynarz)
Screen scraping se ScraperWiki (Jindřich Mynarz)
 
Bezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikaceBezpečnostní útoky na webové aplikace
Bezpečnostní útoky na webové aplikace
 
EZproxy Seminar Multidata
EZproxy Seminar MultidataEZproxy Seminar Multidata
EZproxy Seminar Multidata
 
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
Bezpečnostní útoky na webové aplikace, Čtvrtkon 5
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Instalace WordPress
Instalace WordPressInstalace WordPress
Instalace WordPress
 
TNPW2-2013-03
TNPW2-2013-03TNPW2-2013-03
TNPW2-2013-03
 
NoSQL databáze, MongoDB
NoSQL databáze, MongoDBNoSQL databáze, MongoDB
NoSQL databáze, MongoDB
 
Noční můry webového vývojáře
Noční můry webového vývojářeNoční můry webového vývojáře
Noční můry webového vývojáře
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Web na dlani
Web na dlaniWeb na dlani
Web na dlani
 
Relační databáze efektivně z pohledu vývojáře
Relační databáze efektivně z pohledu vývojářeRelační databáze efektivně z pohledu vývojáře
Relační databáze efektivně z pohledu vývojáře
 
XSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQXSS PHP CSP ETC OMG WTF BBQ
XSS PHP CSP ETC OMG WTF BBQ
 
TNPW2-2011-06
TNPW2-2011-06TNPW2-2011-06
TNPW2-2011-06
 
TNPW2-2014-05
TNPW2-2014-05TNPW2-2014-05
TNPW2-2014-05
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
Bezpečnost WordPress pro začátečníky
Bezpečnost WordPress pro začátečníkyBezpečnost WordPress pro začátečníky
Bezpečnost WordPress pro začátečníky
 
MS Build
MS BuildMS Build
MS Build
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
 

More from seznamVyvojari

Odpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikaceOdpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikaceseznamVyvojari
 
Content delivery network a video
Content delivery network a videoContent delivery network a video
Content delivery network a videoseznamVyvojari
 
Velké obsahové systémy
Velké obsahové systémyVelké obsahové systémy
Velké obsahové systémyseznamVyvojari
 
Hledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničkyHledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničkyseznamVyvojari
 
Sklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledáváníSklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledáváníseznamVyvojari
 
Fulltextový vyhledávač
Fulltextový vyhledávačFulltextový vyhledávač
Fulltextový vyhledávačseznamVyvojari
 

More from seznamVyvojari (12)

Odpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikaceOdpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikace
 
Content delivery network a video
Content delivery network a videoContent delivery network a video
Content delivery network a video
 
Seznam.cz email
 Seznam.cz email Seznam.cz email
Seznam.cz email
 
Velké obsahové systémy
Velké obsahové systémyVelké obsahové systémy
Velké obsahové systémy
 
Hledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničkyHledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničky
 
Nový Email.cz
Nový Email.czNový Email.cz
Nový Email.cz
 
Sklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledáváníSklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledávání
 
Fulltextový vyhledávač
Fulltextový vyhledávačFulltextový vyhledávač
Fulltextový vyhledávač
 
Výzkum ve fulltextu
Výzkum ve fulltextuVýzkum ve fulltextu
Výzkum ve fulltextu
 
Seznam na mobilu
Seznam na mobiluSeznam na mobilu
Seznam na mobilu
 
SCRUM v Seznam.cz
SCRUM v Seznam.czSCRUM v Seznam.cz
SCRUM v Seznam.cz
 
Roman kummel
Roman kummelRoman kummel
Roman kummel
 

Javascript na steroidech

  • 1. Javascript na steroidech aneb Jak jsme optimalizovali nový Email.cz Marek Fojtl, UI vývojář, marek.fojtl@firma.seznam.cz
  • 2. Nový Email.cz • Javascriptová aplikace (HTML5, CSS3) • JAK framework (http://jak.seznam.cz) • FastRPC (http://opensource.seznam.cz/FastRPC) • Vývoj více než 3 roky (nový backend i frontend) • Stále se vyvíjí www.seznam.cz @marekfojtl
  • 3. Nový Email.cz – výpis zpráv Základní rozvržení Umožňuje zobrazení více zpráv na obrazovce www.seznam.cz @marekfojtl
  • 4. Nový Email.cz – výpis zpráv Rozšířené rozvržení Umožňuje uživateli číst detail zprávy a mít zobrazený výpis zpráv současně www.seznam.cz @marekfojtl
  • 5. Nový Email.cz – výpis zpráv Kancelářské rozvržení Rovněž umožňuje uživateli číst detail zprávy a mít zobrazený výpis zpráv současně. Vhodné při otočení monitoru na výšku. www.seznam.cz @marekfojtl
  • 6. Nový Email.cz – nastavení Nastavení v modálním okně. www.seznam.cz @marekfojtl
  • 7. Nový Email.cz – psaní zprávy Psaní zprávy prošlo také redesignem. www.seznam.cz @marekfojtl
  • 8. Nový Email.cz – adresář Stávající adresář. Vyvíjí se nový. www.seznam.cz @marekfojtl
  • 9. Jaké nastaly problémy • Příliš dlouhé zpracovávání načtených dat a jejich zobrazení • Pomalá odezva při zobrazení detailu zprávy www.seznam.cz @marekfojtl
  • 10. Co obecně ovlivňuje výkon • Architektura PC uživatele • Javascript => interpretovaný jazyk • Prohlížeč (neoptimalizovaný interpreter) • Neoptimální kód • Neoptimální algoritmus www.seznam.cz @marekfojtl
  • 11. Oblasti, na které se zaměříme • Volání funkcí • Procházení pole – cache prvků • Zřetězení vs Array.join • Globální proměnné • Tipy při vytváření HTML elementů www.seznam.cz @marekfojtl
  • 12. Metodika • Testovací platforma: http://jsperf.com • Testovací stroj: Mac mini (Intel i7 2,3GHz) • Operační systém: OS X 10.8, Windows 7 • Prohlížeče: Firefox 18, Chrome 24, Opera 12.11, Safari 6.0.2, Internet Explorer 10 RP, 9 www.seznam.cz @marekfojtl
  • 13. Volání funkcí function inc(c) { return ++c; } var a=0; var b=0; /* ========================= DUEL ========================= */ b = ++a; VS b = inc(a) www.seznam.cz @marekfojtl
  • 14. Volání funkcí Zdroj: http://jsperf.com/barcamp-vsetin-a www.seznam.cz @marekfojtl
  • 15. Procházení pole – cache prvků var DATA=[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; /* ========================= DUEL ========================= */ var min=DATA[0]; for(var i=1; i<DATA.length; i++) { if (DATA[i] < min) { min = DATA[i]; } } VS var min=DATA[0]; for(var i=1, len=DATA.length; i<len; i++) { var data = DATA[i]; if (data < min) { min = data; } } www.seznam.cz @marekfojtl
  • 16. Procházení pole – cache prvků Zdroj: http://jsperf.com/barcamp-vsetin-b www.seznam.cz @marekfojtl
  • 17. Globální proměnné Zdroj: http://jsperf.com/barcamp-vsetin-c www.seznam.cz @marekfojtl
  • 18. Zřetězení vs Array.join var slova = ["Takže", "dobrý", "večer"]; var veta = ""; /* ========================= DUEL ========================= */ veta = ""; for(var i=0, len=slova.length; i<len; i++) { if (i) { veta += " "; } veta += slova[i]; } VS veta = slova.join(" "); www.seznam.cz @marekfojtl
  • 19. Zřetězení vs Array.join Zdroj: http://jsperf.com/join-vs-zretezeni/2 www.seznam.cz @marekfojtl
  • 20. Tipy při vytváření prvků DOMu • vytváření elementů mimo DOM • document.createDocumentFragment • node.innerHTML • pomocníci setTimeout a setInterval www.seznam.cz @marekfojtl
  • 21. Obecný přínos optimalizací • User eXperience! • Šetření systémových prostředků klientských PC • Vytváření výkonnostních rezerv pro náročnější výpočty www.seznam.cz @marekfojtl
  • 22. Tipy na závěr • Kritické bývají cykly a často se opakující události • Profilování • Testujte na méně výkonných strojích • Optimalizace vs čitelnost kódu • Důležité zejména v mapových aplikacích, hrách ... www.seznam.cz @marekfojtl
  • 23. Děkuji za pozornost Marek Fojtl, UI vývojář, marek.fojtl@firma.seznam.cz www.seznam.cz @marekfojtl