Михаил Трошев "ajax в поиске по вебу"

49
Я.Субботник, Минск, 2 июня 2012 года Разработчик интерфейсов Михаил Трошев AJAX в поиске по вебу

Upload: yandex

Post on 11-Jul-2015

630 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Михаил Трошев "AJAX в поиске по вебу"

Я.Субботник, Минск, 2 июня 2012 года

Разработчик интерфейсовМихаил Трошев

AJAX в поиске по вебу

Page 2: Михаил Трошев "AJAX в поиске по вебу"

2

Серп

Page 3: Михаил Трошев "AJAX в поиске по вебу"

SERP — Search Engine Result Page

3

Серп

Page 4: Михаил Трошев "AJAX в поиске по вебу"

AJAX

4

Page 5: Михаил Трошев "AJAX в поиске по вебу"

5

AJAX

Page 6: Михаил Трошев "AJAX в поиске по вебу"

6

AJAX

Page 7: Михаил Трошев "AJAX в поиске по вебу"

Задачи

7

Page 8: Михаил Трошев "AJAX в поиске по вебу"

грузить каждый раз (plain/gzip):

html — 80 / 20 КБ

css — 65 / 15 КБ

js — 140 / 45 КБ

+ jQuery

+ картинки

8

Мы не хотим

Page 9: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на динамическую выдачу

9

Мы хотим

Page 10: Михаил Трошев "AJAX в поиске по вебу"

— менять URL, писать историю

10

Мы хотим

Page 11: Михаил Трошев "AJAX в поиске по вебу"

— сложный интерактив

11

Мы хотим

Page 12: Михаил Трошев "AJAX в поиске по вебу"

— вебдваноль, хтмл5, пыщ-пыщ

12

Мы хотим

Page 13: Михаил Трошев "AJAX в поиске по вебу"

История / History

13

Page 14: Михаил Трошев "AJAX в поиске по вебу"

HTML5 History API

?text=котики → ?text=зайчики

A → pushState() → B

B → replaceState() → B'

pushState, replaceState → onpopstate

14

Page 15: Михаил Трошев "AJAX в поиске по вебу"

HTML5 History API

Десктоп:

IE 10

Firefox 4

Opera 11.50

Safari 5

Chrome 5

15

Мобильные:

iOS Safari 5

Android 2.2*

Page 16: Михаил Трошев "AJAX в поиске по вебу"

HTML4 деградация

#?text=котики → #?text=зайчики

onhashchange — FF 3.6, Opera 10.6, IE 8

setTimeout — остальные

16

Page 17: Михаил Трошев "AJAX в поиске по вебу"

HTML5/HTML4 конфликт

17

/?text=котики /#?text=котики

Проблема: /?text=котики#?text=хомячки

History API? History API?

OK

Решение — редиректы:

да

да

нет

нет

Page 18: Михаил Трошев "AJAX в поиске по вебу"

History.js

github / balupton / history.js

pushState(), replaceState() → onstatechange

18

Page 19: Михаил Трошев "AJAX в поиске по вебу"

i-location — БЭМ-обертка

— инкапсуляция + BEM API

get() — получение синглтона

change() — изменение состояния

change — событие

19

Page 20: Михаил Трошев "AJAX в поиске по вебу"

i-location — БЭМ-обертка

— инкапсуляция + BEM API

— зависимости

20

Page 21: Михаил Трошев "AJAX в поиске по вебу"

i-location — БЭМ-обертка

— инкапсуляция + BEM API

— зависимости

— синглтон

21

Page 22: Михаил Трошев "AJAX в поиске по вебу"

i-location — БЭМ-обертка

— инкапсуляция + BEM API

— зависимости

— синглтон

— крос-сервис

22

Page 23: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на бесконечную выдачу

— обновлять блоки по необходимости

— менять URL: History API / History.js / i-location

— сложный интерактив

— вебдваноль, хтмл5, пыщ-пыщ

23

Мы хотим

Page 24: Михаил Трошев "AJAX в поиске по вебу"

Данные

24

Page 25: Михаил Трошев "AJAX в поиске по вебу"

AJAX

25

Page 26: Михаил Трошев "AJAX в поиске по вебу"

AJAX

Транспорт: Comet? XHR? JSONP!

26

Page 27: Михаил Трошев "AJAX в поиске по вебу"

AJAX

Транспорт: Comet? XHR? JSONP!

Данные: XML? JSON!

27

Page 28: Михаил Трошев "AJAX в поиске по вебу"

AJAX

Транспорт: Comet? XHR? JSONP!

Данные: XML? JSON!

Шаблонизация: клиент? Сервер!

28

Page 29: Михаил Трошев "AJAX в поиске по вебу"

AJAX

реализация — JSONP / $.ajax / i-request

данные — JSON (html + params)

шаблонизация на сервере — priv.js / bemhtml

29

Page 30: Михаил Трошев "AJAX в поиске по вебу"

i-serp-request — транспорт

30

b1 b2 b3

сервер

b1 b2 b3

сервер

i-serp-request

Page 31: Михаил Трошев "AJAX в поиске по вебу"

i-serp-request — транспорт

31

клиент, js сервер, priv.js

Page 32: Михаил Трошев "AJAX в поиске по вебу"

i-serp-request — транспорт

32

Page 33: Михаил Трошев "AJAX в поиске по вебу"

b-serp — диспетчер

— знает про свои блоки

— дает команду обновляться

33

Page 34: Михаил Трошев "AJAX в поиске по вебу"

b-serp — диспетчер BEM.create('i-serp-request'); // инициализируем блок-транспорт

blocks.forEach(function(block, i) {

block.location = BEM.blocks['i-location'].get()

.on('change', function(e, data) {

this.channel('i-serp-request')

.trigger('request', {

key: block.__self.getName(),

success: block.changeThis(function(data) {

this.update(data)

})})})});

34

Page 35: Михаил Трошев "AJAX в поиске по вебу"

Порядок событий

35

i-location

?text=котики

b-serp

onstatechange

b-adv

i-serp-request

b-pager

b-search

сервер

котики Найти

Page 36: Михаил Трошев "AJAX в поиске по вебу"

Результаты

36

Page 37: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на динамическую выдачу

37

Мы смогли

Page 38: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на динамическую выдачу

— обновлять блоки по необходимости

38

Мы смогли

Page 39: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на динамическую выдачу

— обновлять блоки по необходимости

— менять URL, писать историю

39

Мы смогли

Page 40: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на динамическую выдачу

— обновлять блоки по необходимости

— менять URL, писать историю

— сложный интерактив

40

Мы смогли

Page 41: Михаил Трошев "AJAX в поиске по вебу"

— заменить пейджер на динамическую выдачу

— обновлять блоки по необходимости

— менять URL, писать историю

— сложный интерактив

— вебдваноль, хтмл5, пыщ-пыщ

41

Мы смогли

Page 42: Михаил Трошев "AJAX в поиске по вебу"

Планы

42

Page 43: Михаил Трошев "AJAX в поиске по вебу"

Планы

— предзагрузка порций выдачи

43

Page 44: Михаил Трошев "AJAX в поиске по вебу"

Планы

— предзагрузка порций выдачи

— кеширование состояний

44

Page 45: Михаил Трошев "AJAX в поиске по вебу"

Планы

— предзагрузка порций выдачи

— кеширование состояний

— шаблонизация на клиенте?

45

Page 46: Михаил Трошев "AJAX в поиске по вебу"

Планы

— предзагрузка порций выдачи

— кеширование состояний

— шаблонизация на клиенте?

— релиз

46

Page 47: Михаил Трошев "AJAX в поиске по вебу"

Планы

— предзагрузка порций выдачи

— кеширование состояний

— шаблонизация на клиенте?

— релиз

— open source

47

Page 48: Михаил Трошев "AJAX в поиске по вебу"

48

Page 49: Михаил Трошев "AJAX в поиске по вебу"

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

[email protected]

github.com/mishanga

twitter.com/@ya_mishanga

Михаил Трошев