Подтвердить что ты не робот

Оптимизация моего веб-приложения с использованием Flash, Javascript и JSP

У меня есть веб-приложение, которое я пытаюсь ускорить. Это выглядит так:

+------+
|      |
|      |
+------+

+------+
|      |
|      |
+------+

+------+
|      |
|      |
+------+

Каждый ящик представляет собой 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. Я думаю, что эта пауза вызвана обработкой на клиенте (это правда?).

enter image description here

Примечание. Красные полосы на графике не являются частью диаграммы. Я добавил их, чтобы выделить пробел, где ничего не происходит на панели .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. Вот результаты, когда на странице есть четыре компонента:

enter image description here

Это означает, что javascript работает примерно на 0,25 секунды/график. Это кажется мне разумным.

Вопрос 2: Я правильно читаю эти результаты?

Это оставляет около 3,5 секунд/диаграмму обработки для чего-то еще.

Флэш

Я вставил некоторые инструкции трассировки в код AS3. Мы слушаем событие под названием "сделанная загрузка". Я помещал след в первый метод инициализации и в метод "сделанной загрузки". Вспышка только съедает .2 секунды/график между этими двумя операторами трассировки.

Вопрос 3: Есть ли лучший способ профилировать флеш? Может быть, это флеш-загрузка или что-то в этом роде, которое елит дополнительное время?

Другие

Я не уверен, есть ли другие вещи, кроме:

  • Обработка серверов (jsp)
  • Скачать
  • Javascript
  • Вспышка

Вопрос 4: Есть ли что-то, что мне не хватает, что можно было есть?

Следующие шаги

Я не уверен, каким должен быть мой следующий шаг. Я знаю, что что-то занимает около 1,5 - 3 секунды/график, но я не могу понять, что это такое. Я подозреваю, что это связано с моей swf.

Вопрос 5: Как мне найти недостающее время?

Обновление: сводка времени

Я все время рисую для каждой вещи, которая может занять время.

  • Ось X - это количество используемых диаграмм.
  • Ось Y - это время загрузки всех графиков.

Последний график, возможно, самый важный граф. Синие точки - это сумма общего времени загрузки (измеренная с помощью секундомера). Красные точки - это количество времени, которое я учитывал (Javascript, время загрузки и время вспышки).

enter image description here

Обновление: Браузерные войны

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

enter image description here

Примечание. Перед запуском тестов для 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?

4b9b3361

Ответ 1

Я создал SWF helloWorld и встроил его в веб-страницу.

В браузерах, которые я тестировал, требуется много времени для загрузки swf. Когда на странице есть только один swf, это не заметно (время загрузки ~ 3 секунды), однако при наличии 10 swfs на странице есть заметная пауза (~ 3 секунды/диаграмма * 10 диаграмм = 30 секунд).

Вот те браузеры, которые я тестировал:

  • IE 7 - очень медленно. Занимает около 37 секунд для загрузки 16 приложений Hello World.
  • IE 8 - Кажется, в основном нормально. Проверено только на короткий период.
  • Firefox 3.6.17 - Очень медленно. Так же медленно, как IE 7
  • Chrome 12.0.742.91 - быстрый

Я отправил свое приветственное мировое приложение в другой вопрос. Если кто-то знает, как ускорить загрузку очень простой swf, вы можете ответить здесь:

Flash: много одинаковых SWF на одной странице

Ответ 2

Только некоторые идеи:

Можете ли вы устранить среднего человека, в данном случае, стороннего swf?

Где находится сторонний SWF? Если он находится на удаленном сервере, вам нужно просто загрузить его один раз, а затем поместить его на свой локальный сервер вместе с другими файлами. Это может исключить время загрузки.

Можете ли вы использовать что-то вроде декомпилятора флэш-памяти для декомпиляции стороннего SWF-кода и поместить код прямо в ваш swf? (возможно, это противоречит правилам)

Что произойдет, если вы не поместите содержимое в iframes, а просто поместите их в divs?

Ответ 3

В качестве другого варианта - попытайтесь отключить firebug. Время как-то меняется?

Также попробуйте то же самое в хром - с инструментами и без него.

Чтобы понять, будет ли этот jsp, вызванный из вашего swf или только вашего swf, вы можете сделать это:

  • вместо вашего обычного swf, давайте просто издеваемся без каких-либо вызовов - просто пуст
  • также вместо вашего js в кадре предоставить только пустой файл

Сделайте это частично и проверьте разницу.

Также попробуйте профилировать все события newtwork, которые oocurs. Может быть, ваш SWF вызывает какой-то метод в стороннем случае, который вызывает тогда какой-то удаленный метод. Здесь я думаю, что мы не можем улучшить это. Только может быть, если метод третьего лица может быть каким-то образом кэширован. Поэтому в вашем профиле мы видим только загрузку файлов - мы не видим других запросов - ajax или что-то вроде этого.

Ответ 4

В соответствии с моим делом, Есть три возможности, которые подозревают.

  • Профилировщик Firebug. Попробуйте другой браузер и посмотрите, сколько времени потребуется.
  • Красный компонент, который занимает время после загрузки другого компонента.
  • SWF файл, создающий соединение с другим приложением через ваш сервер вместо прямого подключения.

Ответ 5

Являются ли фреймы, исходящие из ответа HTML с сервера? Или, iframes добавлены в DOM динамически через javascript?

У вас будет более высокая производительность, ожидая, пока DOM будет готов, и добавьте iframes в DOM после загрузки страницы.

Я думаю, проблема в том, что Flash блокирует выполнение script, в то время как локальный SWF загружает сторонний SWF. Вероятно, вам нужно выяснить, как выполнять параллельную, неблокирующую асинхронную загрузку стороннего SWF с помощью ActionScript.