Расчет всех ресурсов, загруженных на страницу

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

Мой вопрос в том, как рассчитать, сколько ресурсов фактически загружено в дом, включая изображения + скрипты + файлы css. И на основе этого мне нужно рассчитать шаблон прогресса индикатора и заставить его работать.

Может кто-нибудь пролить свет, как это сделать?


person Joy    schedule 02.08.2012    source источник
comment
Разве в браузере уже нет индикатора прогресса? Я думал, что браузер для этого нужен.   -  person Torsten Walter    schedule 03.08.2012


Ответы (3)


Прямого способа сделать это не существует. Теги сценариев и изображений имеют событие загрузки, поэтому вы можете прикрепить обратный вызов и узнать, когда они загружены. Css не имеет событий или свойств для запроса, однако вы можете использовать обходной путь, используя тег img. Но это не так просто, потому что если вы прикрепите обратный вызов к уже загруженному тегу скрипта, этот обратный вызов никогда не запустится, то же самое для тегов img. Поэтому, когда ваш индикатор выполнения начнет отслеживать все img / script / css в документе, ему нужно будет знать, какой img / script / css уже загружен, а затем прикрепить обратный вызов события для других, которые еще не загружены. Теги img имеют свойство complete, а сценарий - нет, поэтому вы не можете узнать, загружен сценарий или нет, просто запросив DOM. Css - это больше трюк.

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

Покажите на своей странице старый и хороший спин и будьте счастливы :)

person Marcelo De Zen    schedule 02.08.2012
comment
Да, вы абсолютно правы в своем вопросе. Но есть приложение Silverlight, работающее как двойник нашего сайта. Таким образом, мы должны реализовать то же самое с платформой Mvc. Итак, искал, чтобы подправить, как я могу продолжить. Тем не менее, вы прекрасно понимаете мой вопрос. Есть ли подходящий способ попроще? - person Joy; 03.08.2012
comment
@Joy, я не знаю более простого решения. Вы можете прикрепить и загрузить событие для скриптов и изображений и отобразить менее точный индикатор выполнения. Что я могу вам сказать, так это то, что я пробовал это раньше, и это не очень хорошо работало. Например, если вы показываете индикатор выполнения, вы должны скрыть его после загрузки всех ресурсов, верно? Что делать, если изображение не загружается или скрипт не загружается? - person Marcelo De Zen; 03.08.2012
comment
Вы можете попробовать использовать маркеры в своих скриптах, чтобы что-то отобразить. Например, при загрузке скрипта он вызывает и загружает (xyz), чтобы вы могли отобразить некоторую информацию о ходе выполнения. Но для изображений и css, я думаю, нет надежного способа. - person Marcelo De Zen; 03.08.2012
comment
Хм, спасибо ... Я понял, что ... Ваши утверждения мне действительно помогли :) Я не могу назвать это прямым ответом на данный момент. Но я бы однозначно поддержал :) - person Joy; 05.08.2012

Общее количество:

$('script, link[type=text/css], img').size();

Это вернет общее количество запрошенных вами ресурсов.

person Alaa Badran    schedule 02.08.2012
comment
length не является функцией, используйте .length; или .size(); - person Pedro L.; 02.08.2012

Я думаю, вы неправильно подходите к проблеме ...

Если ваша страница настолько велика, что для нее требуется индикатор выполнения, вероятно, она слишком велика.

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

person Andy Davies    schedule 02.08.2012
comment
нет, страница не очень большая. Но в чем проблема на самом деле я упомянул в комментарии devundef. Пожалуйста, прочтите это. Думаю, он прекрасно понял мою область запроса :) - person Joy; 03.08.2012