Открытка компании: когда AdRiver разучится таскать устаревшие скрипты и научится кэшировать картинки?

Предыстория: полгода назад задавали в саппорт Адривера вопросы, они ушли делать. Прошло полгода, они не шевелятся. Возникает вопрос: «доколе!».

Баннерокрутилка Адривер, насколько я помню, является самой крупной по количеству клиентов (=сайтов). Меня пугало, что на один баннер уходит по 3−5 запросов в Адривер, но вот сейчас я совсем осела. Тестируем:

https://developers.google.com/speed/pagespeed/insights/?url=popmech.ru

Адривер применит скрипты (в скобках срок их устаревания):

http://content.adriver.ru/banners/0002186/0002186173/0/1.js (expiration not specified)
content.adriver.ru/plugins/autoUpdate.adriver.js (expiration not specified)
content.adriver.ru/plugins/checkFlash.adriver.js (expiration not specified)
content.adriver.ru/plugins/functions.adriver.js (expiration not specified)
content.adriver.ru/plugins/old.adriver.js (expiration not specified)
www.googletagservices.com/tag/js/check_359604.js (30 minutes)
pagead2.googlesyndication.com/…gead/expansion_embed.js?source=safeframe (60 minutes)
pagead2.googlesyndication.com/pagead/osd.js (60 minutes)
www.googletagservices.com/tag/js/gpt.js (60 minutes)
googleads.g.doubleclick.net/mads/static/formats/templates.js (60 minutes)
mc.yandex.ru/metrika/watch.js (60 minutes)
www.google-analytics.com/analytics.js (2 hours)

Как мы видим, все внешние скрипты-библиотеки кешируются хотя бы по 30 минут. И только скрипты Адривера запрашиваются каждый раз при каждом заходе пользователя на страницу. Даже если идет активная разработка в самом Адривере, можно поставить кеш хотя бы на 30 минут, а еще лучше пара часов. Над этим вопросом они думают уже полгода.А особенно мне нравится скрипт content.adriver.ru/plugins/old.adriver.js, который мы должны таскать за собой все это время, хотя в нем явно помечено, что он устарел.

Проблема номер 2: сами баннеры на странице тоже не кешируются:

http://edp2.adriver.ru/images/0003346/0003346965/0/2.jpg (expiration not specified)
masterh2.adriver.ru/images/0002929/0002929752/0/240×400.jpg (expiration not specified)
masterh2.adriver.ru/images/0003570/0003570619/0/1.jpg (expiration not specified)
masterh4.adriver.ru/images/0003489/0003489767/0/3.jpg (expiration not specified)
masterh5.adriver.ru/…03889/0003889229/0/vizarsin_100Px200.jpg (expiration not specified)
masterh7.adriver.ru/images/0003767/0003767317/0/1×1.gif (expiration not specified)
masterh7.adriver.ru/images/0003767/0003767317/0/zag.png (expiration not specified)

И если для картинки 1×1.gif я еще понимаю почему (сбор статистики), то почему нельзя закешировать баннер для его быстрого повторного показа, я не понимаю.
Вернемся к статистике: баннерокрутилка № 1, которая имеет большое количество крупных платных клиентов на задумывается о скорости загрузки сайтов-клиентов и уже полгода делает эту простую задачу — время протухания файлов (библиотеки и сами баннеры).

Доколе?!

И так на каждом сайте, который крутит свою рекламу через Адривер. то есть определённое количество сайтов из топа рейтинга Рунета можно ускорить только тем, что активно попинать Адривер.

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

  • Ответить
    O_o

    Данила Штань, да-да, настоящие пацаны никогда не говорят о некачественно оказанной услуге, они молча страдают, или молча меняют поставщика, иначе не пацан

  • Ответить

    Ситуация выглядит несколько иначе:
    Адривер предлагает пользователям загрузить новую версию библиотек только в том случае, если они изменились. Гугл же заставляет скачивать заново одно и то же каждый час.

    Все современные броузеры в политике кэширования ориентируются в том числе на значение поля «Last-Modified:» из заголовков ответа http сервера. Если сервером для отдаваемого контента не указан «Expires:», то броузер бессрочно кэширует отдаваемый контент и при следующем запросе добавляет в запрос инструкцию «If-Modified-Since:», указав дату, отданную сервером при ответе на первый запрос.
    См. строки:
    > «Last-Modified: Wed, 26 Nov 2014 11:41:43» GMT в ответе сервера
    < «If-Modified-Since: Wed, 26 Nov 2014 11:41:43 GMT» в повторном запросе броузера

    Скучные логи снифера:
    =====================
    Первый запрос:
    GET http://content.adriver.ru/plugins/onScroll.adriver.js HTTP/1.1
    Host: content.adriver.ru
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
    Accept: text/html, application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US, en;q=0.5
    Accept-Encoding: gzip, deflate
    DNT: 1
    Cookie: cid=AXXX242YbFaA3Jd6f1I1LIw;
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache

    Отдается контент:
    HTTP/1.1 200 OK
    Server: nginx/1.4.5
    Date: Tue, 09 Jun 2015 17:55:49 GMT
    Content-Type: application/x-javascript
    Content-Length: 1152
    Last-Modified: Wed, 26 Nov 2014 11:41:43 GMT
    Connection: close
    ETag: «5475bc77−480"
    Accept-Ranges: bytes

    /* adriver onScroll plugin */
    [skip]
    })('onScroll.adriver');

    =====================

    Повторный запрос:
    GET h«ontent.adriver.ru/plugins/onScroll.adriver.js HTTP/1.1
    Host: content.adriver.ru
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
    Accept: text/html, application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
    Accept-La« en-US, en;q=»gLw===> Accept-Encoding: gzip, deflate
    DNT: 1
    Cookie: cid=AXXX242YbFaA3Jd6f1I1LIw;
    Connection: keep-alive
    If-Modified-Since: Wed, 26 Nov 2014 11:41:43 GMT
    If-None-Match: «5475bc77−480"
    Cache-Control: max-age=0

    Контент не отдается:
    HTTP/1.1 304 Not Modified
    Server: nginx/1.4.5
    Date: Tue, 09 Jun 2015 17:57:30 GMT
    Last-Modified: Wed, 26 Nov 2014 11:41:43 GMT
    Connection: close
    ETag: «5475bc77−480»

  • Ответить

    То же самое из wiki:
    https://ru.wikipedia.org/wiki/HTTP :
    Условные GET
    Метод GET изменяется на «условный GET», если сообщение запроса включает в себя поле заголовка «If-Modified-Since». В ответ на условный GET, тело запрашиваемого ресурса передается только, если он изменялся после даты, указанной в заголовке «If-Modified-Since». Алгоритм определения этого включает в себя следующие случаи:
    Если код статуса ответа на запрос будет отличаться от «200 OK», или дата, указанная в поле заголовка «If-Modified-Since» некорректна, ответ будет идентичен ответу на обычный запрос GET.
    Если после указанной даты ресурс изменялся, ответ будет также идентичен ответу на обычный запрос GET.
    Если ресурс не изменялся после указанной даты, сервер вернет код статуса «304 Not Modified».
    Использование метода условный GET направлено на разгрузку сети, так как он позволяет не передавать по сети избыточную информацию.

  • Ответить

    Что же мешает Адриверу сделать настройки еще и такие, как у остальных внешних сервисов, чтобы ни один сервис по измерению скорости загрузки не ругался? Я говорю о Google Speed Test и Webpagetest.org?

    — https://developers.google.com/speed/pagespeed/insights/?url=www.popmech.ru
    — http://www.webpagetest.org/result/150609_3T_131M/1/performance_optimization

    Плохие оценки по скорости загрузки выдаются, например, из-за Адривера, а на Google DFP столько косяков не находится.

    На Sports.ru стоит Adfox, и на него тоже не ругаются эти сервисы:
    — https://developers.google.com/speed/pagespeed/insights/?url=http%3A%2F%2Fwww.sports.ru%2F&tab=desktop
    — http://www.webpagetest.org/result/150609_H5_13E2/1/performance_optimization/

  • Ответить

    to _kit, описываемый вами способ означает отсутствие какой-бы то ни было фронтенд-оптимизации (так делали до появления такой дисциплины), на что и жалуется топикстартер.
    Проблема с этим методом в том что latency возникает не только когда надо файл скачать, но и на каждой его проверке (с некоторым допущением — на каждый хит) и именно это latency беспокоит, а не скачивание обновлений.
    Способы борьбы описаны например тут (последняя книжка на эту тему от ведущего специалиста): https://www.safaribooksonline.com/library/view/High+Performance+Browser+Networking/9781449344757/ch13.html#CACHE_RESOURCES