Прелоадер подвешивает / замораживает с помощью "икоты" - PullRequest
1 голос
/ 24 мая 2011

Я разработал флэш-сайт для клиента, который имеет учетную запись в GoDaddy и успешно загрузил все файлы на хост-сервер. Сайт состоит из начального preloader с именем «preloader.swf», который загружает внешний SWF-файл с именем «main.swf», который содержит различные разделы, включая раздел галереи изображений.

Тем не менее, я замечаю, что время от времени (как это не всегда бывает) начальный флэш-предзагрузчик для основного сайта на основе флэш-памяти загружается быстрее, чем обычно, с «икотой». Это приводит к тому, что при необходимости просмотра изображения в разделе галереи сайта (где каждое изображение загружается извне с сервера, имеющего собственный предварительный загрузчик), выбранное изображение загружается неровно с «икотой» (например, из 22% он делает паузу, затем сразу же переходит на 31%, затем снова делает паузу и сразу переходит на 47% и т. Д.)

Затем, в определенный момент времени, загрузчик внезапно зависает / зависает весь сайт, не имея другого выбора, кроме как обновить сайт.

Только тогда, когда предварительный загрузчик изображения замерзнет и сайт обновится или кэш будет очищен, весь сайт будет работать идеально, как предполагалось - т.е. начальный предварительный загрузчик загружается медленнее и плавнее, а предварительные загрузчики когда изображения загружаются также более плавно (нет резких скачков в процентах, как раньше; предзагрузчик загружается с нормальными приращениями).

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

Я проводил некоторые исследования и читал, что причина может быть в следующей строке "ProgressEvent.PROGRESS", так как иногда она может не срабатывать в IE или Firefox. Это так? Если да, то какую альтернативу мне взять?

Надеюсь услышать ответ как можно скорее.

Спасибо и С уважением.

P.S. Ниже я включил код AS для моего начального загрузчика для загрузки основного сайта (а не загрузчик, используемый для загрузки изображений):

import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;

//no scale;
stage.scaleMode = StageScaleMode.NO_SCALE;

//align to top left
stage.align = StageAlign.TOP_LEFT;

stage.addEventListener(Event.RESIZE, onPreloaderResize);
addEventListener(Event.ENTER_FRAME, onPreloaderEnter);

angel_pic.alpha = 0;

top_left_line.visible = false;
top_right_line.visible = false;
side_left_line.visible = false;
side_right_line.visible = false;
bottom_left_line.visible = false;
bottom_right_line.visible = false;

var req:URLRequest = new URLRequest("main.swf");
var loader:Loader = new Loader();
loader.load(req);

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

function showProgress(event:ProgressEvent):void
{
    var percent:Number = Math.round((event.bytesLoaded / event.bytesTotal) * 100);

    if ((percent > 0) && (percent <= 34))
    {
        top_left_line.visible = true;
        top_right_line.visible = true;

        top_left_line.width = percent * ((angel_pic.width / 2) / 34);
        top_right_line.width = percent * ((angel_pic.width / 2) / 34);
    }
    else
    {
        if ((percent > 34) && (percent <= 66))
        {
            side_left_line.visible = true;
            side_right_line.visible = true;

            side_left_line.height = (percent - 34) * (angel_pic.height / 32);
            side_right_line.height = (percent - 34) * (angel_pic.height / 32);
        }
        else
        {
            if (percent > 66)
            {
                bottom_left_line.visible = true;
                bottom_right_line.visible = true;

                bottom_left_line.width = (percent - 66) * ((angel_pic.width / 2) / 34);
                bottom_right_line.width = (percent - 66) * ((angel_pic.width / 2) / 34);
            }
        }
    }
}

function loadComplete(event:Event):void
{
    var num:int = numChildren;

    while (num--)
    {
        removeChildAt(num);
    }   

    addChild(loader);
}

function onPreloaderResize(event:Event):void
{
    var preloaderPadding:Number = (stage.stageWidth / 1000) * 35;

    angel_pic.x = (stage.stageWidth / 2) - (angel_pic.width / 2);
    angel_pic.y = (stage.stageHeight / 2) - (angel_pic.height / 2);

    angel_pic.width = stage.stageWidth - (preloaderPadding * 2);
    angel_pic.height = angel_pic.width / 4.9;

    top_left_line.x = stage.stageWidth / 2;
    top_left_line.y = angel_pic.y;

    top_right_line.x = stage.stageWidth / 2;
    top_right_line.y = angel_pic.y;

    side_left_line.x = preloaderPadding + side_left_line.width;
    side_left_line.y = angel_pic.y;

    side_right_line.x = preloaderPadding + angel_pic.width;
    side_right_line.y = angel_pic.y;

    bottom_left_line.x = preloaderPadding + bottom_left_line.height;
    bottom_left_line.y = angel_pic.y + angel_pic.height;

    bottom_right_line.x = preloaderPadding + angel_pic.width;
    bottom_right_line.y = angel_pic.y + angel_pic.height;
}

function onPreloaderEnter(event:Event):void
{
    var preloaderPadding:Number = (stage.stageWidth / 1000) * 35;

    angel_pic.x = (stage.stageWidth / 2) - (angel_pic.width / 2);
    angel_pic.y = (stage.stageHeight / 2) - (angel_pic.height / 2);

    angel_pic.width = stage.stageWidth - (preloaderPadding * 2);
    angel_pic.height = angel_pic.width / 4.9;

    top_left_line.x = stage.stageWidth / 2;
    top_left_line.y = angel_pic.y;

    top_right_line.x = stage.stageWidth / 2;
    top_right_line.y = angel_pic.y;

    side_left_line.x = preloaderPadding + side_left_line.width;
    side_left_line.y = angel_pic.y;

    side_right_line.x = preloaderPadding + angel_pic.width;
    side_right_line.y = angel_pic.y;

    bottom_left_line.x = preloaderPadding + bottom_left_line.height;
    bottom_left_line.y = angel_pic.y + angel_pic.height;

    bottom_right_line.x = preloaderPadding + angel_pic.width;
    bottom_right_line.y = angel_pic.y + angel_pic.height;
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

Перед загрузкой сайта на сервер GoDaddy я тестировал его, используя собственную опцию Flash "Simulate Download", и никогда не испытывал никаких проблем.

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

Странная вещь, которую я не могу понять и решить, состоит в том, что только после того, как предварительный загрузчик завис или завис и обновлен сайт, или кэш очищен, весь сайт будет работать идеально, как и предполагалось, без сбоев или взаперти!

Я даже загрузил более простую версию предварительного загрузчика (как показано в приведенном ниже коде), который загружает SWF-файл 3 Мб, содержащий в себе одну картинку, и все же та же проблема снова возникает. Но я не думаю, что в коде есть проблема, я прав?

var req:URLRequest = new URLRequest("main-mini.swf");
var loader:Loader = new Loader();
loader.load(req);

loader.contentLoaderInfo.addEventListener(Event.OPEN, showPreloader);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, showContent);

var preloader:Preloader = new Preloader();

function showPreloader(event:Event):void {
    addChild(preloader);
    preloader.x = (stage.stageWidth / 2) - (preloader.width / 2);
    preloader.y = (stage.stageHeight / 2) - (preloader.height / 2);
}

function showProgress(event:ProgressEvent):void {
    var percent:Number = event.bytesLoaded / event.bytesTotal;
    preloader.percentage.text = Math.round(percent * 100) + "%";
    preloader.bar.width = 300 * percent;
}

function showContent(event:Event):void {
    removeChild(preloader);
    addChild(loader);
}

Я также пытался использовать технику очистки кэша в HTML и Flash и снизить частоту кадров с 31 до 21 кадр / с, но все было напрасно.

Возможно, я спрашиваю что-то глупое, но может ли это быть что-то с сервера GoDaddy? Могут ли быть какие-то настройки, которые я должен отрегулировать, чтобы они работали должным образом, или, возможно, я мог загрузить их «плохо»? Я загрузил сайт через Dreamweaver, используя метод FTP. Я не знаю, что думать об этом ...

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

Спасибо.

0 голосов
/ 25 мая 2011

У меня уже были проблемы с preloader'ом.

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

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

Проверьте мой блог осжатие gzip сервера сжатых двоичных файлов.Хотя это пост о гибкости, принцип тот же и должен применяться и к flash.

Cheers

...