On Github una / slides-nom-nom-perf
an action, task, or operation, seen in terms of how successfully it was performed
measure of succes = crux of our jobjpg
png-8
png-24
gif
svg
size: 109kb
size: 49kb
size: 109kb
size: 49kb
Pull your files into one to minimize requests.
Images
CSS
@import 'vendors/bootstrap'; @import 'vendors/jquery-ui'; @import 'utils/variables'; @import 'utils/functions'; @import 'utils/mixins'; @import 'utils/placeholders'; @import 'base/reset'; @import 'base/typography'; @import 'layout/navigation'; @import 'layout/grid'; @import 'layout/header'; @import 'layout/footer'; @import 'layout/sidebar'; @import 'layout/forms'; @import 'components/buttons'; @import 'components/carousel'; @import 'components/cover'; @import 'components/dropdown'; @import 'pages/home'; @import 'pages/contact'; @import 'themes/theme'; @import 'themes/admin';
Javascript
<!-- index.html // DONT DO THIS! --> <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="js/vendor/shake.js"></script> <script src="js/vendor/fastbutton.js"></script> <script src="js/scripts.js"></script> <script src="js/tabTime.js"></script> <script src="js/clickAnIngredient.js"></script>
<!-- Gulpfile.js // DO THIS INSTEAD! --> var concat = require('gulp-concat'); gulp.task('scripts', function() { gulp.src(['./lib/file3.js', './lib/file1.js', './lib/file2.js']) .pipe(concat('all.js')) .pipe(gulp.dest('./dist/')) });
Make those files as small as possible.
Images
CSS
body,fieldset,form,html,legend,li,ol,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6,p{margin-top:0}fieldset,img{border:0}legend{color:#000}li{list-style:none}sup{vertical-align:text-top}sub{vertical-align:text-bottom}table{border-collapse:collapse;border-spacing:0}caption,td,th{text-align:left;vertical-align:top;font-weight:400}input,select,textarea{font-size:110%;line-height:1.1}abbr,acronym{border-bottom:.1em dotted;cursor:help}*,:after,:before{margin:0;padding:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{-webkit-font-smoothing:antialiased;height:100%}body{font-family:"Carrois Gothic",sans-serif;font-weight:400;padding:2em 10% 4em;max-width:1000px;margin:0 auto;background:#eef0f0;min-height:100%;position:relative}h1,h2,h3{font-family:"Fjalla One",serif;font-weight:700}h1{font-size:3.5em;margin-bottom:.25em;color:#5ab1bb}h2{color:#4e6766;font-family:"Carrois Gothic",sans-serif;text-transform:uppercase;font-size:.9em;letter-spacing:2px}
Javascript
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.
The intermediate steps between receiving the HTML, CSS, and JavaScript bytes and the required processing to turn them into rendered pixels
Before we talk about how to load your js, if you can avoid JavaScript or replace it with CSS, do that if not, you need to think about the "critical rendering path" This is all about getting your priorities in orderand what the user will see first By optimizing the critical rendering path we can significantly improve the time to first render of our pages. optimize the delivery of content, and defer the restManage How Your Scripts load with Async & Defer.
Check Your Performance
some hippie math that tells you how fast it "feels" to load your website.
- Dave Rupertvar gulp = require('gulp'); var psi = require('psi'); var site = 'http://www.html5rocks.com'; var key = ''; // Please feel free to use the `nokey` option to try out PageSpeed // Insights as part of your build process. For more frequent use, // we recommend registering for your own API key. For more info: // https://developers.google.com/speed/docs/insights/v1/getting_started gulp.task('mobile', function () { return psi(site, { // key: key nokey: 'true', strategy: 'mobile', }, function (err, data) { console.log(data.score); console.log(data.pageStats); }); }); gulp.task('desktop', function () { return psi(site, { nokey: 'true', // key: key, strategy: 'desktop', }, function (err, data) { console.log(data.score); console.log(data.pageStats); }); }); gulp.task('default', ['mobile']);
gulp