Я пишу приложение, которое включает около 12 коротких JS-файлов в разделе <head>
(я знаю, я должен объединить их и переместить их непосредственно перед концом <body>
, чтобы добраться до тех, кто на производстве)
Проблема в том, что когда я пытаюсь загрузить приложение в Chrome, некоторые файлы сразу загружаются, а некоторые никогда не заканчивают загрузку вообще! Chrome продолжает пытаться загрузить 12 JS-файлов и никогда не отображает страницу, пока я не нажму «Stop».
Когда я нажимаю кнопку «Стоп», HTML отображается, а файлы JS терпят неудачу, как на изображении ниже:
Обратите внимание, что разные JS-файлы не срабатывают при каждой попытке! Это не тот же файл, который застревает каждый раз!
Проверка заголовков файлов с ошибками показывает «Внимание: запрос еще не закончен». Файлы застряли в «Получение» иногда в течение многих минут!
Теперь вот забавная часть, после остановки, если я сосредоточусь на omnibar и нажимаю enter, все файлы JS загружаются мгновенно, и приложение работает нормально!
На стороне сервера я использую Apache, PHP и MySQL. Я что-то неправильно сконфигурировал в Apache?
СТАТУС после двух изнурительных дней : зилч, ничего, нада, это заставляет меня сходить с ума. Я попытался запустить код с разных компьютеров, попробовал изменить настройки кеша apache и изменил множество вещей в javascript, но ничего не сработало. Хуже всего то, что никто не может указать, где проблема!
Одна из возможностей заключается в том, что у вас включен Keep-Alive, и он работает неправильно. Я видел это раньше. Браузер устанавливает максимальное количество подключений к вашему серверу (обычно 6) для загрузки первых нескольких файлов (CSS, JS и т. Д.), Тогда эти соединения не будут выпущены до истечения времени ожидания. Мои симптомы были не такими же, как у вас – тайм-аут составлял 20 секунд, и после этого все было загружено партиями по 6 штук, но это все равно может быть причиной.
В вашей конфигурации Apache (httpd.conf в большинстве систем) найдите строку KeepAlive
(или добавьте ее, если она отсутствует) и установите для нее значение « Off
.».
Вот более чем ответ, вот как я могу устранить проблему.
Одна из вещей, которые я попробую, – это комментировать метки по одному и перезагружать, чтобы узнать, где находится порог. Кроме того, поскольку это, вероятно, проблема с конфигурацией сервера, я перезапустил ее после каждой попытки, чтобы иметь чистый сланец, так сказать, то есть никакого состояния, сохраненного между попытками.
Я попытался бы получить больше намеков, пытаясь сделать запросы на различные Javascripts из сценария на вашем любимом языке. В идеале я бы попробовал GETting скрипты один за другим (скажем, с завихрением), ожидая нескольких миллисекунд между запросами. Полагаю, я тоже попал в порог. Например, получение одного скрипта в секунду работает, но когда запросы становятся слишком близкими, сервер застревает.
Если до сих пор нет подсказки, я бы использовал tcpdump для просмотра трафика между браузером и сервером. Хорошо, это может быть слишком низким уровнем!
Но, возможно, я бы использовал netstat, чтобы узнать, сколько соединений браузер открывает параллельно серверу для извлечения ресурсов и выясняет, достигли ли мы ограничения параллелизма.
Мне жаль, что это решение, но я надеюсь, что у вас появятся идеи, и мне было бы очень интересно узнать, в чем проблема, в конце концов!
Попробуйте подражать проблеме в https://www.stevesouders.com/cuzillion/. Он должен сказать, что вам нужна проблема – хром или сервер
Проверьте заголовок Content-Length. Сервер может передавать неправильное значение – больше, чем фактическая длина содержимого.
Мы получили точно такое же сообщение «Внимание: запрос еще не завершен» после запроса в браузере.
Сам запрос составлял порядка 15 МБ JSON, который был подан в приложение с угловым 1. Этот запрос занял около 2 секунд. Сразу после завершения запроса цикл углового дайджеста заблокировал браузер более 12 секунд (это видно при профилировании во время запроса). В течение этого времени Chrome показал это сообщение «Внимание: запрос еще не завершен» по запросу, пока он уже был завершен.
Есть несколько хороших ответов, но если вам нужен надежный способ сделать это, вы можете использовать PHP для отправки всех сценариев сразу. Если проблема в том, что на сервере слишком много соединений, вы можете добавить код html следующим образом:
<script type="text/javascript" src="scripts/scripts.php />
А затем в scripts.php
вы используете функцию include()
для включения всех файлов JavaScript так:
<?php header(''); // control all your headers include('jquery-1.9.1.min.js'); // rest of scripts ?>
в<?php header(''); // control all your headers include('jquery-1.9.1.min.js'); // rest of scripts ?>
Если ничего не работает, и проблема связана с чрезмерными подключениями, это должно сработать.