Дмитрий Радищев (dibr) wrote,
Дмитрий Радищев
dibr

браузерное

     "В браузере должно быть всё прекрасно". Иначе браузер может стать "основным", но не сможет стать "единственным" :-)
     Сегодня сам собой случился небольшой эксперимент. Есть страничка с ~200 "среднего размера" (~300x400) картинок. В силу то-ли тонкости канала, то-ли хилости веб-сервера, то-ли нюансов работы прокси, а может быть и внутренних особенностей браузеров, все 200 картинок с первой попытки полностью не показываются - обязательно будет несколько битых (загруженных не полностью) картинок. А дальше - пытаемся все-таки загрузить все картинки целиком. Имеем...
       - Google Chrome: опции "перезагрузить картинку" нет (собственно, возникает такое ощущение что разработчики хрома вообще люто ненавидят картинки - набор опций для картинок даже не минималистичный, он какой-то нечеловеческий: нет даже "свойств", зато есть "copy image URL"), перезагрузка страницы, в том числе многократная, ничего не даёт;
       - Опера 9.52: для картинок есть опция "reload image", которая в данном случае ровным счетом ничего не делает (и даже не делает вид что что-то делает). Перезагрузка страницы тоже ничего не даёт (кстати, есть у оперы старый глюк, когда она при каких-то условиях делает вид что перегружает страницу, на самом же деле перегружает часть "реквизитов" страницы (img, css), а на саму страницу не делается даже get-запроса). Короче, не работает, даже если нажать reload несколько раз;
       - MSIE7: при начальной загрузке показал половину картинок в виде "икона битой картинки", после первой же перезагрузки страницы - показал полностью все картинки. Умничка, даже не ожидал от "микрософтовской тулзы для рендера html" такой прыти :-)
       - Мозилла 3.0.4: сработало! То есть при первой загрузке было несколько битых (недозагруженных) картинок, но после перезагрузки страницы они дозагрузились. Что не может не радовать - есть хотя бы один браузер (т.е. не MSIE, ибо он не браузер), в котором можно относительно нормально смотреть странички с кучей картинок при нестабильной их загрузке.

     И упреждая "ну сам подумай, откуда браузер знает", "ну он же просто из кеша берет" и "а ты про if-modified-since слышал?", напишу вот что. Размер картинки, не синтезируемой "на лету" скриптом, а спокойно лежащей на диске, известен заранее. Все нормальные (не писаные студентами за пять минут на перле коленке) веб-сервера при отдаче статического контента сообщают этот размер в заголовке ("Content-Length" и "Content-Range"). Поэтому даже если браузер при сбое загрузки по каким-то причинам получил не connection reset (т.е. "соединение оборвалось") а connection closed ("соединение штатно закрыто удаленной стороной", такое возможно, например, если удаленный сервер при обрыве делает соединению не reset а close, или если прокси-сервер не умеет передавать принятый reset с серверной стороны на клиентскую), браузеру всё равно известно, что файл не загружен до конца (поскольку фактический размер принятого файла меньше обещанного в заголовке), и кешировать его в таком виде как бы нежелательно, а уж отказываться перезагружать заведомо битый файл при явной просьбе пользователя - некоторая наглость со стороны браузера. Вызванная скорее всего тем, что размер из заголовка просто не учитывается.
     А ещё у вас в америке негров линчуют хром, видимо по той же причине, иногда спокойно ставит галку "всё классно" на загруженные не до конца файлы. То есть, если прилетел connection reset - то да, "файл загружен не полностью", а если прилетел connection close - то пофиг что из 10 метров загружено всего 2 - соединение же штатно закрыто, значит всё ок :-)

     Как-то так :-)
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 32 comments