Intereting Posts
Можно ли сделать класс / объект для таблицы базы данных? Странное поведение PHP time math: Почему strtotime () возвращает отрицательные числа? PHP: статические и нестатические функции и объекты xcache Как это работает? охват кода? башмаки? OOMS? htaccess перенаправляет с маскировкой домена, не работающей при запросе корневого каталога Создайте путь как для Linux, так и для Windows Действительная архитектура для очереди сообщений и рабочей системы в PHP? MySQL к MySQL клон с PHP загрузка на сервер mysql не работает Позвольте пользователям создавать свои собственные настраиваемые параметры меню, сохраняя при этом значения по умолчанию для приложений Как исправить это: «Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, boolean задан в //"? Пока цикл застревает в первом результате запроса Zend Form – Как установить значения на элементах подформы? Zend Framework 2 – Целочисленная проверка формы Как вынуть анкерный элемент из эха (functions.php) и поместить его в тело (index.php)?

Убедитесь, что браузер отображает все сразу

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

Решения, о которых я подумал:

  1. Буферизация вывода – ob_start и ob_end_flush в верхней и нижней части моего PHP-скрипта, чтобы убедиться, что ничего не отправлено перед обработкой скрипта.
  2. Загрузите всю DOM в Javascript-переменную, а затем повторите ее после загрузки.

Что вы считаете лучшим способом, который будет работать на всех браузерах и даже на медленных компьютерах? Я не тестировал его на различных платформах и компьютерах с разной скоростью и оперативной памятью. Если у вас есть опыт работы с тяжелыми сайтами СМИ или у вас есть лучший способ, сообщите мне, какой путь принять.

Если вы можете позволить себе полагаться на JavaScrip, есть простое и эффективное решение для одновременного отображения всего содержимого .

  1. Поместите белый слой поверх всего окна. Это скрывает весь контент.
  2. Используйте window.onload события window.onload чтобы скрыть / удалить слой покрытия.
  3. Используйте окно события window.onunload чтобы снова отобразить скрытый слой.

Слой:

  ... <style> html, body{ height: 100%; } #hiding { display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; background: #fff; } </style> </head> <body> <div id="hiding"></div> ... 

События JavaScript:

  ... <script> window.onload = function () { document.getElementById('hiding').style.display = 'none'; }; window.onunload = function () { document.getElementById('hiding').style.display = 'block'; }; </scritp> </body> </html> 

ПРИМЕЧАНИЕ. НЕ помещайте эти стили и код JavaScript во внешние файлы.

ПРИМЕЧАНИЕ 2: Было бы неплохо разместить загрузочный счетчик посреди скрытого слоя. Вы можете добавить это в #hiding { ... } style block: background: #fff url(/images/spinner.gif) center center;

Когда браузер запрашивает HTML-документ, он вызывает HTTP-вызов. Затем он начинает изучать содержимое страницы, а когда находит внешние ресурсы (css-файлы, скрипты, изображения), он делает асинхронно другие HTTP-запросы (обычно не более 2 на один и тот же сервер) и когда ресурс успешно извлекается (или даже раньше, если это CSS), он начинает его изучать.

Итак, на стороне PHP вы ничего не можете сделать (буферизация вывода? Почему вы думаете, что он должен работать?)

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

Чтобы ускорить поиск изображений, вы можете использовать высокоскоростные серверы (CDN) или (даже лучше, если это необходимо), вы можете объединить все ваши изображения в один большой и разделить на стороне клиента. Это часто используется, если ваше приложение действительно игра.

  1. Размещение изображений в CDN
  2. Используйте кеширование изображений или страниц, например timthumb
  3. Предварительная загрузка изображений с помощью javascript или jquery
  4. Используйте div или раздел, а не таблицы для макетов. (Я помню те старые школьные сайты и как они загружаются)
  5. Используйте прогрессивный формат изображения
  6. Сжатие GZIP

Когда php заканчивается, он выдает HTML-код и внутри, путь источника изображения (и css, js и т. Д.) Тоже. Затем браузер начнет новые запросы, чтобы получить это внешнее содержимое, требуемое на странице.

Если вы пытаетесь распечатать все когда-либо сразу (как только изображения и другие ресурсы будут полностью загружены), вы можете сделать это с помощью css и js ..

С помощью css вы можете скрыть «главную обертку» страницы, с индикацией display: none. Если вы хотите, у вас может быть «загружаемый» текст или изображение на основе gif, чтобы показать конечному пользователю, что страница в настоящее время загружается. ,

Затем в javascript реализует window.onload callback (не событие jquery ready). Событие Window.onload будет запускаться после того, как dom будет готов, и все ресурсы будут полностью загружены. Это можно увидеть во втором абзаце

Затем в этом обратном вызове onload вам просто нужно отобразить: заблокировать содержимое скрытой «основной оболочки» и удалить или скрыть сообщение «загрузка».