Что со всеми загрузками, около 2015 года?

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

Контент, о котором идет речь, может быть чем угодно: от похвалы до мимолетного выражения человеческого лица, достижений Candy Crush, значков или действительно зловещих фрагментов «да, это скажет им!» партизанская порнография. Что бы это ни было, принципиальные люди, занимающиеся цифровой доставкой, вроде меня, просто хотят иметь возможность подавать четкие сигналы вам, потребителю. Когда наш контент будет готов к поглощению, мы хотим объявить об этом с помпой. Когда вы нажимаете на внутреннюю ссылку сайта, это согревает наши сердца, и мы хотим, чтобы вы сразу знали, что мы чувствуем. И когда запрошенный вами новый контент загружается, мы хотим как можно более извиняясь прояснить, что он почти готов, просто подождите.

Это вопрос доверия. Когда мы притворяемся, что веб-страница была загружена, только для того, чтобы обеспечить смертельную пару секунд прерывистой прокрутки, удивить поздние модальные окна или изображения, которые «лениво» загружаются с опозданием и продвигают первые несколько предложений, которые вы читали. за кадром снова, пользователи ненавидят нас немного больше. Когда веб-страница практически готова к просмотру, но браузер все еще показывает маленькие индикаторы выполнения, мы усилили ваше беспокойство и напрасно потратили ваше время. Хуже того, вы можете настолько отвлечься в ожидании, что начнете думать о жизни.

Было бы легко обвинить во всем этом недоверии сети онлайн-рекламы. И, к счастью, это одна из тех редких ситуаций, когда что-то одновременно просто и хорошо. Но они не полностью виноваты. Вместо этого давайте подумаем, как мы ответим на этот ключевой, основной вопрос: загружаете ли какой-либо веб-сайт, который вы сейчас загружаете, какой-либо новый контент (то есть то, что вам действительно важно, материал, который вы явно просили) или нет?

Вот в чем дело. Уже есть несколько золотых стандартов для определения ответа на этот вопрос, и они глубоко встроены в психику всех нас, любителей лолтусов. Они носят безумно расплывчатое название «индикаторы загрузки». И они в основном контролируются разработчиками браузеров.

Я говорю здесь о тонких подсказках пользовательского интерфейса от самого браузера (ваши Chrome, ваши Edge, ваши Firefox в сафари: программа, в основном, а не страница), которые сообщают людям, что браузер услышал и признал ваше безумное щелканье, что то, на что вы застряли и смотрите в настоящее время, теперь находится в заимствованном времени. Контент скоро появится.

Есть вращающийся фавикон. Практически незаметный затемняющий эффект. Маленькая синяя полоса прогресса в Safari. Небольшой журнал сетевой активности в левом нижнем углу Chrome и Firefox. Вращающийся курсор мыши. Вот отличное (хотя и устаревшее) краткое изложение того, что именно из этого мы можем ожидать и когда.

И в этом тоже заключается суть проблемы: многие из более быстрых, одностраничных и одностраничных способов доставки контента нового поколения, которые мы сегодня доставляем, просто не вызывают ни одного из этих замечательных сигналов. когда и как они, по праву, должны. Ajax, XMLHttpRequest, fetch (т. е. методы выполнения запроса ОТ страницы для некоторого дополнительного контента, а не запроса для всей новой страницы): они не вызывают никакой заметной реакции со стороны браузера.

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

Но это настоящая проблема, когда мы хотим создавать современные веб-приложения, которые разумно загружают именно то и только то, что им нужно для отображения нового контента, вместо того, чтобы тратить время на повторную загрузку и повторный анализ множества кэшированных (или, что более вероятно, не очень) хорошо кэшируется) ресурсы, необходимые для его отображения. Это означает, что эти гораздо более мелкие и более быстрые полезные нагрузки не получают должного фанфара, как ожидают пользователи, даже если концептуальным конечным результатом является новая «страница». Таким образом, когда кто-то явным образом запрашивает серьезное изменение контента, наше изящное маленькое приложение не имеет удовлетворительного способа сообщить им, что все классные вещи находятся в работе или когда они действительно завершены.

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

Есть несколько достойных шаблонов для использования более элегантных из них для полной загрузки страницы, но на самом деле ничто не сравнится с реальным. Настоящие вещи обладают глубокой, павловской, интуитивной силой. Спиннеры, напротив, чувствуют себя… невесомыми. Жалко даже.

Так почему бы разработчикам браузеров просто не дать веб-сайтам и веб-разработчикам прямой контроль над запуском и отменой этих замечательных сигналов? Я честно не знаю. Может быть, они опасаются, что идиоты будут злоупотреблять ими? Конечно, хотя мне трудно понять, зачем это кому-то нужно (ха-ха-ха, я заставил свой сайт выглядеть медленным, хотя на самом деле это нет, лол!).

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

И вот мы подошли к сути. На самом деле существует хитрый способ запускать и отключать индикаторы загрузки! Есть вещи, называемые iframes: страницы внутри страниц. фреймы подобны крошечным окнам на какой-то другой (часто невидимой) веб-странице. А так как загрузка этой страницы может занять некоторое время, и поскольку мы, разработчики, можем искусственно заставить эти вложенные страницы загружаться вечно, И затем просто отменить попытку, когда захотим, мы могли бы теоретически вызывать и отключать индикаторы загрузки по желанию. В некоторых случаях мы могли бы даже сделать это не хакерским способом, который использует сами iframe в качестве метода транспортировки для контента ajax-y вместо поддельных зависших страниц!

Ну не так быстро. Оказывается, в то время как некоторые настольные браузеры, в частности Chrome и Firefox, достаточно любезны, чтобы распространить это поведение загрузки на любой контент, загружаемый в iframe, другие, такие как Internet Explorer и Safari (а также практически все разновидности мобильных браузеров) предпочли дискриминацию.

Чтобы проиллюстрировать, что я имею в виду, вот восхитительный трюк в Safari, который может превратить любую страницу в одностраничное приложение без каких-либо индикаторов загрузки:

Просто перейдите на свой любимый веб-сайт (я предлагаю http://www.apple.com/), откройте консоль разработчика Safari (Command + Option + C), вставьте эту единственную строку кода , запустите его, и после короткого мигания вы сможете просматривать различные страницы на сайте без какого-либо надоедливого времени загрузки! О, конечно, может быть короткая необъяснимая задержка всякий раз, когда вы нажимаете на ссылку, но ЗАГРУЗКИ нет, и это важно.

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

В этом глупом сценарии я просто удаляю все текущее содержимое страницы и заменяю его ТОЙ ЖЕ СТРАНИЦЕЙ, только в огромном iframe размером с страницу. Во время навигации целые страницы действительно загружаются заново. Браузер просто не удосуживается сообщить вам об этом.

Зачем им это делать? Я имею в виду, что на современных веб-страницах в iframe загружается множество вещей. Разве вы, пользователь, не должны знать, что это происходит? Ну, в идеальном мире, наверное, да.

Но огромная часть этих вещей, по крайней мере, в более старых реализациях, — это реклама: либо броский вариант баннера, либо более скрытный рекламный транспорт, который позволяет Уолл-стрит делать ставки на ваши глаза (даже не шучу: это буквально что-то лавинообразное). сетевых запросов, которые вы никогда не запрашивали, заняты выполнением всякий раз, когда вы просматриваете веб-страницы: проведение аукциона в реальном времени на вашу рыночную стоимость на основе всех данных, которые они собрали о вас до сих пор).

Поскольку пользователи не думают об этих вещах как о «контенте», они обычно не очень прощают, если браузеры слишком долго «выглядят занятыми» во время загрузки, даже если эта загрузка на самом деле не мешает контенту, за которым они пришли. Таким образом, простое отключение индикаторов загрузки для всего, что происходит внутри iframe, — это один из способов заставить ваш браузер «чувствовать себя» намного быстрее: дискриминировать загрузку, которая, вероятно, не особенно важна для вашего потребления контента.

Может быть, это немного дешево, но кто будет судить? Каждый хочет, чтобы его браузер работал быстро, но при этом четко понимал, когда происходит важная загрузка. Отключение индикаторов iframe просто оказалось удачным, по крайней мере, по мнению некоторых поставщиков браузеров.

Я думаю, что я не так сильно одержим фреймами в частности: я просто расстроен тем, что в конце концов даже это одно хакерское окно оставшегося блаженства занятости было недоступно. А это значит, что у нас по-прежнему остается, в лучшем случае, куча неудовлетворительных альтернатив, которые могут имитировать несколько истинных индикаторов, но ничего исчерпывающего. Иногда мы можем раскрутить фавикон сами, если захотим. Мы можем создавать тонкие линии, выровненные по верхнему краю индикаторы выполнения (хотя обычно мы не можем основывать их прогресс на чем-то реальном и не можем выводить их за пределы самой страницы). Мы могли бы даже подделать строки состояния, выровненные по нижнему краю.

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