SlideShare a Scribd company logo
1 of 48
Download to read offline
Что интересного
нам готовит W3C
Сергей Константинов
Web Standards Days, 7 декабря 2013
Обо мне

– В Яндексе с 2008 года
– Руковожу разработкой
API Яндекс.Карт
– С июля 2013 года являюсь
участником Технической
архитектурной группы W3C
www.w3.org/2001/tag/
– @blogovodoved
В последние годы
появилось много разных
стандартов
Но ядро JavaScript ECMAScript
практически не затронуто
В 2014 всё изменится*
* Если успеем, конечно
Тема дня

– Promises
– Modules
– Service Workers
– @@create
Promises
Promises

Promises (aka Futures) в вебе уже давно
На всякий случай, напомню:
someOperation.then(
successCallback,
errorCalback
);

8
Promises

Существует несколько стандартов Promises:
A, A+, B, KISS, C, D, …
И множество реалиазаций:
Q, jQuery Deferred, Vow, …
(см. http://wiki.commonjs.org/wiki/Promises)

9
Promises

Черновик стандарта DOM Level 4 включает в
себя Promises как примитив языка:
http://dom.spec.whatwg.org/#promises
https://github.com/domenic/promises-unwrapping/blob/master/README.md

10
Promise with resolver

В отличие от большинства существующих
реализаций, в DOM Promises функции
подтверждения и отклонения промиса
отделены от самого промиса и сам промис
неизменяем.

11
Promise with resolver

Vow:
function asyncOperation () {
var p = vow.promise();
…
return p;
}
…
asyncOperation().fulfill('some value');

12
Promise with resolver
Теперь будет так:
function asyncOperation () {
var p = new Promise(
function (resolve, reject) {
…
resolve('some value');
…
});
return p;
}
13
Promises
Используйте промисы для:
– возврата статуса асинхронной операции
file.open('path').then(
function (handle) {
// do something valueable
},
function (error) {
// handle error
}
);
14
Promises

Не используйте промисы для:
– передачи больших объёмов данных,
– как замену событиям.

15
Модули
Модули

Долгое время в JavaScript/ECMAScript не
было никакой модульности.
Это привело к бардаку в global и десяткам
имплементаций (псевдо)модульных систем.
http://wiki.ecmascript.org/doku.php?id=harmony:modules

17
Модули

Теперь вы можете объявлять модули:
module 'math' {
export function sum(x, y) {
return x + y;
}
export var pi = 3.141593;
}

18
Модули

… импортировать модули:
import foo from "foo";
import {sum, pi} from 'math';
import "fs" as fs;
import { draw as drawShape } from 'shape';
import { draw as drawGun } from 'cowboy';
module YUI from 'http://developer.yahoo.com/
modules/yui3.js';

19
Конвейер компиляции модулей

– normalize
– resolve
– fetch
– translate
– link

20
Этап resolve

Вы можете задавать свои правила резолва
имён модулей:
System.ondemand({
"https://yandex.st/jquery/2.4/jquery.module.js": "jquery",
"backbone.js": ["backbone/events", "backbone/model"]
});

21
Этап translate
Вы можете совершать операции над кодом
модуля до его исполнения.
Например, проверить jshint-ом:
import { JSHINT } from "jshint";
import { options } from "app/jshintrc";
System.translate = function (source, options) {
var errors = JSHINT(source, options),
messages = [options.actualAddress];
if (errors) {
throw new SyntaxError(errors);
}
return source;
};
22
Этап translate
Вы можете совершать операции над кодом
модуля до его исполнения.
Например, транслировать CoffeeScript
System.translate = function (source, options) {
if (!options.path.match(/.coffee$/)) {
return;
}
return CoffeeScript.translate(source);
};
23
Этап link

Можно контролировать, что попадёт в модуль
в качестве global, и можно выбрать, что
экспортировать из модуля.
https://gist.github.com/wycats/51c96e3adcdb3a68cbc3

24
Конвейер компиляции модулей

В итоге, мы можем:
– писать и использовать модули;
– написать хук для текущих реализаций
модулей (requirejs, amd);
– написать вообще свой кастомный Loader и/
или отнаследоваться от системного.

25
Конвейер компиляции модулей

Мы не можем из коробки:
– грузить код on demand L

26
Service Workers
(nee Navigation
Controllers)
Service Workers – что это?

– Это возможность для определённого
набора URL домена установить "контроллер",
который будет обрабатывать все запросы с
открытых браузером страниц, матчащихся на
этот набор URL-ов
https://github.com/slightlyoff/ServiceWorker/blob/master/explainer.md

28
Service Worker

Инсталлируем:
navigator.registerServiceWorker(
"/*", "/v1/ctrl.js"
).then(function (serviceWorker) {
console.log("success!");
// Чтобы использовать Service Worker сразу,
// можно выполнить window.location.reload()
});

29
Service Worker – зачем?
Service Worker умеет:
– перехватывать запросы за сетевыми
ресурсами и отвечать на них
this.addEventListener("fetch", callback);

– кэшировать ресурсы
var resources = new Cache(
base + "/assets/v1/base.css"
);

– редиректить запросы
– версионироваться.
30
Service Worker – зачем?
Service Worker имеет доступ:
– ко всем открытым в браузере страницам, на
которые матчится
this.windows.forEach(function (w) {
…
});

– ко всем разедляемым ресурсам:
WebStorage, IndexedDB, cookies, …
31
Service Worker – зачем?

Service Worker научится (?):
– получать push уведомления;
– открывать новые страницы.

32
Магический символ
@@create
Наследование в JS

Как выглядит наследование в JS?
function ChildClass () {
ParentClass.call(this);
}
ChildClass.prototype = new ParentClass();
// На самом деле не так, обычно делают магию
// чтобы не вызывать конструктор ParentClass

34
Наследование в JS

Что происходит при вызове new ChildClass()?
– создаётся пустой объект,
– записывается скрытая ссылка на
ChildClass.prototype, если он есть,
– передаётся в качестве this в функциюконструктор.

35
Наследование в JS

Но этот метод не работает, если в this
должен быть не Object, а другой примитив
языка, например, Array, Date, RegExp, …
// Так не работает
function ChildArray () {
Array.call(this);
}
ChildArray.prototype = new Array();

36
Наследование в JS
Разрешение наследоваться от встроенных
объектов приводит к неразрешимым
противоречиям.
function ChildArray () {
Array.call(this);
Date.call(this);
this.length = 100500;
// И что мы получим в итоге? о_О
}

37
Наследование в JS

К тому же, в большинстве случаев
внутренняя логика встроенных типов
реализованы на C++ из соображений
производительности.

38
Наследование в JS

Решение: отделить создание объекта
(allocation) от его инициализации
(initialization).
Функция-конструктор инициализирует
созданный объект, а вот само создание
спрятано за другой функцией.

39
Наследование в JS
Функция-аллокатор прячется за специальным
символом @@create ("эт-эт-криэйт", ага).
// именно так, без кавычек
// возвращает инстанцию объекта
// для передачи в инициализирующий конструктор
Function[@@create]()

@@create – не единственный специальный
символ, есть ещё несколько полезных штук.
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-language-types-symbol-type

40
Наследование в JS
new ChildClass() теперь эквивалентен вот
такой конструкции:
ChildClass.call(
typeof ChildClass[@@create] != 'undefined' ?
ChildClass[@@create]() :
// Это некоторое упрощение ;)
ObjectCreate(ChildClass.prototype)
);
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-construct-argumentslist

41
Наследование в JS

Обещают поддержку наследования от:
– стандартных типов Array, Date, RegExp;
– TypedArray;
– новых ES6-типов Set, WeakSet, Map,
WeakMap;
– и даже HTMLElement!

42
Наследование в JS

Вот так:
function ChildClass () {
Array.call(this);
}
ChildClass[@@create] = Array[@@create];
ChildClass.prototype = new Array();

43
Главный вопрос:
– Когда?
Обещают весной
Обещают весной
(год не уточняют)
Обещают весной
(год не уточняют)
(но хотя бы при нашей жизни)
Сергей Константинов
Руководитель группы
разработки API Карт
W3C TAG Member

twirl@yandex-team.ru

Спасибо!

More Related Content

What's hot

ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKitNoveo
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Empatika
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 

What's hot (20)

Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Foxdevs
FoxdevsFoxdevs
Foxdevs
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 

Similar to Сергей Константинов — Что интересного готовит нам W3C

WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловGeeksLab Odessa
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest
 
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013Dmytro Zharii
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Yandex
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 

Similar to Сергей Константинов — Что интересного готовит нам W3C (20)

JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
Gwt jug basic
Gwt jug basicGwt jug basic
Gwt jug basic
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
 
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013За пределами Page Object. ATDays 2013 Киев. Февраль 2013
За пределами Page Object. ATDays 2013 Киев. Февраль 2013
 
За пределами PageObject
За пределами PageObjectЗа пределами PageObject
За пределами PageObject
 
Javascript
JavascriptJavascript
Javascript
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Сергей Константинов — Что интересного готовит нам W3C

  • 1. Что интересного нам готовит W3C Сергей Константинов Web Standards Days, 7 декабря 2013
  • 2. Обо мне – В Яндексе с 2008 года – Руковожу разработкой API Яндекс.Карт – С июля 2013 года являюсь участником Технической архитектурной группы W3C www.w3.org/2001/tag/ – @blogovodoved
  • 3. В последние годы появилось много разных стандартов
  • 4. Но ядро JavaScript ECMAScript практически не затронуто
  • 5. В 2014 всё изменится* * Если успеем, конечно
  • 6. Тема дня – Promises – Modules – Service Workers – @@create
  • 8. Promises Promises (aka Futures) в вебе уже давно На всякий случай, напомню: someOperation.then( successCallback, errorCalback ); 8
  • 9. Promises Существует несколько стандартов Promises: A, A+, B, KISS, C, D, … И множество реалиазаций: Q, jQuery Deferred, Vow, … (см. http://wiki.commonjs.org/wiki/Promises) 9
  • 10. Promises Черновик стандарта DOM Level 4 включает в себя Promises как примитив языка: http://dom.spec.whatwg.org/#promises https://github.com/domenic/promises-unwrapping/blob/master/README.md 10
  • 11. Promise with resolver В отличие от большинства существующих реализаций, в DOM Promises функции подтверждения и отклонения промиса отделены от самого промиса и сам промис неизменяем. 11
  • 12. Promise with resolver Vow: function asyncOperation () { var p = vow.promise(); … return p; } … asyncOperation().fulfill('some value'); 12
  • 13. Promise with resolver Теперь будет так: function asyncOperation () { var p = new Promise( function (resolve, reject) { … resolve('some value'); … }); return p; } 13
  • 14. Promises Используйте промисы для: – возврата статуса асинхронной операции file.open('path').then( function (handle) { // do something valueable }, function (error) { // handle error } ); 14
  • 15. Promises Не используйте промисы для: – передачи больших объёмов данных, – как замену событиям. 15
  • 17. Модули Долгое время в JavaScript/ECMAScript не было никакой модульности. Это привело к бардаку в global и десяткам имплементаций (псевдо)модульных систем. http://wiki.ecmascript.org/doku.php?id=harmony:modules 17
  • 18. Модули Теперь вы можете объявлять модули: module 'math' { export function sum(x, y) { return x + y; } export var pi = 3.141593; } 18
  • 19. Модули … импортировать модули: import foo from "foo"; import {sum, pi} from 'math'; import "fs" as fs; import { draw as drawShape } from 'shape'; import { draw as drawGun } from 'cowboy'; module YUI from 'http://developer.yahoo.com/ modules/yui3.js'; 19
  • 20. Конвейер компиляции модулей – normalize – resolve – fetch – translate – link 20
  • 21. Этап resolve Вы можете задавать свои правила резолва имён модулей: System.ondemand({ "https://yandex.st/jquery/2.4/jquery.module.js": "jquery", "backbone.js": ["backbone/events", "backbone/model"] }); 21
  • 22. Этап translate Вы можете совершать операции над кодом модуля до его исполнения. Например, проверить jshint-ом: import { JSHINT } from "jshint"; import { options } from "app/jshintrc"; System.translate = function (source, options) { var errors = JSHINT(source, options), messages = [options.actualAddress]; if (errors) { throw new SyntaxError(errors); } return source; }; 22
  • 23. Этап translate Вы можете совершать операции над кодом модуля до его исполнения. Например, транслировать CoffeeScript System.translate = function (source, options) { if (!options.path.match(/.coffee$/)) { return; } return CoffeeScript.translate(source); }; 23
  • 24. Этап link Можно контролировать, что попадёт в модуль в качестве global, и можно выбрать, что экспортировать из модуля. https://gist.github.com/wycats/51c96e3adcdb3a68cbc3 24
  • 25. Конвейер компиляции модулей В итоге, мы можем: – писать и использовать модули; – написать хук для текущих реализаций модулей (requirejs, amd); – написать вообще свой кастомный Loader и/ или отнаследоваться от системного. 25
  • 26. Конвейер компиляции модулей Мы не можем из коробки: – грузить код on demand L 26
  • 28. Service Workers – что это? – Это возможность для определённого набора URL домена установить "контроллер", который будет обрабатывать все запросы с открытых браузером страниц, матчащихся на этот набор URL-ов https://github.com/slightlyoff/ServiceWorker/blob/master/explainer.md 28
  • 29. Service Worker Инсталлируем: navigator.registerServiceWorker( "/*", "/v1/ctrl.js" ).then(function (serviceWorker) { console.log("success!"); // Чтобы использовать Service Worker сразу, // можно выполнить window.location.reload() }); 29
  • 30. Service Worker – зачем? Service Worker умеет: – перехватывать запросы за сетевыми ресурсами и отвечать на них this.addEventListener("fetch", callback); – кэшировать ресурсы var resources = new Cache( base + "/assets/v1/base.css" ); – редиректить запросы – версионироваться. 30
  • 31. Service Worker – зачем? Service Worker имеет доступ: – ко всем открытым в браузере страницам, на которые матчится this.windows.forEach(function (w) { … }); – ко всем разедляемым ресурсам: WebStorage, IndexedDB, cookies, … 31
  • 32. Service Worker – зачем? Service Worker научится (?): – получать push уведомления; – открывать новые страницы. 32
  • 34. Наследование в JS Как выглядит наследование в JS? function ChildClass () { ParentClass.call(this); } ChildClass.prototype = new ParentClass(); // На самом деле не так, обычно делают магию // чтобы не вызывать конструктор ParentClass 34
  • 35. Наследование в JS Что происходит при вызове new ChildClass()? – создаётся пустой объект, – записывается скрытая ссылка на ChildClass.prototype, если он есть, – передаётся в качестве this в функциюконструктор. 35
  • 36. Наследование в JS Но этот метод не работает, если в this должен быть не Object, а другой примитив языка, например, Array, Date, RegExp, … // Так не работает function ChildArray () { Array.call(this); } ChildArray.prototype = new Array(); 36
  • 37. Наследование в JS Разрешение наследоваться от встроенных объектов приводит к неразрешимым противоречиям. function ChildArray () { Array.call(this); Date.call(this); this.length = 100500; // И что мы получим в итоге? о_О } 37
  • 38. Наследование в JS К тому же, в большинстве случаев внутренняя логика встроенных типов реализованы на C++ из соображений производительности. 38
  • 39. Наследование в JS Решение: отделить создание объекта (allocation) от его инициализации (initialization). Функция-конструктор инициализирует созданный объект, а вот само создание спрятано за другой функцией. 39
  • 40. Наследование в JS Функция-аллокатор прячется за специальным символом @@create ("эт-эт-криэйт", ага). // именно так, без кавычек // возвращает инстанцию объекта // для передачи в инициализирующий конструктор Function[@@create]() @@create – не единственный специальный символ, есть ещё несколько полезных штук. http://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-language-types-symbol-type 40
  • 41. Наследование в JS new ChildClass() теперь эквивалентен вот такой конструкции: ChildClass.call( typeof ChildClass[@@create] != 'undefined' ? ChildClass[@@create]() : // Это некоторое упрощение ;) ObjectCreate(ChildClass.prototype) ); http://people.mozilla.org/~jorendorff/es6-draft.html#sec-construct-argumentslist 41
  • 42. Наследование в JS Обещают поддержку наследования от: – стандартных типов Array, Date, RegExp; – TypedArray; – новых ES6-типов Set, WeakSet, Map, WeakMap; – и даже HTMLElement! 42
  • 43. Наследование в JS Вот так: function ChildClass () { Array.call(this); } ChildClass[@@create] = Array[@@create]; ChildClass.prototype = new Array(); 43
  • 47. Обещают весной (год не уточняют) (но хотя бы при нашей жизни)
  • 48. Сергей Константинов Руководитель группы разработки API Карт W3C TAG Member twirl@yandex-team.ru Спасибо!