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

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

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

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

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

Каждый блок - это iFrame, содержащий Flash SWF и некоторый JavaScript. SWF загружает сторонний SWF, который используется для отображения информации. Я обнаружил, что время загрузки веб-приложения:

LoadTime = (4 seconds) * numberOfBoxes + (3 seconds) 

Когда я только что вставил сторонний swf напрямую (без нашего swf или javascript), время загрузки:

LoadTime = (1 second) * numberOfBoxes + (2.5 seconds)

Я пытаюсь найти, где используются дополнительные 3 секунды, чтобы я мог ускорить наше веб-приложение. Я думаю, что кандидатами являются:

  • Серверная обработка (jsp)
  • Скачать
  • Javascript
  • Flash
  • Другое

Скачать

Ниже приведено изображение загрузок с firebug. Я заменил имена файлов на их тип. Ни одна из загрузок не занимает особенно много времени после первого раза .

Одна достопримечательность отмечена красным. Красная область - это 3-секундный интервал между загрузкой My SWF и загрузкой двух gif-файлов, за которыми следует Third Party SWF. Я думаю, что эта пауза вызвана обработкой на клиенте (это правда?).

enter image description here

Примечание. Красные столбцы на графике не являются частью диаграммы. Я добавил их, чтобы выделить пробел, где ничего не происходит на панели .net .

Я думаю, что из этого могу сделать вывод, что у меня есть проблема обработки на стороне клиента, которая подразумевает либо Flash, либо Javascript. Вопрос 1: Это правильно?

Редактировать: я добавил общее время одновременного скачивания:

  • При наличии 1 фреймов время загрузки составляет 1,87 секунд
  • При наличии 2 фреймов время загрузки составляет 2,29 секунд
  • При наличии 5 фреймов время загрузки составляет 8,57 секунд
  • При наличии 10 фреймов время загрузки составляет 10,62 секунд
  • Когда есть 21 iframes время загрузки составляет 17.20 секунд

Javascript

Я использовал профилировщик в firebug для профилирования JavaScript. Вот результаты, когда на странице четыре компонента:

enter image description here

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

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

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

Flash

Я вставил несколько операторов трассировки в код AS3. Мы слушаем событие, которое называется что-то вроде «Готово загрузка». Я поместил трассировку в первом методе инициализации и в методе «завершена загрузка». Вспышка глотает только 0,2 секунды / график между этими двумя операторами трассировки.

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

Другое

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

  • Обработка на стороне сервера (jsp)
  • Скачать
  • Javascript
  • Flash

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

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

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

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

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

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

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

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

enter image description here

Обновление : Browser Wars

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

enter image description here

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

Нужно ли Flash настраивать виртуальную машину для каждого SWF?Компилирует ли он скрипт действий на клиенте?

Что происходит между тем, когда я <embed> мой swf и событием creationComplete в моем основном .mxml?

Ответы [ 5 ]

2 голосов
/ 02 июня 2011

Просто несколько идей:

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

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

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

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

1 голос
/ 09 июня 2011

iframes прибывают из ответа HTML от сервера? Или iframes добавляются в DOM динамически через JavaScript?

Вы получите лучшую производительность, дождавшись готовности DOM и вставив iframe в DOM после загрузки страницы.

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

1 голос
/ 08 июня 2011

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

  1. Firebug profiler.Попробуйте в другом браузере и посмотрите, сколько времени это займет.
  2. Красный компонент, который занимает время после загрузки этого другого компонента.
  3. SWF-файл, создающий соединение с другим приложением через сервер вместо прямого соединения.
1 голос
/ 02 июня 2011

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

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

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

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

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

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

0 голосов
/ 09 июня 2011

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

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

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

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

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

Flash: множество идентичных SWF-файлов на одной странице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...