Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modernes Frontend Development

Modernes Frontend Development

Thorsten Rinne

October 30, 2013
Tweet

More Decks by Thorsten Rinne

Other Decks in Programming

Transcript

  1. Eine Art Agenda ... Editor / IDE Browser Browser Dev

    Tools Die Kommandozeile Development Tools Demo
  2. Welche Versionen? Chrome latest (derzeit Version 30) Chromium latest (derzeit

    Version 32) Firefox latest (derzeit Version 25) Firefox Nightly latest (derzeit Version 28) Safari latest (derzeit Version 6.1 bzw 7) Opera kann man sich sparen, da wie Chrome
  3. Welche IE Versionen? Internet Explorer 7 (?) Internet Explorer 8

    Internet Explorer 9 Internet Explorer 10 Internet Explorer 11
  4. Memory und DOM Leaks JavaScript CPU Profiling Heap Snapshot für

    JavaScript Objekte DOM Knoten Suche nach potentiellen Memory und DOM Leaks
  5. Mobile Testing User Agent Verschiedene Endgeräte Android iOS Windows Phone

    Simulation von Touch Events Ändern der Geolocation und des Accelerometers
  6. The JavaScript Task Runner aufgabenbasiertes Kommandozeilen- Tool ähnlich make /

    rake / ant / phing Konfiguration in JavaScript Große Community Hunderte Plugins Linting, Concat, Watcher, Testing out of the box
  7. { "name": "yatego.com", "version": "2.0.0", "dependencies": {}, "devDependencies": { "grunt":

    "~0.4.1", "grunt-contrib-jshint": "~0.4.1", "grunt-contrib-uglify": "~0.2.2" }, "engines": { "node": ">=0.10.0" }, "author": "Yatego GmbH", } package.json
  8. module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { options:

    { banner: '/*! <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, build: { src: 'src/<%= pkg.name %>.js', dest: 'build/<%= pkg.name %>.min.js' } } }); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.registerTask('default', ['uglify']); }; Gruntfile.js
  9. // Run Jasmine and DalekJS tests grunt.registerTask( 'testrun', ['jshint', 'jasmine',

    'dalek'] ); // Build production grunt.registerTask( 'production', ['copy', 'less', 'cssmin', 'jshint', 'uglify'] ); Grunt Tasks
  10. Package Manager für das Web Installieren und Entfernen von Paketen

    Keine Abhängigkeiten keine sudo Rechte nötig Schnell installiert: $ npm install bower -g
  11. Pakete installieren $ bower install $ bower install <package> $

    bower install <package>#<version> $ bower install <name>=<package>#<version>
  12. Paket-Quellen Registrierte Bower-Pakete wie z.B. jQuery Git-Repositories Lokale Ordner URLs

    mit .zip/.tar.gz Dateien Werden normal nach bower_components installiert
  13. Konfiguration bower.json { "name": "yatego.com", "version": "2.0.0", "dependencies": { "jquery":

    "1.10.2", "bootstrap": "3.0.0", "modernizr": "2.6.2" }, "devDependencies": { "jasmine": "~1.3.1", }, "resolutions": { "jquery": "1.10.2" } }
  14. Testing Unittests mit Jasmine PhantomJS Chrome Firefox Chrome Canary Firefox

    Nightly UI Testing mit DalekJS PhantomJS Chrome Firefox Internet Explorer!
  15. Jasmine describe("Cart", function() { beforeEach(function() { $.yategoCart().removeAll(); }); it("Checks if

    add item works", function() { $.yategoCart().addItem("test-pos-1", "test-offer-1", 3); expect($.yategoCart().hasItem("test-offer-1")).toEqual(true); }); it("Checks if change quantity works", function() { $.yategoCart().addItem("test-pos-2", "test-offer-2", 3); $.yategoCart().addItemQty("test-offer-2", 2); expect($.yategoCart().getItemQty("test-offer-2")).toEqual(5); }); });
  16. Jasmine via PhantomJS $ grunt jasmine Running "jasmine:pivotal" (jasmine) task

    Testing jasmine specs via phantom ............................ 28 specs in 0.229s. >> 0 failures Done, without errors.
  17. Testing mit DalekJS Neues UI Testing Framework Sehr neu, aktuell

    Version 0.0.6 Schneller als Selenium Tests schreibt man in JavaScript Unterstützt alle Browser und PhantomJS
  18. Testing mit DalekJS module.exports = { 'Page title is correct':

    function (test) { test.open('http://www.yatego.dev') .assert.title().is('Yatego Shopping', 'It has title') .done(); }, 'Search page is correct': function (test) { test.open('http://www.yatego.dev/search?q=Test') .assert.title().is('Test - yatego.com', 'It has title') .done(); } };
  19. Yeoman Scaffolding neuer Apps Schreibt Grunt Konfiguration Yeoman = Grunt

    + Bower + Awesomeness Installation $ npm install -g yo
  20. Generator WebApp Watcher für HTML, CSS und JS mit LiveReload

    Builtin Webserver auf Port 9000 JSHint Mocha-Tests Bootstrap 3
  21. Frontend vs. Backend Frontend 3 Developer Bootstrap 3 basierend Testen

    via Jasmine Grunt / LiveReload Deployment Assetserver Backend 6 Developer Symfony 2.3 Testen via PHPUnit app/console + ant Deployment Capifony
  22. Vorteile Jeder hatte seinen Workflow Test-Driven-Development für Frontend und Backend

    LiveReload schützt die F5-Taste Viele JavaScript-Fehler vor dem Release gefunden
  23. Vielen Dank für Eure Aufmerksamkeit! Joind.in: https://joind.in/9562 Twitter: @ThorstenRinne App.net:

    https://alpha.app.net/thorsten Slides: http://speakerdeck.com/u/thorsten Thorsten Rinne Yatego GmbH [email protected]