У меня есть веб-приложение, которое я пытаюсь ускорить. Это выглядит так:
+------+
| |
| |
+------+
+------+
| |
| |
+------+
+------+
| |
| |
+------+
Каждый ящик представляет собой iFrame, содержащий Flash SWF и некоторый javascript. SWF загружает SWF третьей стороны, который используется для отображения информации. Я обнаружил, что время загрузки для webapp:
LoadTime = (4 seconds) * numberOfBoxes + (3 seconds)
Когда я просто вставляю сторонний swf напрямую (без нашего swf или javascript), время загрузки:
LoadTime = (1 second) * numberOfBoxes + (2.5 seconds)
Я пытаюсь найти, где используются дополнительные 3 секунды, чтобы ускорить наш webapp. Я считаю, что кандидаты:
- Обработка серверов (jsp)
- Скачать
- Javascript
- Вспышка
- Другое?
Скачать
Ниже приведен образ загрузок, извлеченных из firebug. Я заменил имена файлов тем, что их тип. Ни одна из загрузок не занимает особенно длинную после первого раза.
Однако одно интересное место отмечено красным. Красная область занимает 3 секунды между загрузкой My SWF
и загрузкой двух файлов gif, а затем Third Party SWF
. Я думаю, что эта пауза вызвана обработкой на клиенте (это правда?).
Примечание. Красные полосы на графике не являются частью диаграммы. Я добавил их, чтобы выделить пробел, где ничего не происходит на панели .net.
Я думаю, что я могу заключить, что у меня проблема с обработкой на стороне клиента, которая подразумевает либо Flash, либо Javascript. Вопрос 1: Правильно ли это?
Изменить: я добавил общее время одновременной загрузки:
- Когда есть 1 iframe, время загрузки составляет 1,87 секунды.
- Когда есть 2 iframes, время загрузки составляет 2,29 секунды.
- Когда есть 5 iframe, время загрузки составляет 8.57 секунд.
- Когда есть 10 iframe, время загрузки составляет 10,62 секунды.
- Когда есть 21 iframe, время загрузки составляет 17.20 секунд
Javascript
Я использовал профилировщик в firebug для профилирования javascript. Вот результаты, когда на странице есть четыре компонента:
Это означает, что javascript работает примерно на 0,25 секунды/график. Это кажется мне разумным.
Вопрос 2: Я правильно читаю эти результаты?
Это оставляет около 3,5 секунд/диаграмму обработки для чего-то еще.
Флэш
Я вставил некоторые инструкции трассировки в код AS3. Мы слушаем событие под названием "сделанная загрузка". Я помещал след в первый метод инициализации и в метод "сделанной загрузки". Вспышка только съедает .2 секунды/график между этими двумя операторами трассировки.
Вопрос 3: Есть ли лучший способ профилировать флеш? Может быть, это флеш-загрузка или что-то в этом роде, которое елит дополнительное время?
Другие
Я не уверен, есть ли другие вещи, кроме:
- Обработка серверов (jsp)
- Скачать
- Javascript
- Вспышка
Вопрос 4: Есть ли что-то, что мне не хватает, что можно было есть?
Следующие шаги
Я не уверен, каким должен быть мой следующий шаг. Я знаю, что что-то занимает около 1,5 - 3 секунды/график, но я не могу понять, что это такое. Я подозреваю, что это связано с моей swf.
Вопрос 5: Как мне найти недостающее время?
Обновление: сводка времени
Я все время рисую для каждой вещи, которая может занять время.
- Ось X - это количество используемых диаграмм.
- Ось Y - это время загрузки всех графиков.
Последний график, возможно, самый важный граф. Синие точки - это сумма общего времени загрузки (измеренная с помощью секундомера). Красные точки - это количество времени, которое я учитывал (Javascript, время загрузки и время вспышки).
Обновление: Браузерные войны
Я ориентирую IE и Firefox (хотя это хороший бонус, если работают другие браузеры). Все результаты, представленные до сих пор, включают Firefox с firebug. Просто для удовольствия я думал, что попробую в других браузерах. Я не думаю, что это приближает меня к решению, но интересно посмотреть, сколько IE отстой.
Примечание. Перед запуском тестов для Firefox я очистил файлы cookie и кеш. Я не делал этого для IE или Chrome
Обновление: загрузка Flash
Я использовал sprinkling console.log
, хотя мой код пытается сэндвич медленного кода. (Результаты выводятся в консоль Firebug).
Одна вещь, которую я заметил, которая кажется мне подозрительной, заключается в том, что между моим последним журналом javascript печатается и когда мой первый журнал флэш-памяти печатается.
17:08:29.973 - Javascript code
Time difference: 2510 ms
17:08:32.483 - Flash- myComponent.init()
Нужно ли устанавливать флешку для виртуальной машины для каждого swf? Составляет ли он файл actionscript на клиенте?
Что происходит между тем, когда я <embed>
мой swf и когда событие creationComplete
в моей главной .mxml
?