Загрузка сайта до завершения исходного скрипта
У меня есть сервер, который часто используется (работает Plesk).
У меня есть несколько длинных сценариев, которые требуют времени для обработки (огромная база данных MySQL). Затем я обнаружил, что в 1 браузере я запускаю сценарий, и пока он загружается, я не могу просматривать другие части сайта до тех пор, пока сценарий не завершится, кажется, что все запросы сбрасываются, но они не обслуживаются до первоначального запуска. Сценарий заканчивается.
я думал, что это может быть проблема всего сервера, но это не так. Если я использую другой компьютер, я могу нормально просматривать сайт, даже на том же компьютере с другим браузером, я могу нормально перемещаться, пока скрипт все еще загружается. Я думаю, что это сильно ограничивает количество запросов на сеанс.
Это правильно? Есть ли способ настроить это, чтобы позволить 2-3 других запросов за сеанс?
Это действительно плохо, что, когда я разговариваю по телефону с клиентом, я только что запустил длинный отчет, но не могу использовать сайт или следить за тем, что они говорят, пока страница не загрузится?
Крис
2 ответа
Это зависит от браузера. В то время как большинство современных браузеров допускают около 6 одновременных подключений HTTP 1.1, более старые браузеры допускают только два. Пожалуйста, укажите браузер, который вы используете.
- Если вы используете IE, см. http://support.microsoft.com/kb/183110).
- Если вы используете Firefox, перейдите к "about:config" и установите значение "network.http.max-persistent-connections-per-server" или, возможно, даже "network.http.max-connections-per-server"
Если вы можете изменить веб-страницу: Часто это помогает изменить порядок сценариев и изображений. Вот хорошая ссылка, которая объясняет концепцию: http://code.google.com/speed/page-speed/docs/rtt.html
Почему бы вам не загрузить этот трудоемкий SQL через запрос типа AJAX после загрузки страницы.
<BODY onLoad="ajax_request_for_large_query();">
<script type="text/javascript">
function ajax_request_for_large_query() {
document.getElementById(‘mydiv’)= "Loading....";
if (window.XMLHttpRequest) { // Mozilla, Safari, IE7...
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE6 and older
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
http_request.onreadystatechange = Contents;
http_request.open(‘GET’, 'test.html', true);
http_request.send(null);
}
function Contents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
document.getElementById(‘mydiv’)= http_request.responseText;
} else {
alert(‘There was a problem with the request.’);
}
}
}
</script>
Это не работает, но что-то в этом роде.
Функция javascript извлекает данные из запрошенного URL, который выполняет ваш огромный запрос, и возвращает результат, после которого обновляется div в html, но только после загрузки веб-сайта.