2014-12-04 3 views
-1

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

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

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

Страница:Эхо большого количества HTML без браузера замораживания

<table> 
    echo $rows; 
</table> 

$ строки значение (пять тысяч строк, каждая строка со следующей структурой):

<tr> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
</tr> 
+6

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

+1

Замораживание браузера не удается завершить загрузку страницы. Вы не можете контролировать это с помощью PHP - лучше всего выводить заданное количество полей и использовать разбиение на страницы/фильтрацию, как сказал @TimLewis. –

+0

Возможно, вы можете попробовать использовать вызов AJAX для захвата HTML, а не эха. Вы планируете разбивать на страницы результаты, не так ли? Вы могли бы попросить меньшие куски таким образом. Я имею в виду, есть 5000 строк ... если это так, это будет отличный подход! – Todd

ответ

0

Все предложения о различных способах не создает массивные столы полностью справедливы. Тем не менее, эта проблема заключается в том, что браузер не может отобразить таблицу до тех пор, пока не узнает все в таблице (чтобы она могла регулировать ширину столбца и т. Д.).

Если вы настроены на создание массивных таблиц, лучше всего оптимизировать свойства отображения таблицы. Это супер старая статья MSDN содержит информацию о способах ускорения браузера рендеринга HTML таблиц: Building High Performance HTML Pages

По существу, использование фиксированных размеров таблиц:

Таблицы являются отличным способом организации информации. До того как CSS позиционирование было реализовано в Internet Explorer 4.0, многие авторы HTML даже использовали таблицы для размещения элементов на своей странице. Теперь, если вы все еще используете таблицы для достижения последнего, вы должны использовать Каскадные таблицы стилей (CSS). Internet Explorer 5 предлагает еще лучшую производительность тем, кто обнял CSS.

Конечно, это не исключает использование таблиц вообще. Таблицы по-прежнему имеют место, и когда вы их используете, вы должны указать атрибут CSS таблицы-макета для достижения оптимальной производительности из Internet Explorer 5 или более поздней. Сделав следующее, вы разрешите Internet Explorer начать рендеринг таблицы до того, как она получит все данные.

  • Установить атрибут CSS таблицы-макета на фиксированную таблицу.
  • Явное определение объектов col для каждого столбца.
  • Установите атрибут WIDTH для каждого столбца.

Опять же, это действительно старая информация, но она по-прежнему действует в этом случае.

Попробуйте и убедитесь, что это помогает ускорить рендеринг ваших гигантских таблиц.

0

PHP является сервер односторонне, она не может повлиять на ваш браузер , Конечно, сервер может иметь время ответа как 5 минут, но он никогда не заставляет замораживать браузер. Фактически зависание может быть javascript или ударной вспышкой.

PHP работает таким образом:

1) разбирает весь код PHP 2) Создать HTML-код на стороне сервера 3) посылает HTTP заголовки и HTML-код клиента (браузера)

так никогда не будет отправьте что-нибудь, пока не закончите создание HTML-кода.

0

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

JQuery: (непроверенные)

<html> 
    <head> 
    <title>Your page!</title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    function loadstuff() { 
     // Borrowed from: http://www.w3schools.com/jquery/jquery_ajax_get_post.asp 
     $.get("get_rows.php",function(name,data){ 
     $("#table123 tr").append("<td>"+name+" ... "+data+"</td>"); 
     }); 
    } 
    window.onload = loadstuff; 
    </script> 
    </head> 
<body> 
    <h1>Load some stuff</h1> 
    <table id="table123"> 
    <tr> 
    </tr> 
    </table> 
    </body> 
</html> 

плавающего фрейма:

<html> 
    <head> 
    <title>Your page!</title> 
    </head> 
    <body> 
    <h1>Your Page!</h1> 
    <iframe src="www.example.com/slow_loading_rows"></iframe> 
    </body> 
</html> 
Смежные вопросы