SlideShare a Scribd company logo
Кеширование
на сервере и
клиенте
Егор Львовский
разработчик интерфейсов
Все любят скорость




3
Кеширование
Кэш (англ. cache /ˈkæʃ/) — это компонент системы,
    который прозрачно сохраняет данные для того, чтобы
    будущие запросы к этим данным обрабатывались
    быстрее.

    Wikipedia




8
Факториал
    function factorial(n) {

     "if (n === 0) return 1 

     "return n * factorial( n - 1 )

    }"


    Недостатки:

    •  вычисление значения для больших чисел может занять
       продолжительное время

    •  мы каждый раз заново вычисляем значение факториала для всех
       чисел от 1 до n


9
Факториал с кешем
     function factorial(n) {

      "factorial.cache = factorial.cache || [1]

      "return factorial.cache[n]"
      " " "|| (factorial.cache[n] = n *
      " " " " "factorial(n - 1))

     }"




                         27×
                         20×
                          10×
                           5×


11
            http://jsperf.com/factorial-cache
Кеширование

Способ хранения данных
Показатель эффективности
Проблемы
Хеш-таблица




     •  хранит пары Ключ → Значение
     •  операции добавления, поиска и удаления
     •  cложность O(1)




13
Хеш-функция
      "
      function hash(chars) {

         var hash = 0

         for (var i = 0, len = chars.length; i < len; ++i){

            hash += chars[i].charCodeAt(0)

         }

         return hash

      }"


     Требования:

     •    хорошая перемешиваемость данных

     •    быстрый алгоритм вычисления

14
Хеш-функция



     •  Используется не только в хеш-таблицах
     •  Принимает что-то возвращает строку (хеш)
      –  MD5 ( 1 ⁄ 264 )
      –  SHA1
      –  CRC

     •  Используется для построения соответствий
        данных хешам


15
Время доступа в хеш-таблице




     •  среднее — О(1)
     •  наихудший случай — О(n)




16
Время доступа




17
Кеш-попадание




     •  напрямую влияет на эффективность
     •  временная локальность
     •  пространственная локальность




18
Быстро — не всегда правильно




19
Коллизии
     "
     function hash(chars) {

        var hash = 0

        for (var i = 0, len = chars.length; i < len; ++i){

           hash += chars[i].charCodeAt(0)

        }

        return hash

     }"


     Проблемы:

     •  неусточива к коллизиям
     •  одинаковые значения от разных ключей
         –  aab	
  =	
  aba	
  =	
  baa	
  
20
Инвалидация



     • одна из двух главных проблем
       программирования
     • стандартные способы
     – по времени
     – по событию
     – по ключу


21
Кеш на сервере

В памяти приложения
На диске
Готовые системы
Кеширование в память


     Преимущества
     •  легкость использования
     •  маленькое время доступа
     •  большой размер кеша

     Недостатки
     •  неусточивость к перезагрузкам системы

24
Кеширование на диск




     •  решает проблемы памяти
     •  используется как дополнительный способ
     •  сильно уступает в скорости




25
Системы кеширования




     •  хеш-таблицы внутри
     •  удобный интерфейс снаружи
     •  доступ по сети



26
Клиентское кеширование

         Я разработчик интерфейсов.
         Я не хочу ничего решать.
         Я хочу кешировать в браузере.
Кеш браузера




     •  Expires и Cache-Control: max-age.
      –  дают время свежести ресурса
      –  имеют больший вес

     •  Last-Modified и Etag!
      –  метки ресурсов
      –  браузер отпраляет значения на сервер, сервер решает!




28
Должен остаться только один
Память JS-приложения




     •  сохраняем в объекты и переменные
     •  получаем скорость и удобство
     •  памяти меньше, но достаточно




30
Что кешируем?

     Результаты работы функций,
     затрагивающих DOM-дерево

     •  $(‘.menu > :first-child a:first-
        of-type’)!
     •  querySelectorAll(‘.b-link’)!
     •  $(‘.b-image’).width()
     •  $(‘.b-menu’).offset()

31
Что кешируем?



     •  длинные цепочки свойств объектов
      –  document.forms[0].elements[0].value

     •  геттеры и методы
      –  array.length
      –  Object.prototype.hasOwnProperty

     •  сложные вычисляемые значения



32
jQuery


     •  обрабочики событий
     •  построенные Sizzle-селекторы
     •  результаты работы .data()

      DOM-нодам и хендлерам присваевается
      уникальный идентификатор



33
localStorage/sessionStorage

     Данные, сохраненные в этих хранилищах сохраняются до того момента когда
     вы их удалите (local) либо до конца сессии (session).

     Перезагрузка страницы кеш не очищает.




      length // возвращает размер хранилища

      key(index) // возвращает ключ по индексу хеш-таблицы !
      getItem(key) // возвращает элемент по ключу !
      setItem(key, value) // добавляет/обновляет
      removeItem(key) // удаляет элемент по ключу !
      clear() // очищает кэш!
      !
       !
      var foo = localStorage[‘bar’]; "
      localStorage[‘bar’] = foo; "

34
localStorage/sessionStorage

     Можем кешировать
     •  пользовательские настройки
     •  введенную информацию в инпутах
     •  стили
     •  джаваскрипт

     Доступны с FF 3.5, Chrome 4, Safari 4, Opera
     10.5, IE 8
35
localStorage/sessionStorage




     •  Safari — 2×
     •  Chrome и FF — 170×
     •  Opera — 400×



      http://jsperf.com/localstorage2

36
localStorage/sessionStorage




     http://www.w3.org/TR/webstorage




37
Offline Applications (AppCache)


     Расширенное браузерное кеширование

     Контроль при помощи файла-манифеста

     text/cache-manifest — тип файла


     <html manifest=“cache.manifest”> !

38
AppCache Manifest
     CACHE MANIFEST"
     # 2012-09-25:v1"
     CACHE:"
     /favicon.ico"
     index.html"
     stylesheet.css"
     main.js"
     "
     NETWORK:"
     /login"
     /api"
     "
     FALLBACK:"
     /main.cgi /static.html"
     images/large/ images/offline.jpg"
     *.html /offline.html "
     "


39
AppCache



     Доступен c FF 3.5, Chrome 4, Safari 4, Opera
     10.6, IE 10



     http://www.w3.org/TR/offline-webapps


40
File API (Filesystem, Filewriter)


     •  самая новая спецификация
     •  позволяет очень гибко управлять кэшем
     •  пока реализована только в Chrome 20+



      http://www.w3.org/TR/file-system-api


41
Иногда, кеширование — зло




42
Нельзя просто так взять




    и закешировать
На самом деле можно




44
Егор Львовский

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




     lvivski@yandex-team.ru
     @lvivski




Спасибо

More Related Content

What's hot

Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
odnoklassniki.ru
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассниках
odnoklassniki.ru
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Ontico
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
Business incubator HSE
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark
Roman Brovko
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Yandex
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Timur Shemsedinov
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
IT Event
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
Timur Shemsedinov
 
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеВелосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Alexandre Kalendarev
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark
Roman Brovko
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
Ilya Chesnokov
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
CodeFest
 
09 - Hadoop. Pig
09 - Hadoop. Pig09 - Hadoop. Pig
09 - Hadoop. Pig
Roman Brovko
 
Нетрадиционное использование Ruby и PostgreSQL
Нетрадиционное использование Ruby и PostgreSQLНетрадиционное использование Ruby и PostgreSQL
Нетрадиционное использование Ruby и PostgreSQLIvan Evtukhovich
 
MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.
Sergey Petrunya
 
Технические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в ИнтернетеТехнические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в Интернете
Alexey Nayden
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
Alex Chistyakov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 

What's hot (20)

Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассниках
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
 
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеВелосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark
 
Разработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PIРазработка на Perl под Raspberry PI
Разработка на Perl под Raspberry PI
 
Дмитрий Стогов
Дмитрий СтоговДмитрий Стогов
Дмитрий Стогов
 
09 - Hadoop. Pig
09 - Hadoop. Pig09 - Hadoop. Pig
09 - Hadoop. Pig
 
Нетрадиционное использование Ruby и PostgreSQL
Нетрадиционное использование Ruby и PostgreSQLНетрадиционное использование Ruby и PostgreSQL
Нетрадиционное использование Ruby и PostgreSQL
 
MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.
 
Технические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в ИнтернетеТехнические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в Интернете
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 

Viewers also liked

What's new with Zend server
What's new with Zend serverWhat's new with Zend server
What's new with Zend server
COMMON Europe
 
Buildstore developers conference structural warranty
Buildstore developers conference structural warrantyBuildstore developers conference structural warranty
Buildstore developers conference structural warranty
Simply Marcomms
 
Proprietati chimice ale bazelor
Proprietati chimice ale bazelorProprietati chimice ale bazelor
Proprietati chimice ale bazelormihaelapaduraru
 
How to design brand logos
How to design brand logosHow to design brand logos
How to design brand logos
Logo Design India
 
Apec workshop 2 presentation 7 2 apec workshop mexico 7 eu ccs demo network
Apec workshop 2 presentation 7 2  apec workshop mexico  7  eu ccs demo networkApec workshop 2 presentation 7 2  apec workshop mexico  7  eu ccs demo network
Apec workshop 2 presentation 7 2 apec workshop mexico 7 eu ccs demo network
Global CCS Institute
 

Viewers also liked (6)

Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
What's new with Zend server
What's new with Zend serverWhat's new with Zend server
What's new with Zend server
 
Buildstore developers conference structural warranty
Buildstore developers conference structural warrantyBuildstore developers conference structural warranty
Buildstore developers conference structural warranty
 
Proprietati chimice ale bazelor
Proprietati chimice ale bazelorProprietati chimice ale bazelor
Proprietati chimice ale bazelor
 
How to design brand logos
How to design brand logosHow to design brand logos
How to design brand logos
 
Apec workshop 2 presentation 7 2 apec workshop mexico 7 eu ccs demo network
Apec workshop 2 presentation 7 2  apec workshop mexico  7  eu ccs demo networkApec workshop 2 presentation 7 2  apec workshop mexico  7  eu ccs demo network
Apec workshop 2 presentation 7 2 apec workshop mexico 7 eu ccs demo network
 

Similar to Егор Львовский — «Кеширование на клиенте и сервере»

PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
Alexey Ermakov
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaAndrei Pangin
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервереYandex
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Ontico
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
Andrei Pangin
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
Denis Izmaylov
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
DevDay
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
Alexander Titov
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
Roman Dvornov
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
CodeFest
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данных
Roman Elizarov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
Roman Dvornov
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Yandex
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
xasima
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 

Similar to Егор Львовский — «Кеширование на клиенте и сервере» (20)

PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данных
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
Yandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
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айт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Егор Львовский — «Кеширование на клиенте и сервере»

  • 1.
  • 2. Кеширование на сервере и клиенте Егор Львовский разработчик интерфейсов
  • 4.
  • 5.
  • 6.
  • 8. Кэш (англ. cache /ˈkæʃ/) — это компонент системы, который прозрачно сохраняет данные для того, чтобы будущие запросы к этим данным обрабатывались быстрее. Wikipedia 8
  • 9. Факториал function factorial(n) {
 "if (n === 0) return 1 
 "return n * factorial( n - 1 )
 }" Недостатки: •  вычисление значения для больших чисел может занять продолжительное время •  мы каждый раз заново вычисляем значение факториала для всех чисел от 1 до n 9
  • 10.
  • 11. Факториал с кешем function factorial(n) {
 "factorial.cache = factorial.cache || [1]
 "return factorial.cache[n]" " " "|| (factorial.cache[n] = n * " " " " "factorial(n - 1))
 }" 27× 20× 10× 5× 11 http://jsperf.com/factorial-cache
  • 13. Хеш-таблица •  хранит пары Ключ → Значение •  операции добавления, поиска и удаления •  cложность O(1) 13
  • 14. Хеш-функция " function hash(chars) {
 var hash = 0
 for (var i = 0, len = chars.length; i < len; ++i){
 hash += chars[i].charCodeAt(0)
 }
 return hash
 }" Требования: •  хорошая перемешиваемость данных •  быстрый алгоритм вычисления 14
  • 15. Хеш-функция •  Используется не только в хеш-таблицах •  Принимает что-то возвращает строку (хеш) –  MD5 ( 1 ⁄ 264 ) –  SHA1 –  CRC •  Используется для построения соответствий данных хешам 15
  • 16. Время доступа в хеш-таблице •  среднее — О(1) •  наихудший случай — О(n) 16
  • 18. Кеш-попадание •  напрямую влияет на эффективность •  временная локальность •  пространственная локальность 18
  • 19. Быстро — не всегда правильно 19
  • 20. Коллизии " function hash(chars) {
 var hash = 0
 for (var i = 0, len = chars.length; i < len; ++i){
 hash += chars[i].charCodeAt(0)
 }
 return hash
 }" Проблемы: •  неусточива к коллизиям •  одинаковые значения от разных ключей –  aab  =  aba  =  baa   20
  • 21. Инвалидация • одна из двух главных проблем программирования • стандартные способы – по времени – по событию – по ключу 21
  • 22.
  • 23. Кеш на сервере В памяти приложения На диске Готовые системы
  • 24. Кеширование в память Преимущества •  легкость использования •  маленькое время доступа •  большой размер кеша Недостатки •  неусточивость к перезагрузкам системы 24
  • 25. Кеширование на диск •  решает проблемы памяти •  используется как дополнительный способ •  сильно уступает в скорости 25
  • 26. Системы кеширования •  хеш-таблицы внутри •  удобный интерфейс снаружи •  доступ по сети 26
  • 27. Клиентское кеширование Я разработчик интерфейсов. Я не хочу ничего решать. Я хочу кешировать в браузере.
  • 28. Кеш браузера •  Expires и Cache-Control: max-age. –  дают время свежести ресурса –  имеют больший вес •  Last-Modified и Etag! –  метки ресурсов –  браузер отпраляет значения на сервер, сервер решает! 28
  • 30. Память JS-приложения •  сохраняем в объекты и переменные •  получаем скорость и удобство •  памяти меньше, но достаточно 30
  • 31. Что кешируем? Результаты работы функций, затрагивающих DOM-дерево •  $(‘.menu > :first-child a:first- of-type’)! •  querySelectorAll(‘.b-link’)! •  $(‘.b-image’).width() •  $(‘.b-menu’).offset() 31
  • 32. Что кешируем? •  длинные цепочки свойств объектов –  document.forms[0].elements[0].value •  геттеры и методы –  array.length –  Object.prototype.hasOwnProperty •  сложные вычисляемые значения 32
  • 33. jQuery •  обрабочики событий •  построенные Sizzle-селекторы •  результаты работы .data() DOM-нодам и хендлерам присваевается уникальный идентификатор 33
  • 34. localStorage/sessionStorage Данные, сохраненные в этих хранилищах сохраняются до того момента когда вы их удалите (local) либо до конца сессии (session). Перезагрузка страницы кеш не очищает. length // возвращает размер хранилища
 key(index) // возвращает ключ по индексу хеш-таблицы ! getItem(key) // возвращает элемент по ключу ! setItem(key, value) // добавляет/обновляет removeItem(key) // удаляет элемент по ключу ! clear() // очищает кэш! ! ! var foo = localStorage[‘bar’]; " localStorage[‘bar’] = foo; " 34
  • 35. localStorage/sessionStorage Можем кешировать •  пользовательские настройки •  введенную информацию в инпутах •  стили •  джаваскрипт Доступны с FF 3.5, Chrome 4, Safari 4, Opera 10.5, IE 8 35
  • 36. localStorage/sessionStorage •  Safari — 2× •  Chrome и FF — 170× •  Opera — 400× http://jsperf.com/localstorage2 36
  • 37. localStorage/sessionStorage http://www.w3.org/TR/webstorage 37
  • 38. Offline Applications (AppCache) Расширенное браузерное кеширование Контроль при помощи файла-манифеста text/cache-manifest — тип файла <html manifest=“cache.manifest”> ! 38
  • 39. AppCache Manifest CACHE MANIFEST" # 2012-09-25:v1" CACHE:" /favicon.ico" index.html" stylesheet.css" main.js" " NETWORK:" /login" /api" " FALLBACK:" /main.cgi /static.html" images/large/ images/offline.jpg" *.html /offline.html " " 39
  • 40. AppCache Доступен c FF 3.5, Chrome 4, Safari 4, Opera 10.6, IE 10 http://www.w3.org/TR/offline-webapps 40
  • 41. File API (Filesystem, Filewriter) •  самая новая спецификация •  позволяет очень гибко управлять кэшем •  пока реализована только в Chrome 20+ http://www.w3.org/TR/file-system-api 41
  • 43. Нельзя просто так взять и закешировать
  • 44. На самом деле можно 44
  • 45. Егор Львовский разработчик интерфейсов lvivski@yandex-team.ru @lvivski Спасибо