У меня есть веб-приложение, которое я пытаюсь ускорить. Это выглядит следующим образом:
+------+
| |
| |
+------+
+------+
| |
| |
+------+
+------+
| |
| |
+------+
Каждый блок представляет собой iFrame, содержащий Flash SWF и некоторый JavaScript. SWF загружает сторонний SWF, который используется для отображения информации. Я обнаружил, что время загрузки веб-приложения составляет:
LoadTime = (4 seconds) * numberOfBoxes + (3 seconds)
Когда я просто вставил сторонний swf напрямую (без нашего swf или javascript), время загрузки составляет:
LoadTime = (1 second) * numberOfBoxes + (2.5 seconds)
Я пытаюсь найти дополнительные 3 секунды используется, чтобы я мог ускорить работу нашего веб-приложения. Я думаю, что кандидатами являются:
Ниже приведено изображение загрузок, взятых из firebug. Я заменил имена файлов на их тип. Ни одна из загрузок не занимает много времени после первого раза .
Однако одна достопримечательность отмечена красным. Красная область - это 3-секундный промежуток между загрузкой My SWF
и загрузкой двух файлов gif, за которыми следует сторонний SWF
. Я думаю, что эта пауза вызвана обработкой на клиенте (это правда?).
Примечание. Красные полосы на графике не являются частью схемы. Я добавил их, чтобы выделить пробел, в котором ничего не происходит на панели .net .
Я думаю, что могу сделать вывод из этого, что у меня проблема с обработкой на стороне клиента, которая подразумевает либо Flash, либо Javascript. Вопрос 1. Правильно ли это?
Редактировать: Я суммировал общее время одновременной загрузки:
Я использовал профилировщик в firebug для профилирования javascript. Вот результаты, когда на странице есть четыре компонента:
Это означает, что javascript работает около 0,25 секунды на диаграмму. Мне это кажется разумным.
Вопрос 2: Правильно ли я читаю эти результаты?
Остается около 3,5 секунд на график обработки для чего-то еще.
Я вставил несколько операторов трассировки в код AS3. Мы слушаем событие, которое называется «завершена загрузка». Я поместил трассировку в первый метод инициализации и в метод "завершенной загрузки". Вспышка занимает всего 0,2 секунды на диаграмму между этими двумя операторами трассировки.
Вопрос 3: Есть ли лучший способ профилировать вспышку? Может быть, загрузка флеш-памяти или что-то в этом роде отнимает дополнительное время?
Я не уверен, есть ли другие вещи, кроме:
Вопрос 4: Есть ли что-то, чего мне не хватает, что может отнимать время?
Я не уверен, каким должен быть мой следующий шаг. Я знаю, что что-то занимает около 1,5–3 секунд на график, но я не могу понять, что это такое. Я подозреваю, что это связано с моим swf.
Вопрос 5: Как мне найти это недостающее время?
Я составил график всех времен для каждой вещи, на которую могло уйти время.
Последний график, возможно, самый важный. Синие точки - это общее время загрузки (измеренное с помощью секундомера). Красные точки - это количество времени, которое я учел (Javascript, время загрузки и время прошивки).
Я нацелен на IE и Firefox (хотя это хороший бонус, если работают другие браузеры). Все результаты, представленные на данный момент, относятся к Firefox с запущенным firebug. Ради интереса я подумал, что попробую в других браузерах. Я не думаю, что это приближает меня к решению, но интересно посмотреть, насколько IE отстой.
Примечание: Перед запуском тестов для Firefox я очистил файлы cookie и кеш. Я не делал этого для IE или Chrome
Я разбрызгивал операторы console.log
, хотя мой код пытался вставить медленный код. (Результаты выводятся в консоль Firebug).
Одна вещь, которую я заметил, кажется мне подозрительной, - это то, что между моментом печати моего последнего журнала javascript и моментом печати моего первого журнала флэш-памяти существует 2,5-секундный промежуток.
17:08:29.973 - Javascript code
Time difference: 2510 ms
17:08:32.483 - Flash- myComponent.init()
Нужно ли во флэш-памяти настраивать виртуальную машину для каждого swf-файла? Компилирует ли сценарий действий на клиенте?
Что происходит между тем, когда я
мой swf и когда событие creationComplete
в моем основном файле . mxml
?