17
Я.Субботник, СанктПетербург, 3 декабря 2011 года Разработчик интерфейсов Марат Абдуллин Хроники серверного Жаваскрипта Версия 2.0

Марат Абдуллин "Хроники серверного Жаваскрипта"

  • Upload
    yandex

  • View
    704

  • Download
    1

Embed Size (px)

DESCRIPTION

Марат Абдуллин "Хроники серверного Жаваскрипта" Я.Субботник в Санкт-Петербурге О докладе: Все еще используешь LAMP?! Прототипная парадигма объектно-ориентированного программирования! Наш SERP написан на PHP4! We put a function in your function, so you can call your function in a function call.

Citation preview

Page 1: Марат Абдуллин "Хроники серверного Жаваскрипта"

Я.Субботник,  Санкт-­‐Петербург,  3  декабря  2011  года

Разработчик  интерфейсовМарат  Абдуллин

Хроники  серверного  ЖаваскриптаВерсия  2.0

Page 2: Марат Абдуллин "Хроники серверного Жаваскрипта"

?????!!!??!1адинJavaScript

2

Page 3: Марат Абдуллин "Хроники серверного Жаваскрипта"

Все  еще  используешь  LAMP?!

3

Page 4: Марат Абдуллин "Хроники серверного Жаваскрипта"

Прототипная  парадигма  объектно-­‐ориентированного  программирования!

4

Page 5: Марат Абдуллин "Хроники серверного Жаваскрипта"

Наш  SERP*    написан  на  PHP4!

5

SERP  —  Search  Engine  Result  Page

Page 6: Марат Абдуллин "Хроники серверного Жаваскрипта"

Код  СЕРПа!Уникальная  возможность

6

Page 7: Марат Абдуллин "Хроники серверного Жаваскрипта"

We  put  a  func[on  in  your  func[on,  so  you  can  call  your  func[on  in  a  func[on  call.

7

Page 8: Марат Абдуллин "Хроники серверного Жаваскрипта"

Начинающий  тролль-­‐любитель

hoho@yandex-­‐team.ru

Марат  Абдуллин

Page 9: Марат Абдуллин "Хроники серверного Жаваскрипта"

Я.Субботник,  Санкт-­‐Петербург,  3  декабря  2011  года

Разработчик  интерфейсовМарат  Абдуллин

Server-­‐side  JavaScriptВерсия  3.0

Page 10: Марат Абдуллин "Хроники серверного Жаваскрипта"

JavaScript  не  стар,  но  и  не  юнИстория

10

— Появился  в  1995  году

— Стандартизован  в  1997  году

— Активно  развивается

Page 11: Марат Абдуллин "Хроники серверного Жаваскрипта"

Server-­‐side  JavaScript  есть  давноИстория

11

10gen (R)

Acre (R)Akshell (V8)

Alfresco (R)

Apache Sling (R)

APE (SM)AppengineJS (R)

AppJet (R)

Aptana Jaxer (SM)

ASP (*)

Axiom Stack (R)

Cocoon Flowscript (R)

CouchDB (SM)

DovetailDb (R)

Eclipse e4 (R)

EditMe (R)

Ejscript (*)

Erbix (R)

ESXX (R)

firecat (R)

GLUEscript (SM)

Google Apps Script (*)

GromJS (SM) Helma (R)

im-jssp (R)Jack (*)

JavaLikeScript (SM)jsext (SM)

jslibs (SM)

JSSP (R)

Juice (SM)

Junction (R)

jsdb (SM)

Livelink (SM)

mod js (SM)

Myna (R)

Narwhal (R)

Node.js (V8)

NOTEX (SM)

OpenMocha (R)

Opera (*)

Persevere (R)

Phobos (R)

POW (SM)

PyV8 (V8)

Rhino in Spring (R)

Rhinola (R)

RingoJS (R)

SSX (R)

SSJS (SM)

Torino (R) v8cgi (V8)Wakanda (*)

Webpop (R)

Whitebeam (SM)

wxJavaScript (SM)

Xpages (*)

Page 12: Марат Абдуллин "Хроники серверного Жаваскрипта"

Четыре  вариантаServer-­‐side  JavaScript  Engine

12

Я хочу SSJS

SpiderMonkey

V8

RhinoЧто-то свое

Page 13: Марат Абдуллин "Хроники серверного Жаваскрипта"

EmbeddingServer-­‐side  JavaScript  Engine

#include <v8.h>using namespace v8;int main(int argc, char* argv[]) { HandleScope handle_scope; Persistent<Context> context = Context::New(); Context::Scope context_scope(context);

Handle<String> source = String::New("'Hi' + ', World!'");

Handle<Script> script = Script::Compile(source); Handle<Value> result = script->Run(); context.Dispose(); String::AsciiValue ascii(result); printf("%s\n", *ascii); return 0;}

13

Page 14: Марат Абдуллин "Хроники серверного Жаваскрипта"

Node.JSServer-­‐side  JavaScript

14

— Модный  асинхронный  подход,  хорошо  сочетающийся  с  фронтэндами

— Очень  производительный  интерпретатор  внутри

— Большая  степень  распространенности  JavaScript-­‐а

— Активно  развивается

Page 15: Марат Абдуллин "Хроники серверного Жаваскрипта"

Пример  модуляNode.JS

#include <v8.h>#include <node.h>using namespace v8;using namespace node;Persistent<FunctionTemplate> constructor_template;Handle<Value> Yo(const Arguments& args) { HandleScope scope;

return String::New((char *)"Hi, World!");}void Init(Handle<Object> target) { HandleScope scope; Local<FunctionTemplate> t = FunctionTemplate::New(Yo); constructor_template = Persistent<FunctionTemplate>::New(t); t->InstanceTemplate()->SetInternalFieldCount(1); target->Set(String::NewSymbol("yo"), t->GetFunction());}extern "C" voidinit (Handle<Object> target) { HandleScope scope; Init(target);}

15

Page 16: Марат Абдуллин "Хроники серверного Жаваскрипта"

Что  используем  мыА  у  нас  в  квартире  —  газ

16

— SpiderMonkey  в  Почте  и  в  Xscript-­‐е

— Несколько  сервисов  на  Node.JS

— JavaScript-­‐шаблонизаторы  (xjst,  yate)

— Утилиты  сборки  и  не  только  (bem-­‐tools)

Page 17: Марат Абдуллин "Хроники серверного Жаваскрипта"

Разработчик  интерфейсов

hoho@yandex-­‐team.ru

Марат  Абдуллин