Почему веб-сайты не отображают свой текст сразу?

74256
this.lau_

Я заметил, что в последнее время многие сайты медленно отображают свой текст. Обычно загружаются фон, изображения и т. Д., Но текст отсутствует. Через некоторое время текст начинает появляться здесь и там (не всегда все одновременно).

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

Обратите внимание, что у меня медленное соединение, что, вероятно, подчеркивает проблему.

Ниже приведен пример - все загружено, но до окончательного отображения текста требуется еще несколько секунд:

Почему веб-сайты не отображают свой текст сразу?

440
В данном конкретном случае PortableApps.com использует шрифт «Ubuntu». Сначала Джон попробовал OpenSans, но мы довольно быстро переключились на Ubuntu. Я был основным сторонником переключения ... один способ, которым вы можете устранить проблему, установив семейство шрифтов самостоятельно. Если вы установите его с http://font.ubuntu.com/, он будет работать немедленно. Chris Morgan 11 лет назад 72
Ответ Дэниела - откровение. Я думал, что это сделано специально, чтобы мы могли просмотреть всю рекламу на странице. Manoj R 11 лет назад 21
Как указывалось здесь несколькими людьми, существует бесконечное количество причин для отображения текста неожиданными способами, поскольку отображение страницы ограничено только воображением разработчика / дизайнера, что имело место, по крайней мере, с тех пор, как коды положения ANSI позволяли выпускать бюллетень 1980-х годов. доски для реализации многопользовательских чатов и интерфейсов с перекрывающимися окнами с тенями. Meebo был одним из первых, кто воспроизвел некоторые из этих эффектов в браузере без апплета. «Работает противоположно, как раньше» значительно упрощает Интернет и даже не относится к определенному периоду времени. PJ Brunet 11 лет назад 1
Так зачем делать широкие обобщения об Интернете, основываясь на случайной заглавной странице экрана с сайта с низким рейтингом Alexa? Лучший ответ также делает смелое утверждение: «в настоящее время дизайнеры делают XYZ» должны быть подкреплены некоторыми действительными числами, такими как «5% веб-сайтов используют Google Web Fonts по состоянию на 2012 год» или что-то еще. PJ Brunet 11 лет назад 6
Но файлы шрифтов хранятся в кеше, этот сайт долго ждет загрузки m.aspx, они могут проверить эту часть user613326 11 лет назад 1
/ me помнит выбор одного браузера над другим на основе «порядка загрузки» Grady Player 11 лет назад 0
@ user613326, поэтому при переходе от страницы к странице сайта вы не получаете задержку загрузки шрифтов. Но если вы нажмете «перезагрузить», браузер должен будет повторно проверить все кэшированные файлы, и вы снова увидите задержку. tylerl 11 лет назад 0
@tylerl Вы пытались отслеживать время загрузки страницы? попробуйте использовать fidler (работает с FF) (также перезагрузка каждой страницы не является нормальным поведением при просмотре. Но, возможно, у него размер наличных денег равен нулю МБ) user613326 11 лет назад 0
@ user613326: ну, с Firefox Portable размер кеша * обычно * 0 МБ. Не могу вспомнить, есть ли в Chrome Portable это или нет. Chris Morgan 11 лет назад 0
@ chriss Morgan, ну нет, это не по умолчанию, firefox автоматически резервирует размер кэша, который * переменный>, перейдите на> Параметры> Дополнительно> вкладка сети [там посмотрите на Кэшированный веб-контент]. Вы можете переопределить значение по умолчанию и установить его на ноль или фиксированный размер, я бы не советовал ставить его на ноль, если вам нравится какая-то скорость. (* установка по умолчанию на основе свежей установленной Linux Mint) Или, может быть, вас смутило автономное хранилище веб-контента, которое в других случаях при автономном просмотре в некоторых случаях сохраняет настройки. user613326 11 лет назад 0
@chriss Wiki говорит, что Firefox portable используется для отключения дискового кэша. Но это было на старой версии 2.0, и это больше не по умолчанию. sourcejedi 11 лет назад 0
У меня есть ссылка 512 Кбит / с (что ниже среднего уровня в сегодняшнем возрасте), и общее впечатление о веб-сайте, которое вы упомянули, хорошее, иногда это занимает одну миллисекунду, а иногда - нет. Поэтому я думаю, что дизайнеры не должны беспокоиться об использовании веб-шрифтов .... Syed Aqeel Ashiq 11 лет назад 0

8 ответов на вопрос

483
Daniel Andersson

One reason is that web designers nowadays like to use web fonts (usually in WOFF format), e.g. through Google Web fonts.

Previously, the only fonts that were able to be displayed on a site was those that the user had locally installed. Since e.g. Mac and Windows users not necessarily had the same fonts, designers instinctively always defined rules as

font-family: Arial, Helvetica, sans-serif; 

where, if the first font wasn't found on the system, the browser would look for the second, and lastly a fallback "sans-serif" font.

Now, one can give a font URL as a CSS rule to get the browser to download a font, as such:

@import url(http://fonts.googleapis.com/css?family=Droid+Serif:400,700); 

and then load the font for a specific element by e.g.:

font-family: 'Droid Serif',sans-serif; 

This is very popular to be able to use custom fonts, but it also leads to the problem that no text is displayed until the resource has been loaded by the browser, which includes the download time, the font loading time and the render time. I expect that this is the artifact that you are experiencing.

As an example: one of my national newspapers, Dagens Nyheter, use web fonts for their headlines, but not their leads, so when that site is loaded I usually see the leads first, and half a second later all the blank spaces above are populated with headlines (this is true on Chrome and Opera, at least. Haven't tried others).

(Also, designers sprinkle JavaScript absolutely everywhere these days, so maybe someone is trying to do something clever with the text, which is why it is delayed. That would be very site specific, though: the general tendency for text to be delayed in these times is the web fonts issue described above, I believe.)


Addition

This answer became very upvoted, though I didn't go into much detail, or perhaps because of this. There have been many comments in the question thread, so I'll try to expand a bit (a lot of comments seem to have disappeared a short while after the topic was protected — some moderator probably manually cleaned them). Also, read the other answers in this thread as they all expand in their own ways.

The phenomenon is apparently known as "flash of unstyled content" in general, and "flash of unstyled text" in particular. Searching for "FOUC" and "FOUT" gives more info.

I can recommend web designer Paul Irish's post on FOUT in connection with web fonts.

What one can note is that different browsers handle this differently. I wrote above that I had tested Opera and Chrome, who both behaved similarly. All WebKit based ones (Chrome, Safari, etc.) choose to avoid FOUT by not rendering web font text with a fallback font during the web font loading period. Even if the web font is cached, there will be a render delay. There are a lot of comments in this question thread saying otherwise and that it is flat out wrong that cached fonts behave like this, but e.g. from the above link:

In what cases will you get a FOUT

  • Will: Downloading and displaying a remote ttf/otf/woff
  • Will: Displaying a cached ttf/otf/woff
  • Will: Downloading and displaying a data-uri ttf/otf/woff
  • Will: Displaying a cached data-uri ttf/otf/woff
  • Will not: Displaying a font that is already installed and named in your traditional font stack
  • Will not: Displaying a font that is installed and named using the local() location

Since Chrome waits until the FOUT risk is gone before rendering, this gives a delay. To which extent the effect is visible (especially when loading from cache) seems to be dependent on among other things the amount of text that needs to be rendered and perhaps other factors, but caching does not completely remove the effect.

Irish also has some updates concerning browser behavior as of 2011–04–14 at the bottom of the post:

  • Firefox (as of FFb11 and FF4 Final) no longer has a FOUT! Wooohoo! http://bugzil.la/499292 Basically the text is invisible for 3 seconds, and then it brings back the fallback font. The webfont will probably load within those three seconds though… hopefully..
  • IE9 supports WOFF and TTF and OTF (though it requires an embedding bit set thing– mostly moot if you use WOFF). HOWEVER!!! IE9 has a FOUT. :(
  • Webkit has a patch waiting to land to show fallback text after 0.5 seconds. So same behavior as FF but 0.5s instead of 3s.
  • Addition: Blink has a bug registered for this too, but it seems a final consensus has not been reached regarding what to do with it - currently same implementation as WebKit.

If this was a question aimed for designers, one could go into ways to avoid these kinds of problems such as webfontloader, but that would be another question. The Paul Irish link goes into further detail on this matter.

Пробовал ли кто-нибудь из браузеров отображать текст сначала доступным шрифтом и повторно отображать его после загрузки предпочтительного шрифта? Steve Bennett 11 лет назад 7
Да, прокомментируйте следующий ответ: http://paulirish.com/2009/fighting-the-font-face-fout/ Steve Bennett 11 лет назад 4
@ratchetfreak было бы неудобно переформатировать страницу, так как шрифты, вероятно, не будут иметь одинаковые метрики Samuel Edwin Ward 11 лет назад 5
некоторые предпочли бы перейти к чтению при просмотре веб-страницы, вместо того, чтобы долго ждать загрузки шрифта ratchet freak 11 лет назад 6
@ SteveBennett Я уверен, что это именно то, что делает Internet Explorer 10. Я никогда не видел текст, появляющийся позже. Для меня это всегда текст, который появляется в каком-то «стандартном шрифте», а через несколько секунд он меняется на стилизованный / загруженный. Я не уверен, выберет ли он следующий CSS или просто системное значение по умолчанию. Редактировать: Ах, хорошо, так что это просто Webikit со скрытым текстом? Я бы посчитал это раздражающим и плохим поведением. Есть ли браузер, игнорирующий / скрывающий прогрессивную загрузку изображения? Mario 11 лет назад 0
@ user613326: будет задержка, даже если шрифт будет кэширован. Есть много людей, оспаривающих это среди комментариев, но это не делает его ложным само по себе. Время синтаксического анализа и рендеринга остается, даже если время загрузки прошло (хотя задержка для веб-сервера для получения HTTP 200 все еще необходима), а на сложных страницах это составляет очень заметные задержки. Просто попробуйте. Он может быть изменен хитростями разработчиков, как упомянуто в связанном сообщении в блоге и проекте webfontloader, но на самом деле это не главное в данном вопросе: _why_ происходит ли FOUT _ когда это происходит? Daniel Andersson 11 лет назад 0
Следует отметить, что его поведением можно управлять, по крайней мере, в Firefox с помощью настроек `gfx.downloadable_fonts.enabled` и` gfx.downloadable_fonts.fallback_delay`. Первый позволяет полностью отключить загрузку веб-шрифтов, а последние - те 3 секунды, которые вы упомянули, пока шрифт не будет отображен в качестве запасного. Насколько я мог проверить, это означает, что текст get отображается напрямую, а затем применяется веб-шрифт. Что гораздо более желательное поведение для меня. Bobby 10 лет назад 0
По сравнению со средними размерами изображений в наши дни загрузка шрифтов относительно невелика. В большинстве случаев взгляд fidler или разработчика на IExplorer или взгляд разработчика на Firefox (хит F12) покажет вам, откуда происходит медленное создание страниц. Чаще всего это вызвано внешним кодом, таким как размещенные счетчики страниц, статистика Google, анализаторы трафика или сам сервер, может иметь неоптимизированный код java / php / asp, контент для больших сайтов часто хранится в базах данных, и даже они могут быть медленными, тогда как верстка страниц на таких сайтах стандартная (кэшированная) и загружается быстро. user613326 9 лет назад 0
117
Marcel

The reason for this is the text you can't read yet is being rendered with a web font that is still on its way down the pipes to your browser.

Also, since your browser is Google Chrome, which uses WebKit to render the page, it was decided by them (WebKit that is) that it's best for you not to see any text at all until the web font is downloaded. If, however, you're a developer that would prefer the text to be readable in a suitable fall-back system font instead, then you can use something like Google's WebFont Loader to achieve this.

К сожалению, это неправильный ответ, если вы зайдете на эту страницу один раз, файл шрифта будет находиться в вашей наличной сети; для других страниц на этом сайте или других веб-сайтов, использующих этот шрифт, он будет получен наличными. user613326 11 лет назад 0
19
KevSheedy

Краткий ответ: AJAX или WOFF

Есть несколько причин, по которым веб-сайты «медленно отображают свой текст» . Медлительность на portableapps.com вызвана загрузкой шрифтов WOFF . Однако то, что вы описываете как «текст начинает появляться здесь и там», чаще всего вызывается AJAX .

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

  • Начальная HTML-страница
  • CSS
  • JS
  • Изображений
  • Шрифты WOFF
  • AJAX-запросы
  • Манипулирование DOM

Традиционно сайты:

Традиционно разработчики обычно помещали текстовое содержимое на исходную HTML-страницу и отображали его, как только оно было доступно . HTML будет ссылаться на несколько ресурсов, которые затем будут загружены. Затем браузер будет постепенно перерисовывать экран, чтобы включить стили и изображения по мере их появления. AJAX и WOFF не были доступны.


Веб-сайты WOFF:

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


Сайты AJAX:

Некоторые разработчики предпочитают не включать текстовое содержимое в исходную HTML-страницу. Вместо этого они выбирают для загрузки текстовое содержимое с использованием AJAX. Это происходит после загрузки базовой страницы . По моему опыту, этот метод получил гораздо более широкое распространение, чем шрифты WOFF, и чаще всего является причиной медлительности, которую вы описываете.


Определение причины

Чтобы определить причину для конкретного сайта, необходим анализ с использованием таких инструментов, как Firebug или Chrome Developer Tools . Или же вы можете открыть сайт с помощью Internet Explorer 8, который поддерживает AJAX, но не WOFF. Если сайт все еще работает медленно, проблема в AJAX, а не в WOFF.

14
Greg H

I often it may be a deliberate choice to avoid the "flash of unstyled content". If the text displayed before the CSS was loaded, you'd briefly see it as it appears raw, and then a flash as the browser redraws it. By putting in some basic inline styles to initially hide the content, that are overridden in the actual stylesheet, or using JS, developers avoid this flash.

В девяти случаях из десяти это не будет преднамеренным, это просто побочный эффект от встраивания веб-шрифтов самым простым способом. На самом деле, требуется немного больше усилий, чтобы представить видимую альтернативу, пока веб-шрифты начинают работать. См. Https://developers.google.com/webfonts/docs/webfont_loader. Marcel 11 лет назад 6
@Marcel - это может быть вызвано медленными таблицами стилей, а также медленными шрифтами, см. Http://www.phpied.com/css-and-the-critical-path/ r3m0t 11 лет назад 0
Код для предотвращения «вспышки полезного контента», как правило, предотвращает появление изображений, а также текста. Jon Hanna 11 лет назад 0
Я изо всех сил пытаюсь понять, почему текст без стиля хуже, чем текст вообще. Я предпочел бы начать читать акцепт, который может немного колебаться. Я нахожу это более резким, когда он внезапно появляется из ниоткуда, и очень расстраивает, когда страница загружена, и вы вынуждены ждать шрифта. Richard Le Poidevin 11 лет назад 0
8
Bryan McQuade

As others have noted, custom fonts are likely contributing to the delay.

To give a little more background, the browser is doing roughly the following before it can render the page contents to the screen:

  1. fetch HTML (several round trips for DNS, TCP, request/response)
  2. begin to parse HTML, discover external resources such as external CSS and JS. Note that CSS blocks layout, and JS blocks parsing. So external resources like CSS and JS loaded early in the document (e.g. in the head) slow down the time it takes for a page to display content on the screen.
  3. fetch external CSS and JS (several round trips: DNS and TCP if these resources are on a different domain such as CDN, as well as an RTT for the request/response)
  4. once the external CSS and JS have finished loading, parse/execute JS, parse/apply styles
  5. if the CSS makes reference to custom fonts, those fonts now have to be downloaded as well, resulting in additional round trip delays to render any parts of the page that depend on the custom fonts

Though it isn't about the delays caused by custom fonts specifically, I wrote a blog post recently that gives additional information about the causes of render delays. It gives some suggestions to minimize the time to first paint for your pages. Hopefully this is useful for readers interested in making their pages display content faster, including those pages that want to use custom fonts: http://calendar.perfplanet.com/2012/make-your-mobile-pages-render-in-under-one-second/

4
Benny

Short answer: Developers.

When link and script tags referencing external documents (like .css or .js files) are placed in the head of the document (higher in the flow than the body, and its elements), they are loaded first. JavaScript executes from the markup that references it; if there is a lot of code to process, or it's cumbersome code, or more commonly if the text you expect to see is being rendered on a server and populated into the document on load -- and that server-sided code is also cumbersome, large, or blocking I/O due to processing of several concurrent requests, you may certainly notice downtime before the HTML has had a chance to even render. Some developers choose to load non-view-related JavaScript after markup and styles (at the end of the body), and the best try to be more conscious of how their technology decision will affect the overal user experience when implemented.

Internet connection speed plays a role in the slow downloading of data, quite obviously, but poorly written code, or poorly designed technology stacks (for the type of website) play an increasingly central role in the slow loading of dynamic content, as faster network connections approach ubiquity.

Нет, то, что вы описываете, может блокировать отображение элементов DOM, но не только текста. Ответ связан с заменой шрифта и является ** ошибкой разработчиков **, а не разработчиков. Toby 11 лет назад 21
+1 @ Тоби, потому что это действительно вина дизайнеров. Это очень раздражает, если вы находитесь на медленной линии связи (например, о, я не знаю, мой мобильный телефон или стационарный телефон дома). Подобные вещи просто замедляют работу сайтов и раздражают пользователей без какой-либо выгоды. Magnus 11 лет назад 0
Длинный ответ: разработчики, разработчики, разработчики, разработчики. iono 11 лет назад 1
@Toby Дизайнеры определяют, какие шрифты использовать, да, но каждый хороший разработчик должен сделать правильный выбор во время технической реализации. Хороший разработчик также поймет, почему это происходит (объяснено в ответе выше), что можно сделать, чтобы избежать проблемы (Google Webfont Loader), и как это влияет на работу. arbales 11 лет назад 0
3
Michael Dillon

Короче говоря, слишком много загружаемых объектов, которые необходимо загрузить из отдельных HTTP-запросов GET до отображения страницы, и чрезмерная зависимость от средней задержки как показателя работоспособности сайта.

Первый относится ко всем тем .css, .js и веб-шрифтам, которые загружает страница, не говоря уже о том, что многим сайтам также необходимо извлекать объекты JSON через XHR-запросы, а затем генерировать HTML из тех, которые используют какой-то шаблонизатор.

Но почему они не замечают, что сайт работает медленно?

Возможно, потому что у них где-то есть memecache, чтобы ускорить процесс (или просто полагаться на кеши файловой системы), и они измеряют состояние своего сайта с использованием средней задержки. Таким образом, кэшированные объекты возвращаются с задержкой в ​​6 микросекунд и маскируют тот факт, что для выполнения многих запросов GET требуется 5000 миллисекунд. Средние должны умереть. Да здравствует счет RTT за допустимый максимальный порог! Это число должно быть 0 или, по определению, RTT недопустимо.

-1
user613326

Well there are multiple reasons. One reason is also that commands to define a background or on top of a html page often Or retrieved in a separate CSS that is loaded first. before the body of the document is loaded which contains the text.

Another cause is that although it is possible to type the size of an image in most cases web designers don't make use of that. And so the brouwser has to load the whole images first on the pages so that it knows how to wrap text around it.

Some designers, also wants to show first pictures and next text, they achieve that by some javascript so for example a simple page will first show a banner and then everything else on it.

But if your wondering why there is so much spam commercial stuff on my pages while i only want to read the news, then there is a solution for you. You can make use of spam-blockers if your using firefox. With such an addon the webrowser knows sites that provides spam, and simply blocks them, resulting in a much faster page load, while your still be able to see the important images that relate to the articles you read.

I would recomend to all of you who deal with slow page loading to try fidler. fidler can be used with IEexplorer or with FireFox (using its proxy function) Fidler will actually show you how long it actually takes and when parts of a web page are loaded. It is a HTML debugging tool.

так что вы пытаетесь помочь людям и получить голосование разве это не весело? Хорошо, я подумаю дважды еще раз, прежде чем объяснять людям технические вещи в терминах непрофессионалов. user613326 11 лет назад 0
Вы объяснили что-то не то, поэтому вы получаете отрицание. Как видно на скриншоте, страница полностью загружена, только текст не отображается. Это не имеет ничего общего с изображениями. Femaref 11 лет назад 21
Тело документа почти всегда загружается перед внешним CSS. Браузер не прекращает парсинг страницы только для загрузки внешнего контента. Попытка помочь полезна, только если вы действительно помогаете. Дезинформация хуже, чем отсутствие информации. raylu 11 лет назад 8
@raylu Я не знаю об этой дезинформации. Просмотр ответа с большим количеством отрицательных отзывов иногда может быть очень полезным. :-) LarsTech 11 лет назад 1
Привет @ user613326: мы поощряем честное голосование здесь, поскольку мы в первую очередь здесь, чтобы предоставить полезные ответы для сообщества. Не принимай это на свой счет! Flimm 11 лет назад 7
@raylu, что заставило тебя так думать ?? попробуй фидлер user613326 11 лет назад 0
@ Femaref Я просто удивляюсь хорошему ответу здесь, кто-нибудь из вас видел фактическую загрузку файла шрифта по проводам, или это просто звучало как хороший ответ, потому что при трассировке сети не отображается файл 2 МБ для постоянной загрузки .. изображения загружаются первыми из-за рендеринга страницы. user613326 11 лет назад 0

Похожие вопросы