Яндекс jquery – Загрузка данных с помощью JQuery и добавление их на карту — Технологии Яндекса

как Яндекс.Почта стала быстрее в регионах / Яндекс corporate blog / Habr

Скорость работы веб-интерфейса — очень важная вещь, и мы в Яндексе особенно хорошо понимаем это. От ощущения лёгкости и того, с какой скоростью у пользователя загрузятся важные ему элементы, может зависеть и то, каким сервисом он в итоге будет пользоваться.

Мы в Яндекс.Почте много работаем над ускорением клиентской части. Только на Хабре мы рассказывали о том, как оптимизируем верстку, отказались от XSL и перешли на новый шаблонизатор.

Но добиться увеличения скорости работы можно не только за счет оптимизации фронтенда. Сегодня мы хотим рассказать о переезде статических файлов Яндекс.Почты на специальный CDN Яндекса для статики и о том, как это ускорило её работу, особенно в регионах.

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

Что тормозит загрузку?

Когда человек заходит в почту, первое, что у него загружается, — минимальный HTML и так называемый bootstrap (загрузчик). Он отвечает за асинхронную загрузку всех необходимых JavaScript-модулей, шаблонов и CSS-файлов для отрисовки интерфейса, а также за первоначальную подгрузку данных. В Яндекс.Почте HTML загружается с нашего основного домена mail.yandex.ru, а bootstrap — со статического кластера mailstatic.yandex.net.

В него входит около сотни машин, расположенных в нескольких датацентрах Москвы и Подмосковья. Единственная задача этого кластера — отдавать клиенту статические файлы, которые нужны для отображения и работы веб-интерфейса Почты.

Чтобы увидеть проблему скорости в полный рост, нужно задуматься о географии пользователей Яндекс.Почты. Даже если говорить только о России, самой большой стране в мире. Например, если ориентироваться на протяжённость Транссибирской магистрали, расстояние между Москвой и Владивостоком — почти 9300 км. Пакеты с данными пользователей, разумеется, не двигаются по железной дороге — они путешествуют по линиям связи. А скорость передачи данных в оптоволокне примерно в полтора раза ниже скорости света в вакууме. Свою долю задержек вносит и сетевое оборудование на пути следования данных. Таким образом, RTT от наших датацентров в Москве до Владивостока составляет 120-130ms, а, например, до Новосибирска — около 60ms.

Локальные сервера

Для решения проблем со скоростью у Яндекса есть CDN-хостинг — yandex.st. Yandex.st — это несколько кластеров машин, большая часть из которых, как и mailstatic.yandex.net, расположена в московских датацентрах. Но, в отличие от mailstatic.yandex.net, у него есть представительства во многих крупных городах России, ближнего зарубежья и мира.

На данный момент наш CDN-хостинг поддерживает более трехсот провайдеров в 11 регионах. Кстати, yandex.st третий в мире по популярности хостинг библиотеки jquery.

Он работает на технологии anycast. Это значит, что пользователю на запрос файла отвечает топологически ближайший к нему сервер. То есть, если человек находится во Владивостоке, его запрос будет направлен на сервер, расположенный во Владивостоке, а значит он получит ответ быстрее, чем если бы его запрос пошёл в Москву.

Переезд Яндекс.Почты на yandex.st

Прежде чем переехать, нужно было оценить то, насколько эффективен будет переезд и какую пользу он принесёт. Для этого мы обвесили веб-интерфейс Почты датчиками, построили графики и перевезли на yandex.st только 50% пользователей. Это было сделано для того, чтобы можно было сравнить всё с эталоном — mailstatic.

В клиентскую часть веб-интерфейса мы встроили специальный таймер скорости загрузки статики. В этом нам помог Navigation Timing API, которое есть в большинстве современных браузеров. API с точностью до миллисекунд знает, в какой момент пользователь начинает открывать почту, а javascript-платформа — в какой момент загрузились все необходимые статические файлы. Если мы вычтем из второго таймстемпа первый, можем получить время, за которое загружалась вся статика. Полученное число вместе с другими метриками отправляется GET-запросом от пользователя на специальные сервера.

В отличие от таймингов access-логов nginx (для которых, разумеется, у нас тоже есть графики), такая метрика позволяет учитывать время загрузки всей почты, вне зависимости от того, какие файлы и сколько загружает каждый пользователь. Грубо говоря, мы можем точно узнать, за какое время у пользователя грузится вся почта, а не каждый файл по отдельности.

В менее чем одном проценте случаев из-за непонятных причин эти цифры прилетают откровенно неправдоподобными. Например, отрицательными или равными 50 годам.

Для того чтобы отсечь такие значения, мы решили построить график времени, в которое укладывается 75%, 95% и 99% загрузок.

Но и этих цифр недостаточно — скорость загрузки меняется в том числе и из-за изменения размеров файлов и их количества. Для того чтобы понять, насколько в других регионах статика почты стала грузиться быстрее, в качестве KPI переезда мы выбрали сравнение скорости загрузки в каждом регионе со скоростью загрузки в Москве. То есть мы точечно начали отнимать от времени загрузки из региона время загрузки из Москвы. Если значение получалось отрицательным, мы считали, что делаем всё правильно и скорость в этом регионе стала быстрее.

Этот график помог найти несколько узких мест и проблем на региональных машинках, которые мы быстро починили.

Результат

В результате переезда Яндекс.Почта стала отвечать и грузиться быстрее: в зависимости от региона от нескольких сот миллисекунд до секунд. Скорость загрузки статики в Новосибирске и Казани увеличилась в два раза, в Екатеринбурге и в Владивостоке — примерно в полтора.

График среднего времени загрузки статики в некоторых городах

Благодаря настройке региональных серверов, мы нашли несколько возможностей увеличить скорость и в «домашнем» регионе: Яндекс.Почта стала быстрее не только в регионах, но и в Москве, так что предлагаем всем желающим начать использовать yandex.st.

Владельцам сайтов

Если в вашем проекте используется jquery или другие популярные javascript-фреймворки и библиотеки, вы можете подключить их с наших серверов.

Помимо региональности, у yandex.st круглосуточная поддержка администраторами Яндекса. Он поддерживает протокол ipv6 и имеет минимальный downtime: чем больше людей пользуется yandex.st, тем больше шансов, что jquery не будет «вымываться» из кэша. И, конечно, сервисы Яндекса уже берут библиотеки с yandex.st, так что у обычных пользователей эти версии часто находятся в кэше. А это означает, что если использовать yandex.st на своем сайте, он будет загружаться быстрее.

Представителям региональных провайдеров

Не все региональные провайдеры настроили маршрутизацию таким образом, чтобы их пользователи попадали на местные машины. Если вы представляете какого-либо провайдера и хотите ускорить Яндекс для своих пользователей (и уменьшить трафик в его сторону), необходимо обеспечить топологическую близость наших серверов CDN, поддерживающих yandex.st (и другие сервисы). Есть два способа это сделать:
  1. Подключиться к точкам обмена трафиком, в которых присутствует Яндекс и установлены серверы CDN (посмотреть, например, можно на www.peeringdb.com/private/participant_view.php?id=1751), и поднять с нами там пиринг, после чего CDN заработает автоматически;
  2. Написать на [email protected], если трафик между провайдером и Яндексом значителен (сравним или составляет более 500Mb/s). Мы готовы рассмотреть возможность установки серверов CDN в сети провайдера.

Особенности Google CDN / Habr

Сначала посмотрите на это:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

С помощью этого кода вы можете загрузить библиотеку jQuery напрямую из сети доставки контента (CDN) Google.

Обратите внимание, вы можете прямо указать какую версию (/1.4.4/) библиотеки следует загрузить. Но это далеко не все, что можно сделать. Путем простого изменения этой части ссылки можно творить маленькие приятности:

/1.4.4/ – загрузит точно указанную версию библиотеки, которая никогда не изменится.

/1.4/ – прямо сейчас загрузит версию 1.4.4, но если завтра выйдет версия 1.4.5, то эта ссылка будет указывать на нее. Если затем появится 1.5, то будет указывать на последний релиз в ветке 1.4.х.

/1/ – прямо сейчас загрузит версию 1.4.4. Если завтра появится 1.5, то будет указывать на нее. После выхода версии 2.0 будет указывать на последний релиз в jQuery 1.х.

Маленькое напоминание о том, ради чего все это вообще делается

Уменьшаем задержки – файл грузится с ближайшего географически сервера.

Распараллеливаем загрузку – браузеры ограничивают число одновременных подключений к одному домену, а так файлы могут грузиться параллельно, ускоряя загрузку.

Улучшаем кеширование – есть большая вероятность, что в браузерном кеше посетителя файл уже лежит и это скорейший способ загрузить его.

Сохраняем траффик – сжатая версия 1.4.4 «весит» 82 килобайта. Если ваши посетители запросят миллион страниц с пустым кешем браузера, вы сэкономите 74 гигабайта трафика.

Кеширование

Тут следует сделать важное замечание. От того, по какой ссылке вы будете загружать библиотеку, зависит тип кеширования. Только ссылка на прямую версию даст наилучший результат.

/1.4.4/ – public, max-age=31536000 (один год)

/1.4/ – public, must-revalidate, proxy-revalidate, max-age=3600 (один час с перепроверкой)

/1/ – public, must-revalidate, proxy-revalidate, max-age=3600 (один час с перепроверкой)

Очевидно, кешировать на один час совершенно бесполезно. С другой стороны, пи выходе версии 1.4.5 тот, кто закешировал 1.4.4 на год, получал бы несвежую версию, а это тоже не очень хорошо.

Учет факторов задержек, параллельности загрузки и сохранения траффика по-прежнему важен, но кеширование не менее значимо. Так что если уж кеширование играет для нас большую роль, используйте вариант ссылки на строго определенную версию.

Что выбрать

/1.4.4/ – никогда не изменится, никогда не разрушит функционал, лучше всех кешируется, интуитивно понятно

/1.4/ – может привести к нарушению работы кода при обновлениях, плохо кешируется.

/1/ – весьма вероятно, приведет к нарушению работы при обновлении, плохо кешируется.

Таким образом, для большинства сценариев применения наилучшим образом подойдет вариант с жестким указанием версии. Это также позволит держать работу вашего сайта или приложения под контролем.

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

Не jQuery единым

Приведенные выше соображения справедливы для всех библиотек в Google CDN. Автор проверил их в отношении MooTools и все работает аналогичным образом.

Другие CDN

JQuery можно забирать из сети Microsoft или с jquery.com. Они не дают большой свободы при выборе версий, но, стоит отметить, Майкрософт позволяет кешировать файл на год:

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js"></script>

jQuery.com не указывает как кешировать его файл:

<script src="http://code.jquery.com/jquery-1.4.4.min.js"></script>

Update 1.

Поддерживайте отечественного производителя с обширным списком библиотек: api.yandex.ru/jslibs

Update 2.

Такая загрузка позволит поисковикам использовать этот инструмент как дополнительный источник статистики посещений тех или иных сайтов, если кого-то это смущает.

Кеширование даже на год часто не имеет смысла, т.к. размер браузерного кеша у многих пользователей мал. У меня в Файрфоксе и Опере по умолчанию стояло 50 и 40 мегабайт соответственно. При таких размерах и нынешних скоростях доступа он будет обновляться очень часто ввиду вытеснения старых элементов новыми. Я увеличиваю размеры кешей до 500 мегабайт, хотя некоторые авторы предпочитают думать, что это сильно снижает быстродействие браузеров.

Update 3. Передаваемый трафик

Опыты с ФайрБагом показали, что минимальный траффик дает загрузка jQuery из CDN Yandex.st, а Микрософт еще зачем-то подсовывает плюшку:

Yandex.st Google CDN Microsoft CDN
24605 bytes, gzip 27100 bytes, gzip 34187 bytes, gzip + 1090 bytes cookie

Update 4. Скорость отклика
Замеры производились в Краснодаре (Билайн) вручную посредством Yslow путем 10-кратного рефреша. В других городах результаты могут разительно отличаться. В скобках время первого отклика с чистым кешем.

Yandex.st Google CDN Microsoft CDN
~53 мс (305-320 мс) ~110 мс (324-333 мс) ~400 мс (720-990 мс)

⭐ Jquery cdn yandex — Рейтинг сайтов по тематике на RANKW.RU

Jquery плагины - Jquery

Jquery плагины — Jquery

Обзор популярных jquery плагинов и скриптов.

jqueryscripts.ru

javascript, ajax, jquery, jquery плагины, jquery plugin

Рейтинг Alexa: #1,829,154    Google PageRank: 2 из 10   

Рейтинг:

20.1

Русская документация по jQuery

Русская документация по jQuery

Перевод документации jQuery на русский язык, информация по jQuery, справка jQuery,Справка по API jQuery,jquery документация, Jquery API

jquery-docs.ru

jquery русский, jquery документация, ajax, jquery, документация jquery

Рейтинг Alexa: #74,391    Google PageRank: 3 из 10   

Рейтинг:

19.1

Блог YourKeys о программировании, создании сайтов и СЕО

Блог YourKeys о программировании, создании сайтов и СЕО

Код для установки фиксированного блока рекламы, а также плагин для фиксации виджетов на WordPress.

yourkeys.ru

wordpress, заработок, mysql, nginx, ssh

Рейтинг Alexa: #1,491,166    Google PageRank: 0 из 10    Яндекс ТИЦ: 0

Рейтинг:

14.9

Мой jQuery. Короткие заметки по практическому использованию jQuery при разработке веб-приложений

Мой jQuery. Короткие заметки по практическому использованию jQuery при разработке веб-приложений

Короткие заметки по практическому использованию jQuery при разработке веб-приложений. Рецепты, подсказки. Изучение jQuery на реальных примерах использования.

myjquery.ru

jquery, jquery cookbook, примеры jquery, изучение jquery

    Google PageRank: 0 из 10    Яндекс ТИЦ: 0

Рейтинг:

14.8

« Банк скриптов JAVA и JQuery »

« Банк скриптов JAVA и JQuery »

An experimental push menu with multi-level functionality that allows endless nesting of navigation elements.

jqscript.com

multi-level push menu, jqscipt.com, jquery, jquery preloader download, jquery scripts

Рейтинг Alexa: #336,646    Google PageRank: 0 из 10   

Рейтинг:

14.7

обзор плагинов jQuery

обзор плагинов jQuery

обзор плагинов для javascript библиотеки jQuery, примеры работы с jQuery

jquerylist.ru

jquery сниппеты, jquery примеры, утилиты, анимация, формы

    Google PageRank: 1 из 10   

Рейтинг:

14.3

jQuery документация

jQuery документация

jQuery Документация,jQuery примеры, jQuery ajax

slyweb.ru

jquery, руководство, документация, jquery ui, ajax

Рейтинг Alexa: #371,966    Google PageRank: 2 из 10   

Рейтинг:

14.3

Введение в jQuery

Введение в jQuery

Jquery — назначение программного обеспечения, функции, возможности, управление, принципы и правила.

jquery-in.ru

Рейтинг Alexa: #6,871,296    Google PageRank: 0 из 10   

Рейтинг:

13.9

jquery-in.ru

Yandex in Russia Ukraine Belarus Kazakhstan Turkey. Technologies About Yandex Terms of Service Privacy Policy Contact us Copyright Notice © Yandex — Yandex

platforma-softa.ru

карта, россии, russia, скачать, rus20110317

    Google PageRank: 0 из 10    Яндекс ТИЦ: 0

Рейтинг:

13.6

JQuery

JQuery

jquery.page2page.ru

ajax, css, jquery ui, атрибуты, введение в jquery

    Google PageRank: 0 из 10    Яндекс ТИЦ: 70

Рейтинг:

13.5

JQuery Club - место где собираются разработчики на JQuery

JQuery Club — место где собираются разработчики на JQuery

JQuery Club — место где собираются разработчики на JQuery

jquery-club.ru

программирование, jquery,

⭐ Yandex cdn jquery — Рейтинг сайтов по тематике на RANKW.RU

Jquery плагины - Jquery

Jquery плагины — Jquery

Обзор популярных jquery плагинов и скриптов.

jqueryscripts.ru

javascript, ajax, jquery, jquery плагины, jquery plugin

Рейтинг Alexa: #1,829,154    Google PageRank: 2 из 10   

Рейтинг:

20.1

Русская документация по jQuery

Русская документация по jQuery

Перевод документации jQuery на русский язык, информация по jQuery, справка jQuery,Справка по API jQuery,jquery документация, Jquery API

jquery-docs.ru

jquery русский, jquery документация, ajax, jquery, документация jquery

Рейтинг Alexa: #74,391    Google PageRank: 3 из 10   

Рейтинг:

19.1

Блог YourKeys о программировании, создании сайтов и СЕО

Блог YourKeys о программировании, создании сайтов и СЕО

Код для установки фиксированного блока рекламы, а также плагин для фиксации виджетов на WordPress.

yourkeys.ru

wordpress, заработок, mysql, nginx, ssh

Рейтинг Alexa: #1,491,166    Google PageRank: 0 из 10    Яндекс ТИЦ: 0

Рейтинг:

14.9

Мой jQuery. Короткие заметки по практическому использованию jQuery при разработке веб-приложений

Мой jQuery. Короткие заметки по практическому использованию jQuery при разработке веб-приложений

Короткие заметки по практическому использованию jQuery при разработке веб-приложений. Рецепты, подсказки. Изучение jQuery на реальных примерах использования.

myjquery.ru

jquery, jquery cookbook, примеры jquery, изучение jquery

    Google PageRank: 0 из 10    Яндекс ТИЦ: 0

Рейтинг:

14.8

« Банк скриптов JAVA и JQuery »

« Банк скриптов JAVA и JQuery »

An experimental push menu with multi-level functionality that allows endless nesting of navigation elements.

jqscript.com

multi-level push menu, jqscipt.com, jquery, jquery preloader download, jquery scripts

Рейтинг Alexa: #336,646    Google PageRank: 0 из 10   

Рейтинг:

14.7

обзор плагинов jQuery

обзор плагинов jQuery

обзор плагинов для javascript библиотеки jQuery, примеры работы с jQuery

jquerylist.ru

jquery сниппеты, jquery примеры, утилиты, анимация, формы

    Google PageRank: 1 из 10   

Рейтинг:

14.3

jQuery документация

jQuery документация

jQuery Документация,jQuery примеры, jQuery ajax

slyweb.ru

jquery, руководство, документация, jquery ui, ajax

Рейтинг Alexa: #371,966    Google PageRank: 2 из 10   

Рейтинг:

14.3

Введение в jQuery

Введение в jQuery

Jquery — назначение программного обеспечения, функции, возможности, управление, принципы и правила.

jquery-in.ru

Рейтинг Alexa: #6,871,296    Google PageRank: 0 из 10   

Рейтинг:

13.9

jquery-in.ru

Yandex in Russia Ukraine Belarus Kazakhstan Turkey. Technologies About Yandex Terms of Service Privacy Policy Contact us Copyright Notice © Yandex — Yandex

platforma-softa.ru

карта, россии, russia, скачать, rus20110317

    Google PageRank: 0 из 10    Яндекс ТИЦ: 0

Рейтинг:

13.6

JQuery

JQuery

jquery.page2page.ru

ajax, css, jquery ui, атрибуты, введение в jquery

    Google PageRank: 0 из 10    Яндекс ТИЦ: 70

Рейтинг:

13.5

JQuery Club - место где собираются разработчики на JQuery

JQuery Club — место где собираются разработчики на JQuery

JQuery Club — место где собираются разработчики на JQuery

jquery-club.ru

программирование, jquery,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *