HTML и отображение элемента


Я пытаюсь понять, позволяет ли сеть просматривать прогрессивный JPEG или нет.

Предположим, что у нас есть сервер, где (см. прогрессивные jpeg):

$ identify /var/www/test.jpg
/var/www/test.jpg JPEG 2048x1080 2048x1080+0+0 8-bit DirectClass 129KB 0.020u 0:00.019
$ identify -verbose /var/www/test.jpg | grep Inter
  Interlace: JPEG

Теперь, если мы разместим следующий HTML-документ:

$ cat /var/www/test.html
<!DOCTYPE html>
<html>
<head><title>jpg test</title></head>
<body>
<p><img src="test.jpg" width="256" height="128"></p>
</body>
</html>

Я пытаюсь понять, требуется ли (в соответствии с img element) агент пользователя для загрузки целого 2048x1080 изображение, в то время как область рендеринга только 256x128.

Или наоборот a User Agent , разрешено учитывать область рендеринга: 256x128, и поэтому выводить его можно только из обработки части прогрессивного JPEG. Зная, что нет смысла иметь полное разрешение, так как оно не добавит никаких деталей к изображению (ну технически качественный слой должен влиять даже при низком разрешении, это просто для упрощения).

Как правило, я хотел бы знать в таком приложении, как google maps, может ли агент пользователя прервать (приостановить?) извлечение отображаемых в данный момент изображений, поскольку пользователь решает увеличить некоторые из них, основываясь только на частичном результате распаковки прогрессивного JPEG (весь JPEG еще не находится на стороне пользователя).

4 11

4 ответа:

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

Страница W3 в JPEG говорит следующее:

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

Поскольку включение тега IMG обычно означает, что вы хотите, чтобы браузер загрузил этот ресурс, он не собирается прерывать его на полпути просто потому, что он определил, что он загружен "достаточно". Браузер также не знает, что вы собираетесь делать с изображением позже - возможно, вы увеличите его позже, или, возможно, ему нужно будет показать его позже в другом размере. Частичная загрузка один раз означает, что браузер, возможно, придется загрузить снова позже.

И статья Википедии О JPEG указывает:

Однако прогрессивные JPEG-файлы не так широко поддерживаются,и даже некоторые программы, которые их поддерживают (например, версии Internet Explorer до Windows 7)[12], отображают изображение только после его полной загрузки.

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

Короткий ответ: нет стандартного способа прервать img (прогрессивный или другой), не оставив или не прервав страницу или не изменив src тега (и это удалит частичное изображение). Я не знаю ни одного Хака, который бы это сделал.

Хотя это звучит как хорошая функция, это было бы проблематично для существующих веб-сайтов в следующих распространенных случаях:

  • галерея изображений, использующая большие прогрессивные изображения в качестве миниатюр + предварительная загрузка (т. е. Галерея делает это)
  • любой веб-сайт, который полагается на события onload для изображения (в какой момент ваше наполовину отрисованное изображение будет считаться "загруженным", если оно может прерваться/приостановиться)?

Только по этим причинам это было бы плохой идеей, если не добавить к спецификации в качестве атрибута (например, устаревший атрибут lowsrc или, возможно, какой-то атрибут allowpartial, где вы явно просите такое поведение). Как человек, который следил за дискуссиями WHATWG, я могу сказать вам, что это почти наверняка будет отклоняется сразу по той простой причине, что это добавляет сложности для решения пограничной проблемы. Если бы эта функция действительно требовалась, то спрос на нее был бы задолго до того, как широкополосная связь стала почти универсальной. На данный момент в игре это по существу избыточно с умным использованием Javascript и / или миниатюр.

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

Поведение браузера можно легко проверить с помощью сторонних плагинов, таких как"Firebug". эти плагины могут показать вам ход создания страницы, что запрашивается и сколько байт отправляется на сервер и с сервера. В Firebug это можно увидеть во вкладке "Net".