страница PHP с включениями компилируется и отправляется как одна страница? - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть страница PHP, где верхний и нижний колонтитулы включают PHP.

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

Причина, по которой я спрашиваю, состоит в том, что я видел интересное приложение PHP, которое, казалось, сохраняло соединение открытым и делало что-то последовательно, прежде чем закрывать соединение - мне было интересно, если это то, что происходит сincludes.

Версия PHP - 5.3.6

РЕДАКТИРОВАТЬ: я действительно хочу, чтобы страница загружалась все сразу, чтобы предотвратить затирание моего макета при загрузке каждого бита.Извините всех, кто неправильно понял это

Ответы [ 5 ]

4 голосов
/ 07 сентября 2011

PHP собирает и компилирует их;все идет в браузер как один документ.Если вы этого не хотите, вам придется что-то делать с XMLHTTPRequest на веб-интерфейсе

2 голосов
/ 07 сентября 2011

Обычно любой выход будет выводиться по мере его генерирования.

echo 'A';
sleep(1000);
echo 'B';
sleep(1000);
echo 'C';

Это медленно выводит «ABC».Включения включаются, когда они встречаются, так же, как echo выводит что-либо в этой конкретной точке.Все в порядке, никогда не асинхронно.

Веб-сервер может буферизовать весь вывод перед отправкой любого из них клиенту.В приведенном выше примере вы получите "ABC" все вместе через 2 секунды ничего.

1 голос
/ 07 сентября 2011

Если ваша цель - получить все страницы сразу, вам нужно использовать ob_start () и ob_end_flush (). Сделайте что-то вроде:

ob_start();
...
write all your outputs
...
ob_end_flush();

Это заставит сервер буферизовать вывод, пока вся страница не будет подготовлена.

Удачи!

1 голос
/ 07 сентября 2011

Я использую следующую архитектуру при загрузке страницы в моем приложении:

index.php

<script src="path/to/js/lib/jslib.js" type="text/javascript"></script>

window.addEvent('load', function()
{
    BuildPg(PgStatus); //PgStatus is a variable I use in a state machine to build different pages
});

<form>
<div id="DivPgTop"></div>
<div id="DivPgMiddle"></div>
<div id="DivPgBottom"></div>
</form>

Это весь index.php

В моем jslib.js У меня есть такие функции, как:

function BuildPg(Pg) {
    BuildPgTop(Pg);
    BuildPgMiddle(Pg);
    BuildPgBottom(Pg);
}

function BuildPgTop(Pg) {
    var Content="";
    if (Pg == 1) {
        Content = function_a(); // function_a builds the top of the page
    else if (Pg == 2) {
        Content = function_b();
    etc...
    }

    document.getElementById("DivPgTop").innerHTML = Content; //here is where I load the top of the page
}

И я делаю то же самое для других частей страницы Посередине и снизу.

Используя эту платформу, если вы изменили мою функцию BuildPg ()на что-то вроде:

function BuildPg(Pg) {
    BuildPgTop(Pg);
    sleep(foo);
    BuildPgMiddle(Pg);
    sleep(bar);
    BuildPgBottom(Pg);
}

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

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

Надеюсь, это имеет смысл.Удачи!

0 голосов
/ 07 сентября 2011

PHP отправляет один документ.То, что вы хотите сделать, достигается с помощью чего-то, называемого AJAX (http://en.wikipedia.org/wiki/Ajax_%28programming%29)

). По сути, вы пишете код JavaScript, который использует объект XMLHTTPRequest для подключения к серверу и загрузки дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...