Шаблонизация основанная на работе с DOM становится трендом: React, Ractive, Basis.js уже используют этот подход, другие идут в эту сторону. Главным преимуществом подхода считается скорость, но оно далеко не единственное!
В докладе немного рассказано о возможностях, что дает DOM подход.
С ростом кодовой базы становится все более очевидной необходимость использования компонентного подхода, когда каждая логическая часть обособлена. Если говорить про JavaScript, то в нем есть области видимости, опираясь на которые можно соорудить изолированные компоненты. Но в CSS нет подобных механизмов, поэтому и придумываются Shadow DOM (Web Components) и различные методики вроде БЭМ.
Но что если взглянуть на проблему под другим углом? Адаптируя подходы, что уже используются для других задач, можно получить куда больше выгоды, чем просто изолированные стили!
FrontendConf, Москва, 21 мая 2015
WSD, Санкт-Петербург, 20 июня 2015
Запись трансляции: https://youtu.be/V7bnSOwuO4M?t=1h31m33s
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
Совместно с университетом ИТМО мы запустили курс, посвященный основам HTML и CSS. Уже на момент регистрации на этот курс записалось более 12 тысяч студентов. Перед нами стояла задача разработать систему, которая будет автоматически проверять итоговые проекты на соответствие заранее подготовленному макету. В качестве основной техники для проверки было выбрано регрессионное тестирование.
В каждом проекте мы проверяли разметку, сетку и стилевое оформление не только страницы целиком, но и отдельных блоков. Одной из главных проблем был поиск этих самых блоков, так как о том, какой будет верстка студентов, мы не знали ничего — ни какие теги они использовали, ни какие классы и идентификаторы были задействованы. Имели только общее представление о структуре.
В докладе я расскажу, от чего мы отталкивались при построении этой системы, как мы разбирали и анализировали проекты. Какие инструменты и технологии мы для этого использовали и почему. Какие подводные камни вылезали, и какие возникали проблемы.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
Примеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)AvitoTech
Basis.js - это мощный фреймворк для создания полноценных SPA приложений. Он давно и активно используется в production, в том числе и в Avito. Цель доклада - рассказать об основных возможностях фреймворка и побудить слушателей попробовать данный фреймворк при создании SPA-приложений.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
Опенсорсный JavaScript-фреймворк с нестандартными подходами, ориентированный на разработку одностраничных приложений. Обновление шаблонов и стилей без перезагрузки страницы, развитые механизмы работы с данными, высокая производительность, инструменты разработчика и многое другое.
Доклад с конференции WSD, Санкт-Петербург, 8 июня 2013
Видео: http://www.youtube.com/watch?v=cVbbkwkhNQg
Шаблонизация основанная на работе с DOM становится трендом: React, Ractive, Basis.js уже используют этот подход, другие идут в эту сторону. Главным преимуществом подхода считается скорость, но оно далеко не единственное!
В докладе немного рассказано о возможностях, что дает DOM подход.
С ростом кодовой базы становится все более очевидной необходимость использования компонентного подхода, когда каждая логическая часть обособлена. Если говорить про JavaScript, то в нем есть области видимости, опираясь на которые можно соорудить изолированные компоненты. Но в CSS нет подобных механизмов, поэтому и придумываются Shadow DOM (Web Components) и различные методики вроде БЭМ.
Но что если взглянуть на проблему под другим углом? Адаптируя подходы, что уже используются для других задач, можно получить куда больше выгоды, чем просто изолированные стили!
FrontendConf, Москва, 21 мая 2015
WSD, Санкт-Петербург, 20 июня 2015
Запись трансляции: https://youtu.be/V7bnSOwuO4M?t=1h31m33s
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
Совместно с университетом ИТМО мы запустили курс, посвященный основам HTML и CSS. Уже на момент регистрации на этот курс записалось более 12 тысяч студентов. Перед нами стояла задача разработать систему, которая будет автоматически проверять итоговые проекты на соответствие заранее подготовленному макету. В качестве основной техники для проверки было выбрано регрессионное тестирование.
В каждом проекте мы проверяли разметку, сетку и стилевое оформление не только страницы целиком, но и отдельных блоков. Одной из главных проблем был поиск этих самых блоков, так как о том, какой будет верстка студентов, мы не знали ничего — ни какие теги они использовали, ни какие классы и идентификаторы были задействованы. Имели только общее представление о структуре.
В докладе я расскажу, от чего мы отталкивались при построении этой системы, как мы разбирали и анализировали проекты. Какие инструменты и технологии мы для этого использовали и почему. Какие подводные камни вылезали, и какие возникали проблемы.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
Примеры кода приложений и конфигурации сервера с доступом к файлам, памяти, базам данных и параллельной асинхронной обработкой различных типов API запросов с состоянием и без состояния.
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)AvitoTech
Basis.js - это мощный фреймворк для создания полноценных SPA приложений. Он давно и активно используется в production, в том числе и в Avito. Цель доклада - рассказать об основных возможностях фреймворка и побудить слушателей попробовать данный фреймворк при создании SPA-приложений.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
Опенсорсный JavaScript-фреймворк с нестандартными подходами, ориентированный на разработку одностраничных приложений. Обновление шаблонов и стилей без перезагрузки страницы, развитые механизмы работы с данными, высокая производительность, инструменты разработчика и многое другое.
Доклад с конференции WSD, Санкт-Петербург, 8 июня 2013
Видео: http://www.youtube.com/watch?v=cVbbkwkhNQg
Everything you wanted to know about writing async, high-concurrency HTTP apps...JavaDayUA
With tens of millions of clients continuously downloading binaries from our repositories, we decided to offer an OSS client that natively supports these downloads. In this talk, we will share the main challenges in developing a highly-concurrent, resumable, async download library on top of Apache HTTP client. We will cover other libraries we tested and why we decided to reinvent the wheel. We will see important pitfalls we came across when working with HTTP and how using the right combination of techniques can improve performance by an order of magnitude. We will also see why your initial assumptions may completely change when faced with other players on the network. Consider yourself forewarned: lots of HTTP internals, NIO and concurrency ahead!
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Я.Субботник в Челябинске в рамках конференции UWDC
О докладе:
Все, что вы хотели узнать про одностраничное ajax-приложение Яндекс.Почта, но боялись спросить. Изнанка фронтенда, загрузка данных, обновление страниц и взаимодействие с пользователями без регистрации, без смс. Бонус-трек: как работают сторонние приложения в рамках одной платформы.
1. Темы лекции: Ajax и работа с HTTP протоколами.
Практическое задание: Ajax и работа с HTTP протоколами.
Тренер: Игорь Шкулипа, к.т.н.
JavaScript. Базовый курс
Занятие 8
2. http://www.slideshare.net/IgorShkulipa 2
Ajax
Ajax расшифровывается как Asynchronous Javascript And XML
(Асинхронные Javascript И XML) и технологией в строгом смысле слова
не является. Это просто аббревиатура, обозначающая подход к
созданию веб-приложений с помощью следующих технологий:
• стандартизированное представление силами XHTML и CSS;
• динамическое отображение и взаимодействие с пользователем с
помощью DOM;
• обмен и обработка данных в виде XML и JSON;
• JavaScript;
• асинхронные запросы с помощью объекта XMLHttpRequest.
Если в стандартном веб-приложении обработкой всей информации
занимается сервер, тогда как браузер отвечает только за
взаимодействие с пользователем, передачу запросов и вывод
поступившего HTML, то в Ajax-приложении между пользователем и
сервером появляется еще один посредник - движок Ajax. Он
определяет, какие запросы можно обработать "на месте", а за какими
необходимо обращаться на сервер.
4. http://www.slideshare.net/IgorShkulipa 4
Что можно сделать с помощью Ajax
• Небольшие элементы управления
В первую очередь AJAX полезен для небольших элементов, связанных
с элементарными действиями: добавить в корзину, подписаться, и
т.п.
• Динамическая подгрузка данных с сервера.
Например, дерево, узлы которого подгружаются по мере раскрытия.
• Незаметные для пользователя действия.
Например, при редактировании статьи - каждые 10 минут результаты
автосохраняются на сервере.
• Непрерывная подзагрузка информации с сервера.
Самый типичный пример - чат. В окошко постоянно поступают все
новые сообщения, непрерывно подгружаемые с сервера. И, опять
же, через AJAX, без перезагрузки страницы, пользователь может
отсылать сообщения на сервер.
5. http://www.slideshare.net/IgorShkulipa 5
Объект XMLHttpRequest
Объект XMLHttpRequest (или, сокращенно, XHR) дает возможность
браузеру делать HTTP-запросы к серверу без перезагрузки страницы.
Несмотря на слово XML в названии, XMLHttpRequest может работать с
данными в любом текстовом формате, и даже c бинарными данными.
6. http://www.slideshare.net/IgorShkulipa 6
Основные методы
Основные методы для посылки запросов XMLHttpRequest:
• метод open(Method, Url, async);
• метод send(data);
• событие onreadystatechange;
Обычная последовательность вызова – это:
• Открыть соединение (open)
• Описать обработчик onreadystatechange
• Отправить запрос (send)
7. http://www.slideshare.net/IgorShkulipa 7
Методы open, send и abort
• open(method, URL, async, user, password) задаёт основные параметры запроса:
• method — HTTP-метод. Как правило, используется GET либо POST, хотя
доступны и более экзотические, вроде TRACE/DELETE/PUT и т.п.
• URL — адрес запроса. Можно использовать не только HTTP/HTTPS, но и
другие протоколы, например ftp:// и file://. При этом есть ограничения
безопасности, называемые «Same Origin Policy»: запрос со страницы можно
отправлять только на тот же протокол://домен:порт, с которого она пришла.
• async — если установлено в false, то запрос производится синхронно,
если true — асинхронно.
• user, password — логин и пароль для HTTP-авторизации.
Обязательны только первые два аргумента. Метод open сам по себе не открывает
соединение, а только инициализирует соединение.
• send(body) отправляет запрос на сервер. В body находится тело запроса. Не у
всякого запроса есть тело, например у GET-запросов тела нет, в таком случае
передаётся null или пустая строка. С другой стороны, в POST основные данные
как раз передаются через body.
• abort() - прерывает выполнение запроса.
9. http://www.slideshare.net/IgorShkulipa 9
Событие readystatechange
Событие readystatechange происходит несколько раз в процессе
отсылки и получения ответа.
При этом можно посмотреть «текущее состояние запроса» в свойстве
readyState, которое принимает значения от 0 до 4:
• UNSENT = 0; - начальное состояние
• OPENED = 1; - вызван open
• HEADERS_RECEIVED = 2; - получены заголовки
• LOADING = 3; - загружается тело
• DONE = 4; - запрос завершён
Надёжно и кросс-браузерно работает только последнее состояние: 4 -
запрос завершён.
Типичная проверка конца запроса:
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return; // запрос ещё не завершён
// .. обработать завершение запроса, проверить ошибки
}
10. http://www.slideshare.net/IgorShkulipa 10
Свойства status и statusText
Эти свойства содержат HTTP-статус ответа и его описание, например:
• status - statusText
• 200 - OK
• 404 - Not Found
• 500 - Internal Server Error
Когда ошибка не связана с кодом ответа сервера (например, не удалось
соединение), свойство status равно нулю, а в statusText — пустая
строка.
11. http://www.slideshare.net/IgorShkulipa 11
Свойства responseText и responseXML
После завершения запроса становится доступно свойство responseText,
которое содержит текст ответа сервера. В современных браузерах оно
доступно даже при неоконченном запросе и содержит текст,
полученный к текущему моменту.
Если сервер прислал ответ с Content-Type: text/xml, то браузер
превращает его в полноценный документ и записывает в
responseXML.
Если его нет, то браузер не станет обрабатывать ответ как XML, и
свойство responseXML будет пустым.
12. http://www.slideshare.net/IgorShkulipa 12
Заголовки
Для работы с заголовками есть 3 метода:
• setRequestHeader(name, value) устанавливает заголовок name
запроса со значением value. Если заголовок с таким name уже есть —
он заменяется.
xhr.setRequestHeader('Content-Type', 'text/xml');
• getResponseHeader(name) возвращает значение заголовка ответа
name.
xhr.getResponseHeader('Content-Type') == 'text/plain'
• getAllResponseHeaders() возвращает все заголовки ответа.
Заголовки возвращаются в виде единой строки, например:
Cache-Control: max-age=31536000
Content-Length: 4260
Content-Type: image/png
Date: Sat, 08 Sep 2012 16:53:16 GMT
14. http://www.slideshare.net/IgorShkulipa 14
Другие события
• onerror - Ошибка при выполнении запроса.
• onload - Запрос успешно завершён.
• onprogress - Браузер получил очередной пакет данных. Можно
прочитать текущие полученные данные в responseText.
• onabort - Запрос отменён вызовом abort().
• onloadstart - Запрос начат.
• onloadend - Запрос окончен, возможно с ошибкой.