Frontend-Entwicklung mit JavaScript



Ähnliche Dokumente
Code-Organisation in JavaScript

Übung 1: Von einer naiven JavaScript Applikation zu einem modernen Front-End Build:

EPO Consulting GmbH. Ihr Partner für HTML5 und SAP UI5 Apps. Stand 2015/04. EPO Consulting GmbH - 1 -

BBCode v2.0. Einleitung...2 Installation... 3 Bugfixliste Inhaltsverzeichnis. Überarbeiteter BBCode + neuem Interface.

MOC Entwicklung von ASP.NET MVC 4 Webapplikationen

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web

APEX und Phonegap? Das kann APEX doch mit HTML5! APEX connect Düsseldorf, 10. Juni 2015 Daniel Horwedel. APEX und Phonegap?

Lokale Installation von DotNetNuke 4 ohne IIS

Cross-Platform Mobile mit.net

BILDER TEILEN MIT DROPBOX

Ein UI in zwei Welten - Controls in HTML5 und WPF. Timo Korinth

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Einleitung. Funktion. Panzenböck Phillipp. Download Installation. Testen. Konfiguration

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Fachapplikationen in heterogenen IT Landschaften

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

1 Was ist das Mediencenter?

Informationen zur Verwendung von Visual Studio und cmake

Über mich. Daniel Bälz. Softwareentwickler (inovex GmbH) github.com/dbaelz

WEBSEITEN ENTWICKELN MIT ASP.NET

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Installation Microsoft Lync 2010 auf Linux

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Informationen zum neuen Studmail häufige Fragen

Sie haben diese Daten auch mobil dabei und synchron auf anderen Geräten! Sie haben eine Sicherheitskopie dieser Belege in einem Cloud-Speicher.

Datenabgleich. Meine Welt auf einen Blick erleben.

Informationen zur neu erschienenen Firmware R1669

HTML5 HOCKEYSTICK EXPANDABLE BANNER v1.0

Produktvorstellung: CMS System / dynamische Webseiten. 1. Vorwort

Ein mobiler Electronic Program Guide

Speicher in der Cloud

ASP: Active Server Pages

How-To Guide 002. Wie stelle ich den virtuellen Speicher von Windows ein?

Wir bringen Ihre Notes/Domino Anwendungen sicher ins Web , Bilster Berg Drive Resort Michael Steinhoff, agentbase AG.

Anleitung. Lesezugriff auf die App CHARLY Termine unter Android Stand:

1. Laptop: Benutzen Sie die Anleitung ab Seite 2 2. Tablet / Smartphone: Benutzen Sie die Anleitung ab Seite 4. Seite 2 Seite 4

Revit Modelle in der Cloud: Autodesk 360 Mobile

MetaQuotes Empfehlungen zum Gebrauch von

Synchronisations- Assistent

Erstellung von Word und Excel Berichten mit Eclipse BIRT

Anbindung des eibport an das Internet

Einer Outlook-Gruppe weitere Computer hinzufügen

Virtuelle COM-Schnittstelle umbenennen

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Architektur des agimatec-validation Frameworks

[DvBROWSER] Offline-Viewer für [DvARCHIV] und [DvARCHIVpersonal] Version 2.2

Erfahrungen mit Hartz IV- Empfängern

WinVetpro im Betriebsmodus Laptop

I N S T A L L A T I O N S A N L E I T U N G

Rechenzentrum der Ruhr-Universität Bochum. Integration von egroupware an der RUB in Outlook 2010 mit Funambol

teamsync Kurzanleitung

Node.js Einführung Manuel Hart

Webseiten und Web-Apps grafisch gestalten mit HTML5 Canvas ohne Flash und sonstige Tools

Warum Sie jetzt kein Onlinemarketing brauchen! Ab wann ist Onlinemarketing. So finden Sie heraus, wann Ihre Website bereit ist optimiert zu werden

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Professional Internet Assessment Tool

Nach der Installation des FolderShare-Satellits wird Ihr persönliches FolderShare -Konto erstellt.

Print2CAD 2017, 8th Generation. Netzwerkversionen

Gezielt über Folien hinweg springen

Agenda. Einführung AJAX Was ist eigentlich AJAX?

Befehlssatz zum High Speed Interface-88-USB (HSI-88-USB) (ab Firmware 0.71) (Version 1.2)

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Webdesign Grundlagen. Michael Kraft, M.A. WS 2012/2013

CodeSaver. Vorwort. Seite 1 von 6

Schuljahreswechsel im Schul-Webportal

Aqcuisition Processing Distribution Exploit/View

FIREBIRD BETRIEB DER SAFESCAN TA UND TA+ SOFTWARE AUF MEHR ALS EINEM COMPUTER

Mit dem Podcasten starten: So konfigurierst Du das Wordpress-Plugin Podlove Publisher

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

SEMINAR Modifikation für die Nutzung des Community Builders

Lesen und Kaufen von ebooks über den Online-Shop Ihrer Buchhandlung

MSXFORUM - Exchange Server 2003 > Archivierung mit Exchange eigenen Mitteln

Einrichtung einer eduroam Verbindung unter dem Betriebssystem Android

Online-Publishing mit HTML und CSS für Einsteigerinnen

Lizenzverwaltung Installation nachträglich erworbener Zusatzmodule

38 / 100 Schneller gemacht

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

c t HTML 5 App Werbemittelanforderung

ISA Server Best Practice Analyzer

CADEMIA: Einrichtung Ihres Computers unter Mac OS X

Zend PHP Cloud Application Platform

bluebee Die einzigartige App-Lösung für Ihre Seminarund Tagungsveranstaltungen

ECO-Manager - Funktionsbeschreibung

Zählen von Objekten einer bestimmten Klasse

Installation OMNIKEY 3121 USB

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Kurzfassung der Studienarbeit

TypeScript JavaScript mit ohne Kopfschmerzen. Veit Weber 3. JUG Saxony Day Radebeul

Praktikum: Einstieg: Arbeitsplatz, JCreator

Mail-Server mit GroupWare

WordPress lokal mit Xaamp installieren

Transkript:

headquarter

Frontend-Entwicklung mit JavaScript Single Page Applications Server-Side HTML Rendering Client-Side HTML Rendering kein JavaScript wenig JavaScript nur JavaScript

Der Browser bietet viele neue JavaScript APIs, z.b. Geolocation, Web Storage, Indexed DB, WebGL, WebSocket, HTML Canvas JavaScript ist viel performanter geworden Anzahl an JavaScript-Frameworks ist stark gestiegen Dadurch ergeben sich viele neue Möglichkeiten, allerdings hat JavaScript Schwächen, z.b. dynamische Typisierung => schlechtes Tooling keine Packages/Assemblies oder Namensräume=> Wie strukturiere ich meinen Code?

Ziel des Vortrags Überblick über Frameworks und Tools, die den Umgang mit JavaScript erleichtern.

NodeJS Plattform um JavaScript-Code außerhalb des Browsers auszuführen Basiert auf Googles JavaScript-Runtime V8 Wird hauptsächlich genutzt um Web-Server zu realisieren, aber auch um Desktop-Anwendungen zu entwickeln (node-webkit) und als Unterstützung bei der Entwicklung mit Web-Technologien

NPM Package Manager für NodeJS NPM = Node Package Manager Wird über die Kommandozeile angesteuert, z.b. $ npm install jquery um jquery zu installieren. Abhängigkeiten von Packages werden dabei auch installiert. Eigene Packages können erstellt werden, in dem eine package.json-datei erstellt wird, $ npm init hilft dabei. Abhängigkeiten von Packages werden dort definiert => Abhängikeiten müssen nicht eingecheckt werden

Bower Package Manager für das Web Es werden keine Abhängigkeiten der Packages installiert Abhängigkeiten der Packages müssen selber verwaltet werden => besser für das Web $ npm install g bower $ bower install knockout --save

Demo NPM & Bower

Modularisierung von JavaScript In JavaScript gibt es keine Packages/Assemblies und Namensräume => keine Möglichkeit Code vernünftig zu strukturieren Closure: var Helper; (function (Helper) { function pluralize(count, word) { return count === 1? word : word + 's'; } Helper.pluralize = pluralize; })(Helper (Helper = {})); Helper.pluralize(3, 'User'); // 'Users'

JavaScript Module Loader Common JS synchron NodeJS AMD (Asynchronous Module Definition) asynchron RequireJS ECMAScript 6 synchron und asynchron

Beispiel Common JS // Person.js function Person(firstName, lastname) { this.firstname = firstname; this.lastname = lastname; } Person.prototype.getFullName = function() { return this.firstname + ' ' + this.lastname; } module.exports = Person; // App.js var Person = require('./person'); var person = new Person('Max','Mustermann');

Beispiel AMD define(['jquery', 'moment'], function($, moment) { return function(element) { var m = moment($(element).data('time')); $(element).text(m.fromnow()); } });

Require JS Beispiel RequireJS <script src="/bower_components/requirejs/require.js" data-main="js/main.js"></script> require.config({ paths: { 'jquery': '/bower_components/jquery/dist/jquery', 'moment': '/bower_components/moment/moment' } }); Require JS Optimizer Fasst Module in einer Datei zusammen => der Browser muss nur eine Datei herunterladen In JavaScript geschrieben

Demo RequireJS

Browserify $ npm install g browserify Ermöglicht NodeJS-Module im Browser zu nutzen, in dem alle Module in einer Datei zusammengefasst werden $ browserify main.js d o bundle.js Erleichtert Debugging vom Code durch Source Maps

Demo Browserify

JavaScript Task Runner Warum? => Automatisierung Kompilieren Komprimieren Bundling Unit Tests Synchronisation mit Browser GruntJS eher deskriptiv (Konfiguration) sehr viele Plug-Ins gruntfile.js GulpJS Code statt Konfiguration NodeJS Streams => sehr schnell viele Plug-Ins gulpfile.js

Beispiel GulpJS var gulp = require('gulp'); var less = require('gulp-less'); gulp.task('less', function () { gulp.src('./less/**/*.less').pipe(less()).pipe(gulp.dest('./out/css')); });

Demo GulpJS

Browser Sync Entwickeln für das Web erfordert viel Testen und Optimieren Responsive Design Viele verschiedene Browser, auch auf mobilen Geräten Browser Sync aktualisiert Web-Seite automatisch, sobald Änderungen am Code gemacht werden Funktioniert mit mehreren Browsern gleichzeitig

Demo Browser Sync

MVVM Frameworks UI-Logik wird in Model, View und View-Model eingeteilt View-Model und View werden synchronisiert (Data-Binding in zwei Richtungen) Data-Binding wird im HTML definiert AngularJS Google Single Page Application Framework: z.b. Data-Binding, Routing, Dependency Injection Dirty Cheking EmberJS Single Page Application Framework: z.b. Data-Binding, Routing Observables KnockoutJS Kein Single Page Application Framework: nur Data-Binding Observables

Beispiel KnockoutJS <input type="text" data-bind="value: message, valueupdate: 'keydown'" /> <button data-bind="click: send, enable: cansend">senden</button> function ViewModel() { this.message = ko.observable(''); this.send = function() { alert(this.message()); } this.cansend = ko.computed(function() { return this.message().length > 0; }.bind(this)); } ko.applybindings(new ViewModel(), document.body);

Beispiel AngularJS <main ng-controller="maincontroller as main"> <input type="text" ng-model="main.message" /> <button ng-disabled="main.isdisabled()" ng-click="main.send()">senden</button> </main> angular.module('myapp',[]).controller('maincontroller', MainController); function MainController() { this.message = ''; } MainController.prototype.send = function() { alert(this.message); } MainController.prototype.isDisabled = function() { return this.message === ''; }

ReactJS Facebook, kein Single Page Application Framework, kein MVVM Wie funktioniert ReactJS? Alles ist eine Komponente Jede Komponente kann in einer anderen wiederverwendet werden Jede Komponente hat eine render -Funktion Das Rendern funktioniert wie Server-seitiges HTML-Rendering (kein Two-Way Data-Binding) Komplette Bereiche einer Seite werden neu gerendert Ist das performant? Ja, da nicht direkt HTML gerendert wird, sondern ein virtuelles Document Object Model (Virtual DOM), dieses wird mit dem alten verglichen und nur die Unterschiede werden auf das echte DOM übernommen

Beispiel Virtual DOM Vorher: <ul> <li class="selected">walter White</li> <li>jesse Pinkman</li> <li>hank Shrader</li> </ul> Nachher: <ul> <li>walter White</li> <li class="selected">jesse Pinkman</li> <li>hank Shrader</li> <li>gustavo Fring</li> </ul> Änderungen: list.childnodes[0].classname = null; list.childnodes[1].classname = 'selected'; var item = document.createelement('li'); item.innertext = 'Gustavo Fring'; list.appendchild(item); DOM ist Flaschenhals bei der Performance, JavaScript selber ist mittlerweile sehr schnell!

Beispiel ReactJS var Counter = React.createClass({ getinitialstate: function() { return { count: 0 }; }, getdefaultprops: function() { return { step: 1 }; }, onclick: function() { this.setstate({ count: this.state.count + this.props.step }); }, render: function() { return React.DOM.button({onClick: this.onclick}, 'Count: ', this.state.count); } }); React.renderComponent(Counter({step: 3}), document.body);

JSX var Counter = React.createClass({ getinitialstate: function() { return { count: 0 }; }, getdefaultprops: function() { return { step: 1 }; }, onclick: function() { this.setstate({ count: this.state.count + this.props.step }); }, render: function() { return <button onclick={this.onclick}>count: {this.state.count}</button>; } }); React.renderComponent(<Counter step={3} />, document.body);

ReactJS Demo

Vorteile von ReactJS gegenüber MVVM Setzt auf schon existierende Konzepte aus JavaScript, statt auf UI-Logik in HTML z.b. $scope, ng-repeat in AngularJS oder foreach-binding in KnockoutJS es müssen keine neuen Konzepte gelernt werden leichtgewichtig Entwicklungsumgebungen müssen kein zusätzliches Tooling für das Framework bereitstellen So einfach wie Server-seitiges Rendern Funktioniert sehr gut mit anderen Frameworks zusammen Funktioniert mit älteren Browsern UI kann auch Server-seitig gerendert werden

TypeScript Microsoft / Anders Hejlsberg (C#) Skalierbare Entwicklung von JavaScript Anwendungen Erweitert JavaScript um optionale statische Typisierung Kompiliert nach JavaScript, Typisierung fällt einfach weg Jeder JavaScript-Code ist valider TypeScript-Code Erlaubt vorhandene JavaScript-Bibliotheken nachträglich zu typisieren Folgt ECMAScript 6 Standard Debugging / Unterstützung von Source Maps Open Source / Compiler in TypeScript geschrieben Visual Studio / WebStorm / SublimeText / Eclipse

TypeScript Demo GulpJS RequireJS / AMD ReactJS react-router RefluxJS TypeScript Visual Studio ASP.NET Web API

LMIS AG Neumarkt 1 49074 Osnabrück Tel.: +49 541 200 690-0 Fax: +49 541 200 690-499 E-Mail: info@lmis.de Web: www.lmis.de Handelsregister: Amtsgericht Osnabrück, HRB 19316, Ust.-Id.-Nr.: DE211909662 Vorstand: Axel van Lil, Marco Barenkamp (Vorsitzender)