Chrome просто не загружает файлы JS

Я пишу приложение, которое включает около 12 коротких JS файлов в разделе <head> (я знаю, я должен объединить их и переместить их непосредственно перед концом <body>; будет доходить до тех, кто находится в процессе производства)

Проблема в том, что когда я пытаюсь загрузить приложение в Chrome, Некоторые файлы сразу загружаются, а некоторые никогда не заканчивают загрузку вообще! Chrome пытается загрузить 12 файлов JS и никогда не отображает страницу пока я не нажму "Стоп".

Когда я нажимаю кнопку "Стоп", HTML отображается и файлы JS выходят из строя, как показано на рисунке ниже:

JS Load errors

Обратите внимание, что разные JS файлы не срабатывают при каждой попытке! Это не тот файл, который застревает каждый раз!

Проверка заголовков неудачных файлов показывает "Внимание: запрос еще не завершен". Файлы застревают в "Получение" иногда в течение многих минут!

enter image description here

Теперь вот забавная часть, после остановки, если я сосредоточусь на omnibar и нажимаю enter, все файлы JS загружаются мгновенно, и приложение отлично работает!

На стороне сервера я использую Apache, PHP и MySQL. Я что-то неправильно сконфигурировал в Apache?

СОСТОЯНИЕ после двух изнурительных дней: zilch, ничего, нада, это сводит меня с ума. Я попытался запустить код с разных компьютеров, попробовал изменить настройки кеша apache и изменил множество вещей в javascript, но ничего не сработало. Хуже всего то, что никто не может указать, где проблема!

Ответы

Ответ 1

Одна из возможностей заключается в том, что у вас включен Keep-Alive, и он работает неправильно. Я видел это раньше. Браузер устанавливает максимальное количество подключений к вашему серверу (обычно 6) для загрузки первых нескольких файлов (CSS, JS и т.д.), Тогда эти соединения не будут выпущены до истечения времени ожидания. Мои симптомы были не такими же, как у вас - тайм-аут составлял 20 секунд, и после этого все будет загружаться партиями по 6 штук, но это все равно может быть причиной.

В вашей конфигурации Apache (httpd.conf в большинстве систем) найдите строку KeepAlive (или добавьте ее, если она отсутствует) и установите ее в Off.

Ответ 2

Больше, чем ответ, вот как я могу устранить проблему.

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

Я попытался бы получить больше намеков, пытаясь сделать запросы на различные Javascripts с script на вашем любимом языке. В идеале я бы попробовал GETting скрипты один за другим (скажем, с завихрением), ожидая нескольких миллисекунд между запросами. Полагаю, я тоже попал в порог. Например, получение одной script в секунду работает, но когда запросы становятся слишком близкими, сервер застревает.

Если до сих пор нет подсказки, я бы использовал tcpdump для просмотра трафика между браузером и сервером. Хорошо, это может быть слишком низким уровнем!

Но, возможно, я бы использовал netstat, чтобы узнать, сколько соединений браузер открывает параллельно серверу для извлечения ресурсов, и посмотрите, удалили ли мы предел concurrency.

Мне жаль, что это решение, но я надеюсь, что у вас появятся идеи, и мне было бы очень интересно узнать, в чем проблема, в конце концов!

Ответ 3

Попробуйте подражать проблеме в https://www.stevesouders.com/cuzillion/ Он должен сказать, что вы сторона проблемы - хром или сервер

Ответ 4

Проверьте заголовок Content-Length. Сервер может передавать неправильное значение - больше, чем фактическая длина содержимого.

Ответ 5

Мы получили точно такое же сообщение "Внимание: запрос еще не завершен" после запроса в браузере.

Сам запрос был в порядке 15 МБ JSON, который был подан в приложение Angular 1. Этот запрос занял около 2 секунд. Сразу после завершения запроса цикл дайджест Angular заблокировал браузер более 12 секунд (это видно путем профилирования во время запроса). В течение этого времени Chrome показал это сообщение "Внимание: запрос еще не завершен" в то время, пока он уже был завершен.

Ответ 6

Есть несколько хороших ответов, но если вам нужен надежный способ сделать это, вы можете использовать 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
?>

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