CINXE.COM
TimKadlec.com - Web Performance Consulting | TimKadlec.com
<!DOCTYPE html> <html lang="en-us"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="monetization" content="$pay.stronghold.co/1a1ea76f3e5429e4854adf20d2fefe4a121"> <title>TimKadlec.com - Web Performance Consulting | TimKadlec.com</title> <script> window.tk = {}; if ("querySelector" in document && "addEventListener" in window) { document.documentElement.className += " js"; window.tk.cutsMustard = true; } </script> <link rel="icon" href="/favicon.ico" sizes="16x16" type="image/png" /> <meta name="author" content="Tim Kadlec"> <style type="text/css"> a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,td,th{text-align:left;font-weight:400;vertical-align:middle}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}em{font-style:italic}@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{background:#fff;color:#1f1f1f;font:100%/1.5em -apple-system,BlinkMacSystemFont,“Segoe UIâ€,Roboto,Helvetica,Arial,sans-serif;border-top:5px solid #242322}code{color:#000;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono',monospace;font-size:.85em}pre code{background:rgba(27,31,35,.05);border:1px solid #ccc;margin:1.5em 0;padding:.25em .5em;display:block;overflow-x:auto}.testResults{width:80%}.testResults td{padding:.2em;border-bottom:1px solid #fff}.testResults th{font-weight:700;border-bottom:1px solid #333}.testResults .fail,.testResults .pass{color:#fff;text-align:center}.testResults .fail{background:#cb000f}.testResults .pass{background:#00882d}.media{margin:1em}.media .bd{overflow:hidden;zoom:1}.media .img{margin:0 auto 1em;display:block}@media screen and (min-width:40em){.media .img{display:inline;float:left;margin-right:1em;margin-bottom:0}}.media .img img{display:block}a{color:#d33405}.btn{background:#d33405;color:#fff;padding:1em;border-radius:4px;text-decoration:none;text-transform:uppercase;letter-spacing:.083333333em;font-size:.9em;font-weight:700;transition-property:padding,background;transition-duration:.3s;margin-top:1em;display:inline-block}.btn:hover{background:#a12804;color:#fff;padding:1em 1.5em}ins{text-decoration:none}a:hover{color:#a12804}#wrap,.inner{margin:0 auto;max-width:71.25em;padding:0}#wrap{clear:both}#about #wrap,#archives #wrap,#home #wrap,#workshops #wrap{max-width:100%}#about #wrap{padding-bottom:0}#about div#wrap+div.alt{background:#fff}footer{margin-top:0}abbr{border-bottom:1px dotted #333;text-decoration:none}h1{font-size:2.5em;font-weight:700;margin-bottom:.625em;letter-spacing:-1px;line-height:1.1em}h1 a{text-decoration:none}.h-entry ol,.h-entry ul,p{margin-bottom:1em}article{position:relative;width:90%;margin:0 auto}h2{font-size:1.75em;font-weight:700;margin:1em 0 .625em 0;letter-spacing:-.0625em;line-height:1.1em}.slats h3,article h3{font-size:1.25em;font-weight:700;margin:1em 0 .625em 0}.slats{margin:auto 0;padding:0}.slats h3{margin-bottom:.125em}.slats .group{padding-bottom:.5em}blockquote{margin-left:5%;border-left:3px solid #d33405;font-style:italic;padding-left:1.25em;overflow-wrap:break-word}blockquote strong{font-weight:700}header time{text-transform:uppercase;color:#9f9f9f;letter-spacing:.2em;display:block;padding-bottom:1em}time{font-size:.85em}.additional{font-size:.65em;text-transform:uppercase}article header{border-bottom:1px dotted rgba(0,0,0,.2);margin-bottom:1.875em;text-align:center;padding-top:2em}.comments{border-top:1px dotted #ebebeb;margin-top:1.875em}figure{text-align:center;font-size:.85em;line-height:1.3em}figure img{margin:auto;display:block;max-width:100%}figure.banner,img.banner{max-width:100%;margin-bottom:1em}img.banner{margin-bottom:0;width:100%}figure.banner img{max-width:100%}figure.banner figcaption{color:#6e6c6b;padding:.25em;font-style:italic;margin-top:.3em}figure.lg-left,figure.lg-right{max-width:100%;margin-bottom:1em}figure.lg-left figcaption,figure.lg-right figcaption{color:#6e6c6b;padding:.25em;font-style:italic}@media (min-width:43.75em){figure.lg-right{float:right;width:30%;margin-left:1.5em}figure.lg-left{float:left;width:30%;margin-right:1.5em}figure.lg-left img,figure.lg-right img{width:100%}}@media (min-width:62.9375em){figure.lg-right{width:40%;margin-right:-7em}figure.lg-right-b{width:60%}figure.lg-left{width:40%;margin-left:-7em}figure.lg-left-b{width:60%}}#toggle{float:right;padding-top:.1em;font-size:2.5em;text-transform:uppercase;z-index:2001;color:#aaaaa9}@media screen and (min-width:27.8125em){#toggle{padding-top:.3em}}#toggle span{font-size:1.5em;position:relative;top:.1em}footer{background:#1f1f1f;color:#fff;letter-spacing:0 -1px 1px #000;width:100%;overflow:hidden;position:relative;padding:0 1em}footer nav{text-transform:uppercase;font-size:.9em;margin-bottom:2em;z-index:1000;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.vevent{margin-bottom:1.5em;padding-bottom:1em;border-bottom:1px dotted #d2d2d2}.vevent .date{color:#767676;margin-top:0;min-width:10em;margin-bottom:0;font-size:.9em;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}@media screen and (min-width:63em){.vevent .date{float:left;margin-right:2em}}.vevent .date time{font-size:1em}.vevent .summary{color:#000;font-weight:700}.vevent .event-details{overflow:hidden}.vevent h3{font-weight:700;font-size:1.785714286em;line-height:1em;margin-bottom:.3em;margin-top:0}.vevent h3 a{text-decoration:none}.vevent h3 a:hover{text-decoration:underline}.vevent .resources{font-size:.8em;margin-bottom:0;margin-top:0}footer{border-bottom:0}footer a{color:#fb6d43;text-decoration:none;border-bottom:1px solid #fb6d43}footer a:hover{border-bottom:1px dotted #faded5;color:#faded5}footer p{margin:0;padding:1em 0;font-size:1em;clear:both;color:#ccc;text-align:center}footer p strong{color:#e6e6e6}@media screen and (min-width:40em){footer .lc{display:grid;grid-template-columns:3fr 2fr}footer p{text-align:left}footer .copy{grid-column-start:4;grid-row-start:1;text-align:right}footer .loaded{grid-column-start:4;text-align:right}}footer .extra .fusionimg{margin-bottom:1em}footer .lc{max-width:62em;padding:.75em 1.25em}.blog-index{width:100%;overflow:auto}.blog-index img{margin-left:1em}#blog-archives .slats li{margin-bottom:2.5em}#blog-archives .elsewhere .meta,#blog-archives time{font-size:.6875em;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;float:none;margin-right:0;text-transform:uppercase}#blog-archives h3{font-size:1.785714286em;margin-top:.2em;margin-bottom:.1em;line-height:1.1em}#blog-archives h3 a{text-decoration:none}#blog-archives h3 a:hover{text-decoration:underline}#blog-archives .tags{font-size:.875em}#blog-archives .tags a{border-bottom:1px solid #d2d1d0;color:#54524f;text-decoration:none}#blog-archives .tags a:before{content:"#"}#blog-archives .tags a:hover{color:#000;border-bottom:1px solid #000}@media screen and (min-width:55em){#blog-archives .blog-archives-main{width:64.5855759%;border-right:1px solid #dfdfdf;float:left;padding-right:1em}#blog-archives .blog-archives-aside{float:right;margin-left:2px;width:34%}#blog-archives .blog-archives-aside h3{font-size:1em}#blog-archives .blog-archives-aside .elsewhere li{padding-bottom:.5em;border-bottom:1px solid #dfdfdf;margin-bottom:1em}}#about,#blog-archives,#workshops,.home{color:#504e4c;overflow:auto;width:100%;padding:0}#blog-archives{margin-top:0;padding:0 1em}.talks{padding:0 1em}#about .lc,#blog-archives .lc,#workshops .lc,.home .lc{padding:1em}#about .img,#blog-archives .img,.home .img{max-width:250px}.home .img{max-width:300px}@media screen and (min-width:40em){#about .img,#blog-archives .img,.home .img{margin-left:0;margin-right:2em}}#about .tri,#blog-archives .tri,.home .tri{padding:1em 0}@media screen and (min-width:40em){#about .tri,#blog-archives .tri,.home .tri{display:table-cell;width:34%;padding:.5em 1em;border-right:1px solid #dedede;margin-bottom:1.5em}#about .tri:first-child,#blog-archives .tri:first-child,.home .tri:first-child{padding-left:0;width:32%}#about .tri:last-child,#blog-archives .tri:last-child,.home .tri:last-child{border-right:0}}#about .extras img,#blog-archives .extras img,.home .extras img{margin-right:1em;height:200px;border:1px solid #858585}#about .extras .noborder,#blog-archives .extras .noborder,.home .extras .noborder{border:0;padding:0 1em}#about .img,#blog-archives .img,.home .img{border:0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}#about .lede,#blog-archives .lede,#workshops .lede,.home .lede{font-size:1.5em;line-height:1.4em}#about .lede strong,#blog-archives .lede strong,.home .lede strong{font-weight:700;color:#fff}#about .clients,#blog-archives .clients,.home .clients{display:grid;width:100%;grid-template-columns:repeat(2,1fr);grid-row-gap:2em;justify-items:center;align-items:center;margin:2em auto 2em;clear:both}#about .clients li,#blog-archives .clients li,.home .clients li{text-align:center}@media screen and (min-width:40em){#about .clients,#blog-archives .clients,.home .clients{grid-template-columns:repeat(8,1fr)}#about .clients li,#blog-archives .clients li,.home .clients li{padding:0;grid-column:span 2}#about .clients li:nth-child(3n),#blog-archives .clients li:nth-child(3n),.home .clients li:nth-child(3n){clear:none}#about .clients li:nth-child(4n),#blog-archives .clients li:nth-child(4n),.home .clients li:nth-child(4n){padding-top:0}.home .clients li:nth-last-child(3):nth-child(4n-3){grid-column-start:2;grid-column-end:4}}#about .clients li img,#blog-archives .clients li img,.home .clients li img{max-width:80%;width:100%;height:auto}#about h2,#blog-archives h2,#workshops h2,.home h2{text-transform:uppercase;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;letter-spacing:1px;font-size:1em;margin-bottom:2em}#about div.upcoming,#blog-archives div.upcoming,.home div.upcoming{margin-left:0;padding:1em}#about div.upcoming .date,#blog-archives div.upcoming .date,.home div.upcoming .date{font-size:.6875em;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;float:none;margin-right:0;text-transform:uppercase}#about div.upcoming h3,#blog-archives div.upcoming h3,.home div.upcoming h3{font-size:2.0625em;margin-top:.3em;margin-bottom:.3em}#about div.upcoming h3 a:hover,#blog-archives div.upcoming h3 a:hover,.home div.upcoming h3 a:hover{text-decoration:underline}#about div.upcoming .vevent,#blog-archives div.upcoming .vevent,.home div.upcoming .vevent{border-bottom:0}#about div.upcoming .resources,#blog-archives div.upcoming .resources,.home div.upcoming .resources{font-size:.875em;margin-top:.2em}@media screen and (min-width:40em){#about div.upcoming,#blog-archives div.upcoming,.home div.upcoming{float:right;width:50%;padding-left:2em}}#about div.book-promo,#blog-archives div.book-promo,.home div.book-promo{text-align:center;margin-bottom:2em;border-bottom:1px solid #dedede;padding-bottom:1em}#about div.book-promo h3,#blog-archives div.book-promo h3,.home div.book-promo h3{margin-top:1em;margin-bottom:.5em;font-size:1.4375em;color:#000;font-weight:700}#about div.book-promo h3 a,#blog-archives div.book-promo h3 a,.home div.book-promo h3 a{text-decoration:none}#about div.book-promo h3 a:hover,#blog-archives div.book-promo h3 a:hover,.home div.book-promo h3 a:hover{text-decoration:underline;color:#333}#about div.book-promo p,#blog-archives div.book-promo p,.home div.book-promo p{font-size:.9em;margin-bottom:2.5em}@media screen and (min-width:40em){#about div.book-promo,#blog-archives div.book-promo,.home div.book-promo{float:left;width:49%;padding-right:2em;padding-left:1em;padding-bottom:1.5em;padding-top:1.5em;margin-bottom:0;border-bottom:0;border-right:1px solid #dedede}#about div.book-promo:nth-of-type(3n),#blog-archives div.book-promo:nth-of-type(3n),.home div.book-promo:nth-of-type(3n){clear:left}}@media screen and (min-width:40em){.book-promo .books{display:grid;grid-template-columns:1fr 1fr;grid-gap:1em}.book-promo .books img{max-width:100%}}#about h2 small,#blog-archives h2 small,.home h2 small{font-weight:400;text-transform:none;font-family:Palatino,Georgia,"Times New Roman",serif;font-size:.88889em}#about h2 small a,#blog-archives h2 small a,.home h2 small a{text-decoration:none;letter-spacing:0}#about h2 small a:hover,#blog-archives h2 small a:hover,.home h2 small a:hover{text-decoration:underline}#about div.recent,#blog-archives div.recent,.home div.recent{margin-left:0;padding:2em 1em}@media screen and (min-width:40em){#about div.recent,#blog-archives div.recent,.home div.recent{padding:2em 0}}#about div.client-block,#blog-archives div.client-block,.home div.client-block{margin-left:0;padding:1.5em 1em}@media screen and (min-width:40em){#about div.client-block,#blog-archives div.client-block,.home div.client-block{padding:1.5em 0}}#about div.recent ol.slats li,#blog-archives div.recent ol.slats li,.home div.recent ol.slats li{margin-bottom:2em}@media screen and (min-width:40em){#about div.recent ol.slats li,#blog-archives div.recent ol.slats li,.home div.recent ol.slats li{display:inline-block;width:49%;float:left}#about div.recent ol.slats li:nth-child(3n),#blog-archives div.recent ol.slats li:nth-child(3n),.home div.recent ol.slats li:nth-child(3n){clear:both}#about div.recent ol.slats li:nth-child(2n),#blog-archives div.recent ol.slats li:nth-child(2n),.home div.recent ol.slats li:nth-child(2n){float:right;width:50%;padding-left:2em}}#about div.recent ol.slats time,#blog-archives div.recent ol.slats time,.home div.recent ol.slats time{font-size:.6875em;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;float:none;margin-right:0;text-transform:uppercase}#about div.recent ol.slats h3,#blog-archives div.recent ol.slats h3,.home div.recent ol.slats h3{font-size:1.785714286em;margin-top:.2em;margin-bottom:.1em;line-height:1.1em}#about div.recent ol.slats h3 a,#blog-archives div.recent ol.slats h3 a,.home div.recent ol.slats h3 a{text-decoration:none}#about div.recent ol.slats h3 a:hover,#blog-archives div.recent ol.slats h3 a:hover,.home div.recent ol.slats h3 a:hover{text-decoration:underline}#about div.recent ol.slats .tags,#blog-archives div.recent ol.slats .tags,.home div.recent ol.slats .tags{font-size:.875em}#about div.recent ol.slats .tags a,#blog-archives div.recent ol.slats .tags a,.home div.recent ol.slats .tags a{border-bottom:1px solid #d2d1d0;color:#54524f;text-decoration:none}#about div.recent ol.slats .tags a:before,#blog-archives div.recent ol.slats .tags a:before,.home div.recent ol.slats .tags a:before{content:"#"}#about div.recent ol.slats .tags a:hover,#blog-archives div.recent ol.slats .tags a:hover,.home div.recent ol.slats .tags a:hover{color:#000;border-bottom:1px solid #000}#about .lede,#workshops .lede{margin-top:.5em}#about .lede+.lede{margin-top:-.5em}.alt{background:#f7f7f7;padding:0;clear:both}.home .alt .lc{padding-top:0;padding-bottom:0;overflow:visible}.home .alt{margin-top:1em}#about .alt .lc:after,#workshops .alt .lc:after,.home .alt .lc:after{content:" ";display:block;clear:both}#about .alt .lc .book-promo{padding-top:1em}@media screen and (min-width:28.75em){#writing #wrap{background:url(/images/pen-head-sm.png?1473268539) top center no-repeat;background-size:100%}}@media screen and (min-width:44.5em){#writing #wrap{background:url(/images/pen-head.png?1473268539) top center no-repeat;background-size:auto}}.rating{display:block}.rating:before{content:"Rating: ";font-weight:700}@media screen and (min-width:34.375em){.rating{display:inline-block;visibility:hidden}.rating:before{content:""}}@media screen and (min-width:34.375em){[data-rating="2of5"]:after{content:"\2605 \2605 \2606 \2606 \2606";visibility:visible;margin-left:-1.25em}[data-rating="3of5"]:after{content:"\2605 \2605 \2605 \2606 \2606";visibility:visible;margin-left:-1.25em}[data-rating="4of5"]:after{content:"\2605 \2605 \2605 \2605 \2606";visibility:visible;margin-left:-1.25em}[data-rating="5of5"]:after{content:"\2605 \2605 \2605 \2605 \2605";visibility:visible;margin-left:-1.25em}}#books-read .h-entry ol li p:first-of-type{margin-top:.5em}article.palatino{font-family:Palatino,Georgia,serif}article.georgia{font-family:Georgia,serif;font-size:1.125em;line-height:1.545454545em;width:88%}article.georgia h1{font-weight:400;font-size:5.375em}#disqus_thread{margin-top:2em;border-top:1px dotted rgba(0,0,0,.2);padding-top:2em}code[class*=language-],pre[class*=language-]{color:#000;text-shadow:0 0;font-family:Consolas,Monaco,'Andale Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-size:.75em}.highlight code[class*=language-],pre[class*=language-]{color:#fff;text-shadow:0 1px #000;font-size:.75em}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.number,.token.property,.token.tag{color:#905}.token.attr-name,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:rgba(255,255,255,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.important,.token.regex{color:#e90}.token.important{font-weight:700}.token.entity{cursor:help}.full .plleft{border:1px solid #9f9f9f;margin:auto;display:block}img.flr,picture.flr{display:block;margin:.5em auto;border:1px solid #eee}img.nb{border:0}@media screen and (min-width:26.25em){img.flr,picture.flr{float:right;margin:.5em 0 .5em 1em}img.nb{border:0;margin:1.7em 0 1.7em 1.5em}}footer{padding-top:1em}.plain caption{font-size:1.2em;text-align:center;font-weight:700;padding:.5em;margin-bottom:.5em;border-bottom:1px dotted rgba(0,0,0,.2)}table{border:1px double #ccc}.about header{text-align:left}@media screen and (min-width:63em){#wrap .about header,#wrap .about section{width:90%;margin-left:auto;margin-right:auto}#wrap .about #what-i-do{float:left;width:62%;margin-bottom:1.5em}#wrap .about #bio{float:right;width:30%;font-size:.8em;line-height:1.5em}#wrap .about #bio h2{margin-top:0}#wrap .about .workStatus{clear:both;margin-bottom:1.5em}}#archives #wrap header{margin-bottom:2em;padding:2em 0 .5em;text-align:center}#jump{display:none}.workStatus{margin:1em 0;background:#f8f8f8;border:1px dotted #d2d2d2;padding:.5em}.workStatus strong{font-weight:700}.workStatus p{margin-bottom:0}@media screen and (min-width:19em){.extras .extra:first-child{border-bottom:1px dashed #525252;padding-bottom:3em;padding-top:1.5em}.extra{clear:both;width:100%;overflow:hidden;padding-top:1.5em;text-align:center}.extra h3{font-size:1em;text-transform:uppercase;color:#fb6d43;font-weight:400}.extra img{display:block;text-align:center;margin:auto}}@media screen and (min-width:50em){.plain{width:100%;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;background:#eaebec;font-size:.9em;margin-bottom:1em;border:1px solid #e0e0e0}.plain thead th{padding:1em;border:1px solid #111;border-width:1px;background:#1f1f1f;color:#fff;text-transform:uppercase;font-size:.9em;letter-spacing:.05em}.plain thead th.num{text-align:right}.plain td,.plain th{padding:.5em 1em;border-top:1px solid #fff;border-bottom:1px solid #e0e0e0;border-left:1px solid #e0e0e0;background:#fafafa}.plain tbody th{font-weight:700}.plain tbody tr:nth-child(even) td,.plain tbody tr:nth-child(even) th{background:#eee}.num tbody td,.num tbody th{text-align:right}td.num,th.num{text-align:right}.recent h2{margin-top:0}footer{padding-top:0}.extra{text-align:left}.extra h3{font-size:1em;text-transform:uppercase;color:#fb6d43;font-weight:400;margin-top:1.5em}.extra img{float:left;margin-right:2em}.intouch h3{margin-top:1em}.home .recent,.home .upcoming,.home .workStatus{margin-left:300px}.home .workStatus{margin-top:0}.home .plright{float:left;margin:0 1em 2em}#wrap,.inner{padding-bottom:1em}.pull{width:100%}.pull section{width:65.8%}.full .plleft{position:static;float:right;margin-left:1em;margin-bottom:1em}footer{padding-left:0}#jump,#toggle{display:none}}@media screen and (min-width:63em){.pullquote{position:absolute;right:34.2%;width:34.2%;padding-right:5%;font-style:italic;color:#787878;font-size:1.2em;font-family:"Palatino Linotype",Palatino,Georgia,serif}.pullquote-left:after{position:absolute;right:105%;width:23.2%;font-style:italic;color:#787878;font-size:1em;font-family:Palatino,Georgia,serif;content:"“" attr(data-pullquote) "”"}.pull .pullquote-left:after{left:110%;width:34.2%}.pullquote-right:after{position:absolute;left:105%;width:23.2%;font-style:italic;color:#787878;font-size:1em;font-family:Palatino,Georgia,serif;content:"“" attr(data-pullquote) "”"}.pull .pullquote-right:after{left:110%}.pull .plleft{width:34.2%;left:110%;text-align:center}.pull .plleft img{width:100%}.extras .extra{float:left;clear:none;width:50%;padding:.5em 2em 0 0;margin:1.5em 0 0 0}.extras .extra:last-child{padding-left:2em;padding-right:0}.extras .extra:first-child{border-right:1px dashed #525252;border-bottom:0;padding-top:0;padding-bottom:0}.extras .extra:first-child img{margin-right:1em}.extras .extra img{float:left;margin-right:2em;margin-bottom:3em}.home{margin:auto}.lc{width:80%;margin:auto;overflow:hidden;max-width:65em;padding:1px}.talks{max-width:44.886363636em}article section{width:90%;margin:auto;position:relative}#wrap article section{width:70%}#wrap .full section{width:90%}#wrap .sidebar h1{text-align:left}#wrap .sidebar section{padding-right:38%;width:100%;position:relative;margin:0}.pull{width:100%}.pull section{width:65.8%;margin:0}}@media screen and (max-width:46.75em){.plain{border:0;padding-bottom:0;display:block;width:100%}.plain caption{display:block}.plain thead{display:none;visibility:hidden}.plain tbody,.plain td,.plain th,.plain tr{border:0;display:block;padding:0;text-align:left;white-space:normal}.plain tr{margin-bottom:1em}.plain td[data-title]:before,.plain th[data-title]:before{content:attr(data-title) ": ";font-weight:700}.plain th:not([data-title]){font-weight:700}.plain td:empty{display:none}}.diagram{width:100%;display:block;max-width:100%}.diagram img{width:100%;display:block;max-width:100%}@media (min-width:43.75em){.diagram{margin:1.5em 0}}#blog-archives .link-list h3{font-size:1em;margin-bottom:1em}.permalink{text-transform:uppercase;font-size:.6875em;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;margin-top:-1.5em;margin-bottom:1.5em}.cipher{font-size:300%;font-family:monospace;text-align:center;margin:1em}pre.railFence{font-family:monospace;font-size:300%;line-height:1.2em;margin:1em auto .5em;max-width:6.5em}table.vigenere{width:100%;margin-bottom:1em}.vigenere caption{text-align:center;font-size:120%;text-transform:capitalize;font-weight:700;padding-bottom:.5em}.vigenere th{text-align:center;border:1px solid #ccc;font-weight:700}.vigenere th[scope=col]{border-bottom:2px solid #333}.vigenere th[scope=row]{border-right:2px solid #333}.vigenere td{border:1px solid #ccc;text-align:center}.shelf{margin-bottom:1.5em}@media screen and (min-width:34em){.shelf{display:grid;grid-template-columns:1fr 1fr}}@media screen and (min-width:55em){.shelf{grid-template-columns:1fr 1fr 1fr}}.shelf small{display:block;letter-spacing:0}.shelf .book{text-align:center;width:100%;margin-bottom:2em}.shelf .book a{text-decoration:none;display:inline-block}.shelf .book img{background:#eee;padding:.375em;border:1px solid #b6b5b5}.shelf .book a:hover img{background:#d33405}.shelf .book a:hover{text-decoration:underline}.full-width{width:100vw;position:relative;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}.book-review .entry-title{font-size:2.5em}.book-review header{padding:1.5em 0}.book-review header .lc{text-align:center;padding:0 1em}.book-review header img{display:block;margin:0 auto 2em auto}.e-content cite{font-style:italic}@media screen and (min-width:34em){.book-review header .lc{display:grid;grid-template-columns:12.5em 1fr;grid-column-gap:1em;text-align:left}.book-review header img{margin-bottom:0}}.book-review time{color:#1f1f1f;letter-spacing:0;text-transform:none;font-size:1em;display:inline}.book-review .subtitle{font-size:1.2em}.book-review .book-author{border-bottom:3px solid #ccc}.book-review .entry-title{margin-bottom:.2em}.book-rating{font-size:1.5em}#blog-archives .book h2{margin-bottom:.5em}.review-post{display:block;overflow:hidden}.review-post img{float:left;max-height:150px;margin-right:1em;background:#eee;padding:.375em;border:1px solid #b6b5b5}form{padding:0 .5em}form label{display:block}form input[type=password],form input[type=text]{font-size:1.2em;margin-bottom:1em;width:100%}form textarea{width:100%;border:1px solid #ccc;font-size:1.2em}.github-info{margin-top:2em}.h-entry ol{list-style-type:decimal}.h-entry h1{font-size:2.5em}@media screen and (min-width:31.25em){.h-entry h1{font-size:3.5em}}.h-entry section strong{font-weight:700}.h-entry .e-content .note{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.75em;color:#636363;line-height:1.4em;padding:1.5em 0;margin-bottom:1.5em}.h-entry .e-content ul{list-style-type:disc}.h-entry .e-content ul li{margin-left:2.25em;margin-bottom:.5em}.h-entry .e-content ol li{margin-left:2.25em;margin-bottom:.5em}.h-entry .e-content h2{margin-top:1.28571em;margin-bottom:.42857em;font-size:1.55556em;letter-spacing:-.03571em}.blog-post header{text-align:left;padding:1.5em 0}.blog-post .contain{max-width:71.25em;width:90%;margin:auto}@media screen and (min-width:63em){.blog-post .contain{width:100%}}.blog-post .contain div{margin:auto;display:grid}@media screen and (min-width:63em){.blog-post .contain div{width:63%}}.blog-post header time{grid-row-start:1;color:#636363;letter-spacing:.1em}.blog-post header .entry-title{grid-row-start:2;margin-bottom:.2em}.blog-post header .meta{grid-row-start:3}@media screen and (min-width:40em){#services{background-image:url(/images/tim-btconf-sm.jpg);background-size:100%;background-repeat:no-repeat;padding:16em 0 2em}#services .lc{margin-bottom:-4em}#services .lc{grid-auto-flow:column;align-content:start}#services .lc p:last-child{align-self:end}}@media screen and (min-width:55em){#services{background-image:url(/images/tim-btconf-850-black.jpg);padding:20em 0 2em}}@media screen and (min-width:63.75em){#services{background-image:url(/images/tim-btconf-1200-black.jpg)}}#services .lc{display:grid;grid-column-gap:.8em;padding:0}#services .lc section{border:2px solid rgba(222,222,222,.7);padding:0 1em;background:#f7f7f7;display:grid;grid-auto-flow:rows;align-items:start}#services .lc section .btn{align-self:baseline}#books{margin-bottom:1em}#about #books{padding-top:4em}#books .books{text-align:center;display:grid;grid-template-columns:1fr 1fr;grid-column-gap:1em;grid-row-gap:1em}.books img{background:#eee;max-width:100%;padding:.375em;border:1px solid #b6b5b5;transition-duration:.3s;transition-property:background}.books a:hover img{background:#d33405;border:1px solid #d33405}@media screen and (min-width:40em){#books .books{grid-template-columns:1fr 1fr 1fr 1fr}}header[role=banner]{background:#fff;border-bottom:1px solid #ddd;position:relative}header[role=banner] a{color:#615f5d;text-transform:uppercase;font-family:sans-serif;text-decoration:none}nav[aria-label=site]{font-size:.9em}.main-navigation{list-style:none;margin:0;padding:0;display:block}.main-navigation li{list-style:none;display:flex}.main-navigation a{display:flex;align-items:center;padding:1em .3em;border-bottom:3px solid transparent;width:100%;transition-property:background,border;transition-duration:.3s}.main-navigation a.active,.main-navigation a:hover{color:#232;font-weight:700;background:#eee}.main-navigation a:hover{font-weight:400}.main-navigation a.active:hover{font-weight:700}#nav-toggle{display:none}@media screen and (min-width:20em){.js #nav-toggle{background:0 0;border:0;font-size:1.1em;position:absolute;right:1em;top:1.4em;display:flex;align-items:center;text-transform:uppercase;font-weight:700;color:#d33405}.js #nav-toggle svg{height:1.4em}.js nav[aria-label=site] li{height:0;overflow:hidden}.js nav[aria-label=site] li.home-link{height:auto}.js nav[data-open=true] li{height:auto}}@media screen and (min-width:55em){#nav-toggle,.js #nav-toggle{display:none}.js nav[aria-label=site] li{height:auto}header[role=banner]{display:grid;grid-template-columns:minmax(1em,1fr) repeat(9,minmax(1em,8.3em)) minmax(1em,1fr)}nav[aria-label=site]{grid-column:2/11;display:flex}.main-navigation{display:flex;width:100%;font-size:.9em}.main-navigation li{margin:0 1em}.main-navigation li a.active,.main-navigation li a:hover{background:0 0;border-bottom:3px solid #d33405}.main-navigation li.home-link{margin-right:auto}}@media screen and (min-width:65em){.main-navigation{font-size:1em}}.pagination{display:flex}.pagination li{margin:0 .2em}.pagination li.disabled a{text-decoration:none;color:#504e4c;background:0 0}.pagination a{background:#d33405;color:#fff;padding:.2em .7em;text-decoration:none;display:flex;align-items:center;align-self:center}.pagination .active a{background:0 0;color:#333}.pagination a:hover{background:#8e2405}sup{font-size:75%;line-height:0;vertical-align:baseline;position:relative;top:-.5em}ins{font-style:italic}ul.reg{list-style-type:disc;margin-bottom:1.5em}ul.reg li{margin-left:3em}.book-highlights blockquote{margin-bottom:1.5em}.testimonial{border-left:0;margin-left:0;padding-left:0;font-size:1.25em;line-height:1.5em;position:relative;padding-left:2.8em;margin:3em 0 2em}#home .testimonial{padding-bottom:1em;margin-bottom:0}.testimonial:before{content:"“";display:block;font-size:5em;font-style:italic;position:absolute;top:.25em;left:0;opacity:.25}.testimonial span{display:block;font-size:.8em;font-style:normal;margin-top:1em;text-align:right}.testimonial:first-child{margin-top:0}@media screen and (min-width:40em){.testimonial:first-child{margin-top:2em}}.site-hero{background:#1f1f1f;color:#ccc;align-items:center;padding:2.5em 1em 0;line-height:0}.site-hero img{grid-column:1/6;grid-row:1;max-width:100%;line-height:0;margin:auto;display:block}.site-hero .bd{grid-column:6/11;grid-row:1}.site-hero a{color:#fb6d43;text-decoration:none;border-bottom:1px solid #fb6d43}.site-hero a:hover{border-bottom:1px dotted #faded5;color:#faded5}@media screen and (min-width:56em){.site-hero{display:grid;padding:2.5em 1em 0;grid-template-columns:minmax(1em,1fr) repeat(9,minmax(1em,8.3em)) minmax(1em,1fr);justify-items:end}}@media screen and (min-width:76em){.site-hero .bd{grid-column:5/11}.site-hero img{grid-column:2/5;margin:0;justify-self:start}}.e-content .callout{border:1px solid #ddd;background:#ffffe7;padding:1em 2em 0}picture.center{margin:auto;text-align:center;display:block;max-width:100%}img.oversized,picture.oversized{margin:auto;text-align:center;display:block;max-width:130%;margin-left:-15%}.routine dt{font-weight:700}.chroma{color:#f8f8f2;background-color:#282a36}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffc}.chroma .lnt{margin-right:.4em;padding:0 .4em 0 .4em}.chroma .ln{margin-right:.4em;padding:0 .4em 0 .4em}.chroma .k{color:#ff79c6}.chroma .kc{color:#ff79c6}.chroma .kd{color:#8be9fd;font-style:italic}.chroma .kn{color:#ff79c6}.chroma .kp{color:#ff79c6}.chroma .kr{color:#ff79c6}.chroma .kt{color:#8be9fd}.chroma .na{color:#50fa7b}.chroma .nb{color:#8be9fd;font-style:italic}.chroma .nc{color:#50fa7b}.chroma .nf{color:#50fa7b}.chroma .nl{color:#8be9fd;font-style:italic}.chroma .nt{color:#ff79c6}.chroma .nv{color:#8be9fd;font-style:italic}.chroma .vc{color:#8be9fd;font-style:italic}.chroma .vg{color:#8be9fd;font-style:italic}.chroma .vi{color:#8be9fd;font-style:italic}.chroma .s{color:#f1fa8c}.chroma .sa{color:#f1fa8c}.chroma .sb{color:#f1fa8c}.chroma .sc{color:#f1fa8c}.chroma .dl{color:#f1fa8c}.chroma .sd{color:#f1fa8c}.chroma .s2{color:#f1fa8c}.chroma .se{color:#f1fa8c}.chroma .sh{color:#f1fa8c}.chroma .si{color:#f1fa8c}.chroma .sx{color:#f1fa8c}.chroma .sr{color:#f1fa8c}.chroma .s1{color:#f1fa8c}.chroma .ss{color:#f1fa8c}.chroma .m{color:#bd93f9}.chroma .mb{color:#bd93f9}.chroma .mf{color:#bd93f9}.chroma .mh{color:#bd93f9}.chroma .mi{color:#bd93f9}.chroma .il{color:#bd93f9}.chroma .mo{color:#bd93f9}.chroma .o{color:#ff79c6}.chroma .ow{color:#ff79c6}.chroma .c{color:#6272a4}.chroma .ch{color:#6272a4}.chroma .cm{color:#6272a4}.chroma .c1{color:#6272a4}.chroma .cs{color:#6272a4}.chroma .cp{color:#ff79c6}.chroma .cpf{color:#ff79c6}.chroma .gd{color:#8b080b}.chroma .ge{text-decoration:underline}.chroma .gh{font-weight:700}.chroma .gi{font-weight:700}.chroma .go{color:#44475a}.chroma .gu{font-weight:700}.chroma .gl{text-decoration:underline}.newsletter-form{max-width:45em;padding:2em .5em;margin:auto}.newsletter-form strong{font-weight:700}.newsletter-form form{padding:0;margin:1em auto;max-width:30em}.newsletter-form .fields{display:grid;grid-template-columns:2fr 1fr}.newsletter-form input[type=email],.newsletter-form input[type=text]{width:100%;padding:.5em;border:1px solid #fb6d43;border-radius:0;margin:0;font-size:1.1em}.newsletter-form button{padding:.5em;background:#d33405;display:block;border:0;font-weight:700;color:#fff;font-size:.9em;font-weight:700;text-transform:uppercase}.newsletter-form label{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.form--success{color:#155724;background:#d4edda;border:1px solid #c3e6cb;padding:.75rem 1.25rem}.form--error{color:#721c24;background:#f8d7da;border:1px solid #f5c6cb;padding:.75rem 1.25rem}dt{font-weight:700;margin-bottom:.5em}dd{margin-bottom:1.5em}dd strong{display:block;text-decoration:underline} </style> <link href="/atom.xml" rel="alternate" type="application/rss+xml" title="Web Performance Consulting | TimKadlec.com" /> <link href="/atom.xml" rel="feed" type="application/rss+xml" title="Web Performance Consulting | TimKadlec.com" /> </head> <body id="home"> <header id="top" role="banner"> <nav id="nav" role="navigation" aria-label="site"> <button hidden id="nav-toggle" aria-label="Menu"> <svg viewBox="0 0 20 20" alt="Menu"> <path d="m0-0v4h20v-4h-20zm0 8v4h20v-4h-20zm0 8v4h20v-4h-20z" fill="currentColor" /> </svg> </button> <ul class="main-navigation"> <li class="home-link"> <a href="https://timkadlec.com/" title="TimKadlec.com Home"> <svg xmlns="http://www.w3.org/2000/svg" width="198" height="43"><path opacity=".8" fill="#9E1308" enable-background="new" d="M4.723 16c-2.609 0-4.723 2.114-4.723 4.723v2.554c0 2.609 2.114 4.723 4.723 4.723h11.277v-12h-11.277z"/><path opacity=".8" fill="#9E1308" enable-background="new" d="M38.277 16h-10.277v12h10.277c2.609 0 4.723-2.114 4.723-4.723v-2.555c0-2.608-2.114-4.722-4.723-4.722z"/><path opacity=".8" fill="#9E1308" enable-background="new" d="M16 38.277c0 2.609 2.114 4.723 4.723 4.723h2.555c2.608 0 4.722-2.114 4.722-4.723v-10.277h-12v10.277z"/><path opacity=".8" fill="#9E1308" enable-background="new" d="M28 4.723c0-2.609-2.114-4.723-4.723-4.723h-2.555c-2.608 0-4.722 2.114-4.722 4.723v11.277h12v-11.277z"/><rect x="16" y="16" opacity=".8" fill="#FF4710" enable-background="new" width="12" height="12"/><path fill="#232" d="M65 10v26.405c0 1.46-1.029 2.495-2.5 2.495-1.518 0-2.5-1.035-2.5-2.495v-26.405h-3.874c-1.282 0-2.23-1.181-2.23-2.5 0-1.272.949-2.5 2.23-2.5h16.105c1.329 0 2.231 1.228 2.231 2.5 0 1.319-.902 2.5-2.231 2.5h-7.231zm10 26.405c0 1.46-1.029 2.401-2.5 2.401s-2.5-.941-2.5-2.401v-19.778c0-1.46 1.029-2.402 2.5-2.402s2.5.942 2.5 2.402v19.778zm21-15.823c0-1.318-.647-2.166-1.929-2.166-.949 0-2.071.424-2.071.847v17.141c0 1.46-1.029 2.402-2.5 2.402s-2.5-.942-2.5-2.402v-15.822c0-1.318-.647-2.166-1.929-2.166-.949 0-1.071.424-2.071.847v17.141c0 1.46-.529 2.402-2 2.402s-2-.942-2-2.402v-19.683c0-1.507.625-2.307 2.049-2.307s2.116.706 2.211 2.119c.617-1.648 1.889-2.496 3.835-2.496 2.136 0 3.531.942 4.29 2.496.712-1.46 2.529-2.496 4.475-2.496 3.323 0 5.14 2.261 5.14 5.51v16.859c0 1.46-1.029 2.402-2.5 2.402s-2.5-.942-2.5-2.402v-15.824zm21 1.366v14.457c0 1.46-1.029 2.495-2.5 2.495-1.52 0-2.5-1.035-2.5-2.495v-28.914c0-1.46.98-2.496 2.5-2.496 1.471 0 2.5 1.036 2.5 2.496v13.703l5.828-14.598c.427-1.13 1.253-1.601 2.439-1.601 1.234 0 2.479.754 2.479 2.213 0 .33-.066.706-.209 1.13l-5.301 13.28 5.513 13.702c.19.472.288.848.288 1.225 0 1.46-1.042 2.355-2.418 2.355-1.282 0-2.221-.707-2.648-1.791l-5.971-15.161zm17-1.318c0 1.319-1.195 2.166-2.477 2.166-1.471 0-2.523-.847-2.523-2.166v-.66c0-3.626 2.109-5.933 6.477-5.933 4.366 0 6.523 2.119 6.523 6.404v16.058c0 1.365-.811 2.308-2.282 2.308-1.282 0-2.067-.849-2.209-1.885-.616 1.225-1.817 2.072-3.62 2.072-3.56 0-5.203-3.249-5.203-7.439 0-4.381 1.594-7.158 5.485-7.158 1.282 0 2.829.33 2.829.847v-5.086c0-1.177-.171-1.978-1.5-1.978s-1.5.754-1.5 2.119v.331zm3 8.099c0-.234-.684-.422-1.443-.422-1.519 0-2.168.846-2.168 3.248 0 2.307.5 3.484 2.114 3.484.712 0 1.497-.236 1.497-.518v-5.792zm8-9.795c0-2.967 1.794-4.898 4.832-4.898 2.041 0 3.168.989 4.168 2.025v-8.57c0-1.46.529-2.402 2-2.402s2 .942 2 2.402v28.914c0 1.413-.624 2.401-2.096 2.401-1.518 0-2.163-1.037-2.305-2.261-.664 1.366-2.021 2.449-3.968 2.449-2.989 0-4.631-2.354-4.631-5.039v-15.021zm5 13.845c0 1.271.623 2.072 1.952 2.072.901 0 1.048-.33 2.048-.848v-14.975c-1-.424-1.051-.848-2-.848-1.234 0-2 .706-2 1.931v12.668zm17 3.625c0 1.461-1.029 2.402-2.5 2.402s-2.5-.941-2.5-2.402v-28.913c0-1.46 1.029-2.402 2.5-2.402s2.5.942 2.5 2.402v28.913zm16-10.453c0 1.177-1.002 2.049-2.094 2.049h-6.906v5.014c0 1.319.79 2.025 1.977 2.025 1.043 0 2.023-.518 2.023-2.025v-.281c0-1.602 1.146-2.308 2.477-2.308 1.566 0 2.523.989 2.523 2.354v.377c0 3.438-2.918 5.84-6.904 5.84-4.32 0-7.096-2.449-7.096-6.594v-11.302c0-4.568 2.823-7.064 7.047-7.064 4.178 0 6.953 2.59 6.953 6.781v5.134zm-5-5.792c0-1.46-.812-2.119-2-2.119-1.139 0-2 .659-2 2.025v3.935h4v-3.841zm13.5 14.739c1.282 0 1.5-.849 1.5-2.025v-1.225c0-1.364 1.076-2.307 2.5-2.307 1.376 0 2.5.942 2.5 2.307v.707c0 3.72-1.943 6.64-6.357 6.64-4.889 0-6.643-2.968-6.643-6.876v-11.207c0-3.909 1.754-6.875 6.643-6.875 4.414 0 6.357 2.92 6.357 6.64v.706c0 1.366-1.124 2.307-2.5 2.307-1.424 0-2.5-.941-2.5-2.307v-1.224c0-1.177-.219-2.025-1.5-2.025s-1.5.847-1.5 2.025v12.715c0 1.176.218 2.024 1.5 2.024z"/><image src="/images/logo.png" xlink:href></image></svg> </a> </li> <li> <a href="/me/">Work With Me</a> </li> <li> <a href="/remembers/">Writing</a> </li> <li> <a href="/talks/">Speaking</a> </li> <li> <a href="/read/">Reading</a> </li> <li> <a href="/saved/">Links</a> </li> <li> <a href="https://newsletter.timkadlec.com/archive">Newsletter</a> </li> </ul> </nav> </header> <div id="wrap"> <section> <div class="home"> <div class="site-hero"> <div class="bd"> <p class="lede"><strong>I'm Tim Kadlec.</strong></p> <p class="lede">I help organizations improve the effectiveness and reach of their sites by ensuring that they perform quickly—and stay that way.</p> <p class="lede"><a href="mailto:tim@timkadlec.com?subject=Working together on performance">Let's talk.</a></p> </div> <img src="/optim/headshot-transparent.png" width="399" height="321" title="Tim Kadlec" alt="Tim Kadlec"> </div> <div class="lc"> <ul class="clients"> <li><img src="/optim/priceline-logo-gs.png" width="205" height="50" alt="Priceline Logo"></li> <li><img src="/optim/espn-logo-gs.png" width="150" height="38" alt="ESPN Logo"></li> <li><img src="/optim/best-buy-logo-gs.png" width="128" height="77" alt="Best Buy Logo"></li> <li><img src="/optim/turner-logo-gs.png" width="213" height="38" alt="Turner Broadcasting Logo"></li> <li><img src="/optim/grove-logo-gs.png" width="162" height="65" alt="Grove Collaborative Logo"></li> <li><img src="/optim/mdn-logo-gs.png" width="222" height="54" alt="Mozilla Developer Network Logo"></li> <li><img src="/optim/rfe-logo-gs.png" width="257" height="77" alt="Radio Free Europe Logo"></li> <li><img src="/optim/cloudinary-logo-gs.png" width="237" height="50" alt="Cloudinary Logo"></li> <li><img src="/optim/everlane-logo.png" width="240" height="25" alt="Everlane Logo"></li> <li><img src="/optim/thrive-causemetics-logo.png" width="204" height="90" alt="Thrive Causemetics Logo"></li> <li><img src="/optim/upwork-logo.png" width="214" height="64" alt="UpWork Logo"></li> </ul> <blockquote class="testimonial"> <p>Tim’s approach to making the web faster is masterful. With his guidance we achieved greater performance improvements than anticipated, but more importantly we saw a cultural shift within our engineering team that prioritizes maintaining performance as standard practice.</p> <span>Noah Smith, Director of Engineering, Grove Collaborative</span> </blockquote> </div> <div class="alt"> <div class="lc"> <div class="recent"> <h2>Recent posts <small>(<a href="/remembers">see all</a>)</small></h2> <ol class="slats"> <li class="group"> <time datetime="" pubdate>24 Jul, 2024</time> <h3><a href="https://timkadlec.com/remembers/2024-07-24-what-to-expect-when-optimizing/">What to Expect When You're Optimizing</a></h3> <span class="tags"> <a href="/tags/performance">performance</a> <a href="/tags/optimizations">optimizations</a> <a href="/tags/process">process</a> <a href="/tags/culture">culture</a> <a href="/tags/metrics">metrics</a> </span> </li> <li class="group"> <time datetime="" pubdate>26 Jul, 2023</time> <h3><a href="https://timkadlec.com/remembers/2023-07-26-introducing-perfwork/">Introducing perfwork</a></h3> <span class="tags"> <a href="/tags/hiring">hiring</a> <a href="/tags/product">product</a> <a href="/tags/jobs">jobs</a> </span> </li> <li class="group"> <time datetime="" pubdate>30 Jun, 2023</time> <h3><a href="https://timkadlec.com/remembers/2023-06-30-single-visionary-fairytale/">The Single Visionary Fairytale</a></h3> <span class="tags"> <a href="/tags/user-feedback">user feedback</a> <a href="/tags/product">product</a> <a href="/tags/data">data</a> </span> </li> <li class="group"> <time datetime="" pubdate>01 Jun, 2023</time> <h3><a href="https://timkadlec.com/remembers/2023-06-01-performance-is-not-a-checklist/">Performance Is Not a Checklist</a></h3> <span class="tags"> <a href="/tags/user-experience">user experience</a> <a href="/tags/performance">performance</a> <a href="/tags/web-vitals">web vitals</a> <a href="/tags/metrics">metrics</a> </span> </li> </ol> </div> </div> </div> <div id="books" class="lc contain"> <h2>Books I've Written</h2> <ul class="books"> <li> <a href="http://shop.oreilly.com/product/0636920039730.do"><img src="/optim/hpi-cover.png" width="200" title="High Performance Images" alt="High Performance Images Book Cover"></a> </li> <li> <a href="http://implementingresponsivedesign.com"> <img src="/optim/ird-cover-straight.png" width="200" title="Implementing Responsive Design" alt="Implementing Responsive Design Book Cover"> </a> </li> <li> <a href="https://shop.smashingmagazine.com/products/smashing-book-4-ebooks"> <img src="/optim/smashing-book.png" width="200" title="Smashing Book #4: New Perspectives on Web Design" alt="Smashing Book #4: New Perspectives on Web Design Book Cover"> </a> </li> <li> <a href="http://www.amazon.com/Web-Performance-Daybook-Volume-2/dp/1449332919"> <img src="/optim/wpdb-cover.png" width="200" title="Web Performance Daybook Volume 2" alt="Web Performance Daybook Book Cover"> </a> </li> </ul> </div> </div> </section> </div> <div class="alt"><div class="lc"> <div class="newsletter-form"> <p><strong>Join the weekly mailing list.</strong></p> <p>Every week I'll send you an email with any new posts, links I found interesting, answers to questions that come in, and more.</p> <form class='email-form' method='POST' name='newsletter'><input type='hidden' name='form-name' value='newsletter' /> <div hidden aria-hidden="true"> <label> Don’t fill this out if you're human: <input name="bot-field" /> </label> </div> <label hidden for="email">Your email:</label> <div class="fields"> <input type="email" name="email" placeholder="Email" id="email" required /> <button type="submit">Subscribe</button> </div> </form> </div> </div></div> <footer role="contentinfo"> <div class="lc"> <p class="copy"> © 2024 Tim Kadlec. </p> <p> If RSS is your sort of thing, you can subscribe to a few different feeds. The <a href="https://timkadlec.com/atom.xml">main feed</a> has both book reviews and blog posts. There are also individual feeds for <a href="https://timkadlec.com/remembers/atom.xml">just posts</a>, <a href="https://timkadlec.com/read/atom.xml">just book reviews</a>, and <a href="https://timkadlec.com/saved/atom.xml">just bookmarks</a>.</p> </p> </div> </footer> <script type="text/javascript"> var playing=function(e){"use strict";const n="undefined"==typeof location?null:location,t="undefined"==typeof document?null:document,r="undefined"==typeof navigator?null:navigator,o=window.performance&&window.performance.getEntriesByType&&window.performance.getEntriesByType("navigation"),a=window.performance&&window.performance.getEntriesByType&&window.performance.getEntriesByType("resource"),i={beaconURL:"https://timkadlec.com/playground",sampleRate:100},c={};function s(e,n,t){t?(c[t]||(c[t]={}),c[t][n]=e):c[n]=e}function l(){return c}function u(e,n,t){const r={};r.time=e,r.details=t||null,s(r,n,"metrics")}function m(){return o?window.performance.getEntriesByType("navigation")[0]:null}function p(){let e=localStorage.getItem("sample_session");e||(e=function(){const e=Math.random();return localStorage.setItem("sample_session",e.toString()),e.toString()}());const n=.01*i.sampleRate;return console.log(n),parseFloat(e)<n}const d=[];const f=[];let g=!1;function y(e){if(!g&&(s(e.type?e.type:"","trigger"),a&&s(window.performance.getEntriesByType("resource").filter((e=>"blocking"===e.renderBlockingStatus)),"renderBlocking","pageContext"),window&&window.navigator&&"function"==typeof window.navigator.sendBeacon&&"function"==typeof window.Blob))try{window.navigator.sendBeacon(i.beaconURL,JSON.stringify(l()))&&(g=!0)}catch(e){}}return"onpagehide"in window?addEventListener("pagehide",y,{capture:!0}):(addEventListener("unload",y,{capture:!0}),addEventListener("beforeunload",y,{capture:!0})),addEventListener("load",y,{capture:!0}),e.config=i,e.getData=l,e.init=function(){p()?(!function(){const e=r&&r.connection?r.connection:null;s({hostname:n.hostname?n.hostname:null,page:n.href?n.href:null,pathname:n.pathname?n.pathname:null,protocol:n.protocol?n.protocol:null,referrer:t.referrer?t.referrer:null,queryString:n.search?n.search:null,userAgent:r.userAgent?r.userAgent:null,saveData:e&&e.saveData?e.saveData:null,effectiveType:e&&e.effectiveType?e.effectiveType:null,networkType:e&&e.type?e.type:null,rtt:e&&e.rtt?e.rtt:null,downlink:e&&e.downlink?e.downlink:null,hardwareConcurrency:r&&r.hardwareConcurrency?r.hardwareConcurrency:null,deviceMemory:r&&r.deviceMemory?r.deviceMemory:null},"pageContext")}(),s(m().type,"navType","pageContext"),window.onerror=function(e,n,t,r,o){const a={message:e,url:n,line:t,column:r,stack:o?o.stack:""};d.push(a),s(d,"errors")},function(){const e=m();if(e){const{responseStart:n}=e,t=e.activationStart||0,r=Math.max(n-t,0),o=Math.max(e.domainLookupStart-t,0),a=Math.max(e.connectStart-t,0),i=Math.max(e.requestStart-t,0);u(r,"ttfb",{waitTime:o,dnsTime:a-o,connectionTime:i-a,requestTime:r-i})}}(),new PerformanceObserver((e=>{e.getEntries().forEach((e=>{u(e.startTime,e.name)}))})).observe({type:"paint",buffered:!0}),new PerformanceObserver((e=>{const n=m(),t=e.getEntries(),r=t[t.length-1],o=Math.max(n.responseStart-(n.activationStart||0),0),a=r.toJSON();if(r.element&&(a.element={},a.element.nodeName=r.element.nodeName,a.element.outerHTML=r.element.outerHTML),r.url){const e=performance.getEntriesByType("resource").filter((e=>e.name===r.url))[0];if(a.isAccurateLCP=!!r.renderTime,e){const n=Math.max(o,e?e.requestStart||e.startTime:0),t=Math.max(n,e?e.responseEnd:0),i=Math.max(t,r?r.renderTime||r.loadTime:0);a.requestDelay=n-o,a.loadDelay=t-n,a.renderDelay=i-t}}u(a.startTime,"lcp",a)})).observe({type:"largest-contentful-paint",buffered:!0}),new PerformanceObserver((e=>{e.getEntries().forEach((e=>{const{duration:n,entryType:t,name:r,startTime:o,attribution:a}=e,i={duration:n,entryType:t,name:r,startTime:o,attribution:a};f.push(i)})),s(f,"longTasks","metrics")})).observe({type:"longtask",buffered:!0})):console.log("Not sampling this page")},e.sendBeacon=y,e}({}); playing.init(); const processForm=form=>{const data=new FormData(form) data.append('form-name','newsletter');fetch('/',{method:'POST',body:data,}).then(()=>{form.innerHTML=`<div class="form--success">👍 Almost there! Check your inbox for a confirmation e-mail.</div>`;}).catch(error=>{form.innerHTML=`<div class="form--error">Error: ${error}</div>`;})} const emailForm=document.querySelector('.email-form') if(emailForm){emailForm.addEventListener('submit',e=>{e.preventDefault();processForm(emailForm);})} if(window.tk.cutsMustard){window.onload=function(){setTimeout(function(){window.performance=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{};var t=performance.timing||{};if(!t){return;} var start=t.navigationStart,end=t.loadEventEnd loadTime=(end-start)/1000;var copy=document.querySelectorAll('.copy');copy[0].innerHTML+="<p class='loaded'>This page loaded in <strong>"+loadTime+" seconds</strong>.</p>";},0);}} if (window.tk.cutsMustard) { let toggle = document.getElementById('nav-toggle'); toggle.hidden = false; let nav = document.getElementById('nav'); toggle.addEventListener('click', function() { let expanded = this.getAttribute('aria-expanded') === 'true'; this.setAttribute('aria-expanded', String(!expanded)); nav.setAttribute('data-open', String(!expanded)); }); } if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register('/sw.js', { scope: '/' }); }); } </script> <script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="47f1e9de-b39e-4896-a719-24c31158eb69" data-netlify-deploy-branch="master" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiNDdmMWU5ZGUtYjM5ZS00ODk2LWE3MTktMjRjMzExNThlYjY5IiwiYWNjb3VudF9pZCI6IjU5MTFiMmQ5Y2YzMjFjNGVmYTZkZjhhMyIsImRlcGxveV9pZCI6IjY3MTY1OTY3YWZkNGZhMDAwODQ0YWY5NyIsImlzc3VlciI6Im5mc2VydmVyIn0.Yh4375IegrmDVoCQPC6yJipwD87qlTBrcxseckeWabM"></script></body> </html>