Code-Organisation in JavaScript



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

Georgienseite TYPO3 LTS7 Projekt Georgienseite TYPO3 LTS 7 responsiv Stand: Juni 2016

Ergebnisse. Umfrage Kurz-Statistiken Umfrage 'Feedback und Entertain 2.0'

Menü auf zwei Module verteilt (Joomla 3.4.0)

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

affilinet_ Flash-Spezifikationen

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

KILL PHOTOSHOP. Gestaltung im Browser mit Contao

Es gibt zahlreiche Web-Programmiersprachen: HTML, CSS, JavaScript, PHP, Perl, Python, HTTP, XML und viele weitere.

Gehen Sie Ihren Weg zielgenau! Existenzgründung Unternehmenskauf Nachfolge - Expansion Neuausrichtung

Was ist das Tekla Warehouse

Webseiten erstellen für Einsteiger

<script type="text/javascript"> <! <%= page(page.searchsuggestionsscript) %> // > </script>

HTML5 HOCKEYSTICK EXPANDABLE BANNER v1.0

Format Vorlagen für das DE Adressformat ab Magento

Dokumentation für Popup (lightbox)

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Gehen Sie Ihren Weg zielgenau!

Auswertung JAM! Fragebogen: Deine Meinung ist uns wichtig!

Entwicklung und Stärkung der persönlichen Kompetenzen!

Hilfe, ich verstehe meine APEX Seite nicht mehr! DOAG Development Konferenz, Düsseldorf

von: Oktay Arslan Kathrin Steiner Tamara Hänggi Marco Schweizer GIB-Liestal Mühlemattstrasse Liestal ATG

CartCalc FAQ (frequently asked questions) häufige Fragen zu CartCalc

Technisches Handbuch. Flash-Funktionen ADTECH IQ ADTECH GmbH

3-W-Event. Simplify! Ganzheitliche Gestaltungskonzepte neue Trends im Webdesign. Sabrina Schoenfelder Projektleitung, Beratung

Daten sammeln, darstellen, auswerten

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

Frontend-Entwicklung mit JavaScript

meinungsstudie. meinungs studie Nagelfolien online selbst gestalten: nail-designer.com.

Hallo! Social Media in der praktischen Anwendung Warum macht man was und vor allem: wie? Osnabrück, den 07. Juli 2014.

AutoCAD Dienstprogramm zur Lizenzübertragung

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln


Referenzen Frontend und PHP

Installationsanleitung jk-ma011-1-hotel

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

CSS-Grundlagen. Etwas über Browser. Kapitel. Die Vorbereitung

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert


2. Welche Tipp-Wettbewerbe können getippt werden?

Von Windows-Forms zu WPF mit Expression Blend? Thomas Müller conplement AG Nürnberg

Designänderungen mit CSS und jquery

Wärmebildkamera. Arbeitszeit: 15 Minuten

ejgp Webseite Kurzeinführung

JASSI Standard Tasks Version 1.5

Politische Bildung 2.0 Gesellschaftliche Beteiligung im Internet Herausforderungen für Bildungsinstitutionen

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Migration von statischen HTML Seiten

Checkliste. zur Gesprächsvorbereitung Mitarbeitergespräch. Aktivität / Frage Handlungsbedarf erledigt


Erfolg beginnt im Kopf

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

27. Oktober 2015 / Vertriebsteam (jz) - support@engadin.com - Tel. +41 (0) Anleitung: Optimiertes TBooking

Guideline. Integration von Google Analytics. in advertzoom

Sind Sie reif fürs ASSESSEMENT CENTER?

Pfötchenhoffung e.v. Tier Manager

Wie halte ich Ordnung auf meiner Festplatte?

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Erste Schritte in der Lernumgebung

LovelyBooks Autorenprogramm

Sehr geehrter Herr Pfarrer, sehr geehrte pastorale Mitarbeiterin, sehr geehrter pastoraler Mitarbeiter!

Wir bewegen Marken. Richtlinien von MRAID basierten InApp-HTML5-MobileAds innerhalb des SevenOne Media Portfolios. InApp HTML5

2 Open BIM Workflow ARCHICAD und DDS-CAD

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Internationales Altkatholisches Laienforum

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Mobiler Ratgeber. TILL.DE Google Partner Academy

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Multivariate Tests mit Google Analytics

Reporting Services und SharePoint 2010 Teil 1

Vorgestellt vom mexikanischen Rat für Fremdenverkehr

Wie bekomme ich eine Adresse. Eva Lackinger, Rene Morwind Margot Campbell

Stift-Karussell in M-Plot einrichten

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Herzlich Willkommen zu meinem Webinar!

Fragen Arthur Zaczek. Apr 2015

Die Zeitungsproduktion

Vorbereitung auf die Sino-GermanJob-Fair

Schüler-E-Tutorial für mobile Endgeräte. Ein Folgeprojekt des Netzwerks Informationskompetenz Berlin/Brandenburg mit der HdM

! " # $ " % & Nicki Wruck worldwidewruck

Was kann ich im Online-Portal alles tun?

Einführung Responsive Webdesign

GEONET Anleitung für Web-Autoren

Hinweise zum Datenschutz, Einwilligungs-Erklärung

Kennen, können, beherrschen lernen was gebraucht wird

AutoTexte und AutoKorrektur unter Outlook verwenden

Systemvoraussetzung < zurück weiter >

Bestandesaufnahme und Bedürfnisanalyse

Erfahrungen mit Hartz IV- Empfängern

Einführung in PHP. (mit Aufgaben)

Statuten in leichter Sprache

15 Social-Media-Richtlinien für Unternehmen!

Webseiten anlegen, verwalten, verändern. Alles im Browser. Am besten Firefox.

Seminar für Führungskräfte

Formulare, Broschüren, Flyer & Plakate, Anzeigen, Schilder, Videos, Werbeartikel Eventdesign: Logo, Flyer

Der transparente Look. Die Struktur, die oben angegeben wurde, ist im Anwendungsdesigner, wie in der nächsten Grafik ersichtlich, abgebildet.

CAD-Daten über TraceParts

Anmeldung zu unserem Affiliate-Programm bei Affilinet

Transkript:

Code-Organisation in JavaScript Webworker-Stammtisch NRW 10. Januar 2013 Frederic Hemberger

Codekapselung What happens in Vegas, stays in Vegas.

Warum sollte man Code kapseln? Wir haben immer mehr Scripte auf unseren Webseiten: JavaScript-Frameworks Plug-ins Banner, Adwords, Affiliate-Scripts Social Media Plug-ins Webtracking 3/24

Warum sollte man Code kapseln? Lass nicht überall dein Zeug rumliegen! Jaaa, Mama. //script1.js function dostuff(){ console.log("i do stuff");} //script2.js function dostuff(){ console.log("ha, I don't!");} dostuff(); 4/24

Codekapselung (function(){ //Mein Code })(); 5/24

Codekapselung Immediately Invoked Function Expression (IIFE) //Function ( function(){ //Mein Code })(); //Expression ( function(){ //Mein Code }(); ) // Unmittelbare Ausführung (function(){ //Mein Code }) () ; 6/24

Modularisierung

Codekapselung und Sichtbarkeit Definierte Variablen und Methoden nach außen sichtbar machen: (function(exports) { var privatevar = "foo"; var exports.publicvar = "bar"; exports.myfunction = function() { console.log("hello global namespace!"); } })(window); console.log(privatevar); // => ReferenceError: privatevar is not defined console.log(publicvar); // => "bar" myfunction(); // => "Hello global namespace!" 8/24

Codekapselung und Sichtbarkeit Warum exports? (function(exports){ exports.myfunction = function(){ console.log("helloglobalnamespace!"); } })( ); Der globale Namespace kann sich beliebig ändern: Browser: window Node.js: exports Applikation: z.b. myapp Der gekapselte Code selbst muss nicht mehr angepasst werden. Hinweis: "public" und "export" sind reservierte Wörter in JavaScript, daher "exports" 9/24

Module Pattern var myapp =(function(exports){ exports.myfunction = function(){ console.log("helloglobalnamespace!"); } return exports; })(myapp {}); Vorteile: Zentraler Namespace nach außen (myapp) Codekapselung und Sichtbarkeit (wie bei der IIFE) Code kann so über mehrere Dateien verteilt werden Addy Osmani: Learning JavaScript Design Patterns 10/24

Enge und lose Kopplung Wer bin ich, und wenn ja, wie viele?

Enge Kopplung modul2.jskann Methoden aus modul1.jsaufrufen: //modul2.js myapp.functionfrommodule1(); solange modul2.jsvon der Existenz von modul1.jsweiß und beide in der richtigen Reihenfolge eingebunden sind. <!--index.html--> <script src="modul1.js"></script> <script src="modul2.js"></script> HTML 12/24

Enge Kopplung Was bei enger Kopplung beachtet werden muss: Welches Modul verwendet welche anderen Module? In welcher Reihenfolge müssen die Module geladen werden? Was ist, wenn ich weitere Module hinzufügen möchte oder andere weglassen/austauschen? 13/24

Kommunikation über Events Publish-Subscribe-Prinzip (PubSub)

Kommunikation über Events Publish-Subscribe-Prinzip (PubSub) Kommunikation erfolgt asynchron über Events Funktioniert analog zu Events im DOM (z.b. click) Module müssen nicht voneinander wissen Module interagieren nicht direkt miteinander Einfach erweiterbar 15/24

Kommunikation über Events Publish-Subscribe-Prinzip (PubSub) $.subscribe('myevent', function(event, param1, param2){ console.log('mein Event wurde ausgelöst:',param1,param2); }); //Entspricht$(document).on( ) $.publish('myevent',['ersterwert','zweiterwert']); //Entspricht$(document).trigger( ) Beispiel mit jquery Tiny Pub/Sub : https://gist.github.com/661855 16/24

Beispiel Darstellung auf einer Shop-Seite //shoppingcart.js $.subscribe('quantity:change', function(event, article, quantity){ redrawshoppingcart(article,quantity); }); //article-overview.js $.subscribe('quantity:change', function(event, article, quantity){ checkfordiscount(article,quantity); }); //order-familypack.js $.publish('quantity:change',['product1',5]); 17/24

Abhängigkeiten definieren Modul-Standards in JavaScript

Abhängigkeiten definieren Modul-Standards in JavaScript CommonJS meist serverseitig (z.b. in Node.js): module = require('modulename'); Asyncronous Module Definition (AMD) clientseitig, z.b. mit Require.js (requirejs.org) künftig: native Unterstützung (ECMAScript 6) 19/24

AMD-Module mit Require.js Lädt Module per Ajax (Asyncronous Module Definition) Verwaltet die Abhängigkeiten untereinander Kann auch Modul-Assets laden (z.b. Templates, CSS) Kann Module für Produktivbetrieb kompilieren (Auflösung von Abhängigkeiten, Zusammenfassen & Minifizieren) 20/24

AMD-Module mit Require.js <!--index.html--> <script src="require.js" data-main="app.js"></script> HTML //app.js require(['lib/jquery','modul1'], function($, modul1){ $(function(){ modul1.myfunction(); } }); 21/24

AMD-Module mit Require.js Abhängigkeiten innerhalb von Modulen //modul1.js define(function(){ return{ myfunction: function(){ console.log('hello Require.js!'); } } }); define(['modul2','include/modul3'], function(module2, module3){ // }); 22/24

Deployment? Grunt. ;-)

<Thank You!> twitter @fhemberger www frederic-hemberger.de