JavaScript po stronie serwera. Od tropienia mitów do implementacji



Podobne dokumenty
JavaScript funkcyjność

Patryk Jar Meet.js, Gdańsk 11 marca 2013 r. MODULARNY JAVASCRIPT

Pogadanka o czymś, co niektórzy nazywają AJAX

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Tworzenie Stron Internetowych. odcinek 10

PROGRAMOWANIE W ŚRODOWISKU FLASH wykład 2

Inne podejścia obiektowe. Referat na seminarium magisterskie Zagadnienia Programowania Obiektowego Dymitr Pszenicyn

JavaScript - korzenie

Podstawy programowania w języku JavaScript

WebAii Automation Framework

JavaScript. Wstęp do podstaw elementów. dr inż. Paweł Boiński, Politechnika Poznańska

Node.js i TypeScript - jak zacz?

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Wstęp. Ale po co? Implementacja

Automatyzacja Testowania w WEB 2.0

Wykrywanie i analiza złośliwych stron WWW. Łukasz Juszczyk CERT Polska/NASK lukasz.juszczyk@cert.pl

Udostępnianie obrazu z kamer Sanyo HD na stronach WWW PORADNIK

TECHNOLOGIE SIECI WEB

Kurs WWW. Paweł Rajba.

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Zaawansowany kurs języka Python

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Google Web Toolkit Michał Węgorek ZPO 2009

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Programowanie RAD Delphi

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

DOM SAX AJAX. SAX,DOMiAJAX. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 11 kwietnia 2010

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

AJAX. Wykonał: Marcin Ziółkowski, AGH Kraków, AiR rok 5.

(Apache) CouchDB. Krzysztof Kulewski 2008

Języki skryptowe w programie Plans

Języki programowania wysokiego poziomu WWW

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Programowanie obiektowe

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Wprowadzenie. 1. Terminal WebRTC. LABORATORIUM 5: WebRTC komunikacja między terminalami.

Obiekt navigator. Dodał Administrator wtorek, 16 marzec :32

Programowanie Komponentowe WebAPI

Programowanie obiektowe

Oracle Application Express -

Wybrane działy Informatyki Stosowanej

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Techniki WWW. (HTML, CSS, JavaScript) Dr inż. Marcin Zieliński WYKŁAD 6. Środa 15:30-17:00 sala: A-1-04

WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

REACT NATIVE. Anna Maziejuk Kamil Jankowski

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

XML extensible Markup Language. część 5

Szkolenie wycofane z oferty. Programowanie w JavaScript (zawiera jquery)

Jak okiełznać frontend w Django? Piotr Maliński

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Java: interfejsy i klasy wewnętrzne

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Test przykładowy 2 PAI WSB Wrocław /06/2018

Wybrane działy Informatyki Stosowanej

Dokumentacja techniczna API systemu SimPay.pl

Python. Wprowadzenie. Jolanta Bachan

Wykorzystywanie parsera DOM w programach Java i PL/SQL

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Zaawansowane aplikacje WWW - laboratorium

KONFIGURACJA STACJI KLIENCKIEJ UMOŻLIWIAJĄCA KORZYSTANIE Z APLIKACJI ewniosek

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

1 Atrybuty i metody klasowe

Aplikacja internetowa vs Strona Internetowa. Aplikacja internetowa, (ang.) web application zwana również aplikacją webową, to program komputerowy,

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

OpenLaszlo. OpenLaszlo

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Zaawansowany kurs języka Python

Wybrane działy Informatyki Stosowanej

Laboratorium Programowania Kart Elektronicznych

Enterprise JavaBeans

JavaFX. Technologie Biznesu Elektronicznego. Wydział Informatyki i Zarządzania Politechnika Wrocławska

ipfon Web Services API wersja 1.0.3

Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0;

Paweł Rajba,

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Sieciowa komunikacja procesów - XDR i RPC

SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.

HTML 5 język wykorzystywany do tworzenia i prezentowania stron internetowych www. Jest

Technologie Informacyjne

Programowanie w Internecie

Podstawy programowania III WYKŁAD 6

Wywoływanie metod zdalnych

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Organizacja ucząca się Javascript - wprowadzenie

Redis, skrypty w języku Lua

Transkrypt:

JavaScript po stronie serwera Od tropienia mitów do implementacji

JavaScript po stronie serwera Od tropienia mitów do implementacji

Łyk historii Okres błędów i wypaczeń CommonJS Moduły Pakiety Implementacje I o co tyle zamieszania? I co dalej?

Łyk historii

1995: Brendan Eich creates JavaScript 1996: Microsoft creates JScript, and Netscape creates the Server-side JavaScript 1997: JavaScript s success result in a new standard: ECMAScript 1998: XML and DOM level 1 become W3C recommendations 1999: Microsoft creates XMLHttpRequest 2000: Macromedia implements a prototype object to its scripting language and calls it ActionScript 2001: Douglas Crockford creates JSON 2002: Douglas Crockford creates JSLint 2003: Adobe extends Acrobat with JavaScript 2004: E4X (ECMAScript for XML) is published by the W3C, and Tim O Reilly coins the term Web 2.0 2005: Sam Stephenson creates the Prototype JavaScript Framework, and Jesse James Garrett coins the term Ajax 2006: Joe Hewitt publishes Firebug 1.0, John Resig creates JQuery, and Alex Russell creates the term Comet 2007: Creation of the OpenAjax Hub and frst InteropFest 2008: Creation of ARIA: Accessible Rich Internet Application, to provide accessible Ajax 2009: ECMAScript Harmony becomes ECMAScript 5 2010: JavaScript 2.0 Źródło: http://en.wikipedia.org/wiki/javascript

Okres błędów i wypaczeń

1 var Browser = 2 { 3 IE:!!(window.attachEvent &&!window.opera), 4 Opera:!!window.opera, 5 WebKit: navigator.useragent.indexof('applewebkit/') > -1, 6 Gecko: navigator.useragent.indexof('gecko') > -1 &&navigator.useragent.indexof('khtml') == -1, 7 getname: function(){ 8 if (this.ie){ 9 return 'ie'; 10 } 11 if (this.opera) 12 { 13 return 'opera'; 14 } 15 if (this.webkit) 16 { 17 return 'webkit'; 18 } 19 if (this.gecko) 20 { 21 return 'ff'; 22 } 23 } 24 };

1 #ifndef _WIN32 2 #include <sys/times.h> 3 #include <sys/wait.h> 14 #ifdef _BSD 15 #include <sys/stat.h> 16 #if!defined( APPLE ) &&!defined( OpenBSD ) 17 #include <libutil.h> 18 #endif 19 #ifdef OpenBSD 20 #include <net/if.h> 21 #endif 22 #elif defined ( GLIBC ) && defined ( FreeBSD_kernel ) 23 #include <freebsd/stdlib.h> 24 #else 25 #ifndef sun 26 #include <linux/if.h> 27 #include <linux/if_tun.h> 28 #include <pty.h> 29 #include <malloc.h> 30 #include <linux/rtc.h>

Jeśli używają go Ci od HTML'a to nie może być poważny język Java dla inteligentnych inaczej czy dla opornych?

Bazuje na obiektach ale czasami jest funkcyjny? To jak w końcu obiektowy czy nie?

ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects within a host environment ECMAScript TC39, Page 1 ECMAScript is object-based: basic language and host facilities are provided by objects, and an ECMAScript program is a cluster of communicating objects ECMAScript TC39, Page 2

I do tego jeszcze te prototypy. I jak to się w końcu nazywa ECMAScript czy JavaScript?

ECMAScript vs. JavaScript

ECMAScript (ECMA-262) (http://www.ecmascript.org/) defnuje semantykę języka podstawowe typy danych String Boolean Number Object podstawowe obiekty Math Array W3C DOM (http://www.w3.org/dom/) Model dokumentu i zdarzeń Wsparcie dla XML ECMAScript for XML, ECMA-357 AJAX Microsoft XMLHTTP, kontrolka ActiveX wspierana od Internet Explorer 5 Mozilla (zaadaptowana przez inne przeglądarki), natywny XMLHttpRequest XMLHttpRequest W3C Working Draft 19 November 2009 (http://www.w3.org/tr/xmlhttprequest/) A co z pozostałymi zastosowaniami JavaScript?

Styczeń 2009: Kevin Dangoor na swoim blogu formuje grupę "ServerJS" Marzec 2009: po długiej dyskusji specyfkacja"securable modules" zostaje wybrana jako podstawa systemu modułów Kwiecień 2009: Pierwsze implementacje systemu modułów zostały zaprezentowane podczas pierwszej konferencji JSConf w Washington. Sierpień 2009: Zmiana nazwy na CommonJS aby lepiej oddać planowane szersze zastosowania specyfkacji.

W specyfkacji ECMAScript nie znajdziemy rozdziału o: systemie modułów Skrypty JavaScript muszą być zawierane w HTML, wstrzykiwane czy ręcznie pobierane. Językowi brakuje natywnych rozwiązań zarządzania modułami bibliotece standardowej. Mamy co prawda dostępne API dla przeglądarek czy też podstawowe operacje matematyczne,ale brakuje metod dostępu do systemu plików, operacji I/O czy też baz danych systemie zarządzania pakietami, który by automatycznie instalował potrzebne zależności

Moduły Binary Data Type Encodings I/O Streams Filesystem System Interface Unit Testing Sockets Event queue Worker Pakiety Web Server Gateway Interface

Moduły

1 exports.add = function(){ 2 var suma = 0; 3 var i; 4 for(i=0;i<arguments.length;i++){ 5 suma = suma+arguments[i]; 6 } 7 return suma; 8 }; 9 10 exports.silnia = function(n){ 11 if(n){ 12 return n * silnia(n-1); 13 } else{ 14 return 1; 15 } 16 };

var somemodule = require( some/sub/module );.paths.id.main.uri

1 var sys = require("system"); 2 var math = require("math"); 3 4 sys.print("6!="+math.silnia(6));

1 var print = require("system").print; 2 var silnia = require("math").silnia; 3 4 print("6!="+silnia(6));

Publiczne i prywatne elementy API 1 exports.publicmethod = function(i){ 2 return privatemethod(i++); 3 } 4 5 function privatemethod(i){ 6 return Math.pow(i,2); 7 }

Zmienne globalne modułu Każdy moduł ładowany jest tylko raz, co wymaga od implementacji zapewnienia wsparcia dla aplikacji wielowątkowych 1 exports.loadtimestamp = new Date();

Nadrzędne i relatywne ścieżki modułów 1 var toplevel = require("toplevel"); 2 var moduleb = require("../modulea/moduleb"); 3 var modulec = require("./submodulec");

Brak mechanizmu niejawnego importowania modułów 1 var modulea = require("modulea"); 2 var sys = require("system"); 3 4 sys.print(modulea.moduleb.circlearea(2));

Pakiety

Specyfkacja pakietów defniuje standaryzowany sposób dostarczania modułów CommonJS, podobnie jak: deb dla Debian gem dla Ruby egg dla Python Specyfkacja CommonJS/Package/1.0 package.json (deskryptor pakietu) struktura pakietu katalog pakietów

1 { 2 "name": "mypackage", 3 "version": "0.7.0", 4 "description": "Sample package for CommonJS., 5 "repositories": [ 6 { 7 "type": "git", 8 "url": "http://hg.example.com/mypackage.git" 9 } 10 ], 11 "dependencies": { 12 "webkit": "1.2", 13 "ssl": { 14 "gnutls": ["1.0", "2.0"], 15 "openssl": "0.9.8" 16 } 17 }, 18 "implements": ["cjs-module-0.3", "cjs-jsgi-0.1"], 19 "os": ["linux", "macos", "win"], 20 "cpu": ["x86", "ppc", "x86_64"], 21 "engines": ["v8", "ejs", "node", "rhino"], 22 "scripts": { 23 "install": "install.js", 24 "uninstall": "uninstall.js", 25 "build": "build.js", 26 "test": "test.js" 27 } 28 } 29

Układ plików i katalogów w pakiecie CommonJS -- README -- bin -- activate -> activate.bash -- activate.bash `-- sea -- doc -- lib -- narwhal.conf -- package.json `-- test

jsgi&jack narwhal

narwhal & jack

Are you ready?

Rhino (1.7.3PRE) Opera (10.50 alpha) V8 (Chrome 5.0.307.9 beta) SpiderMonkey (Firefox 3.5.8) SpiderMonkey (1.7.0) 0 50 100 150 200 250 300 350 400

Java (1.6.0_16) Ruby (1.8.7) Python (2.6.4) Rhino (1.7.3PRE) Opera (10.50 alpha) V8 (Chrome 5.0.307.9 beta) SpiderMonkey (Firefox 3.5.8) SpiderMonkey (1.7.0) 0 500 1000 1500 2000 2500 3000

ECMAScript 5

Obiekty i własności Zapobieganiu rozszerzaniu obiektów Object.preventExtensions( obj ) Object.isExtensible( obj ) Deskryptory własności Value Zawiera wartość własności Get Funkcja wywoływana podczas dostępu do wartości Set Funkcja wywoływana podczas zmiany wartości Writable Jeśli false, wartość nie może być zmieniona Configurable Jeśli false, usunięcie własności lub zmiana atrybutów nie powiedzie się Enumerable Jeśli true, własność będzie widoczna podczas for (var prop in obj){}

W strict mode niemożliwe będzie Przypisanie wartości do niezadeklarowanej zmiennej Defniowanie zmiennych wewnątrz eval() Nadpisanie arguments wewnątrz funkcji Użycie with(){} (błąd składni) JSON JSON.stringify JSON.parse Date Ability to parse and output ISO-formatted dates Array Array.isArray

Kilka słów od Ojca Prowadzącego na koniec