julianfresco / udacity.frontenddev.p4

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Website Performance Optimization portfolio project

How to use

npm install
gulp build

Distribution files are found in dist folder, while source files are found in src folder.

Part 1: index.html

Visit http://julianfresco.github.io/udacity.frontenddev.p4/dist/index.html

Optimizations included:

  • Minify CSS, JavaScript
  • Use inline CSS
  • Add async attribute to script tags for non-DOM-rendering JavaScript
  • Add media attribute to link tags for remote CSS
  • Compress and resize images

Part 2: pizza.html

Visit http://julianfresco.github.io/udacity.frontenddev.p4/dist/pizza.html

Optimizations included:

  • Optimize memory usage in for loops in main.js

    Lines 481-489:

    var allPizzas = document.getElementsByClassName("randomPizzaContainer"),
    pizza = allPizzas[0],
    numPizzas = allPizzas.length;
    var dx = determineDx(pizza, size);
    var newwidth = (pizza.offsetWidth + dx) + 'px';
    
    for (var i = 0; i < numPizzas; i++) {
      allPizzas[i].style.width = newwidth;
    }

    Lines 504 - 507

    var pizzasDiv = document.getElementById("randomPizzas");
    for (var i = 2; i < 100; i++) {
      pizzasDiv.appendChild(pizzaElementGenerator(i));
    }

    Line 539:

    scroll = (document.body.scrollTop / 1250); // Define here to reduce memory allocation
  • Use more efficient DOM API functions getElementById and getElementsByClassName

    (Ex) Line 481:

    var allPizzas = document.getElementsByClassName("randomPizzaContainer"),

    (Ex) Line 505:

    var pizzasDiv = document.getElementById("randomPizzas");
  • Reduce number of pizza images to amount needed

  • Improve efficiency by declaring variables outside of loop

    Lines 568 - 585:

    var cols = 8,
    s = 256,
    rows = Math.ceil(document.documentElement.clientHeight / s),
    total = cols * rows,
    elem,
    movers = document.getElementById("movingPizzas1");
    
    for (var i = 0; i < total; i++) {
        elem = document.createElement('img');
        elem.className = 'mover';
        elem.src = "img/pizza.png";
        elem.style.height = "100px";
        elem.style.width = "73.333px";
        elem.basicLeft = (i % cols) * s;
        elem.style.top = (Math.floor(i / cols) * s) + 'px';
        movers.appendChild(elem);
    }
    updatePositions();
  • Minify CSS, JavaScript

  • Use inline CSS where applicable

  • Compress and resize images

  • Add gulp tasks to help

About


Languages

Language:HTML 51.3%Language:JavaScript 44.4%Language:CSS 4.3%