Страница 1 из 1

URLLoaderDataFormat

Добавлено: 10 окт 2014, 11:06
XELAD
Доброго времени суток.
Захотелось поделиться наблюдениями, авось ещё кто-то добавит и свои.
В игре используется обычный POST запрос к php файлам. После нескольких ухищрений, ЧТО именно нужно отправлять на сервер, было отброшено всё не необновленное, и осталось лишь то, что действительно нужно сохранить. Т.е. тут промашки нет. Но почему-то время от создания URLLoader до Event.COMPLETE было большим. Говоря простым языком: чем больше данных передавалось в URLLoader, тем дольше было время ожидания до ответа с сервера. Говоря ещё проще: всё сохранялось очень долго.
Говоря большие данные, я имею в виду string длиной 20 тысяч и более.
Имеем string вида "название=значение&название=значение&название=значение".

Код: Выделить всё

var vars = new URLVariables(str)var request:URLRequest = new URLRequest();request.url = "http://la.la/la.php";request.method = URLRequestMethod.POST;request.data = vars;var loader:URLLoader = new URLLoader();loader.dataFormat = URLLoaderDataFormat.VARIABLES;loader.addEventListener(Event.OPEN, LOADER_START);loader.addEventListener(Event.COMPLETE, LOADER_DONE);
После многих тестов и чтений мануалов, вот к чему я пришёл с тестами над string.length>20000
1) new URLVariables(str) - если вы делаете так, то этот метод сразу вызывает метод decode, который преобразует строку в свойства объекта URLVariables. На этот может уйти несколько секунд.
2) loader.dataFormat = URLLoaderDataFormat.VARIABLES; - если вы делаете так в компании с методом POST, переменные кодируются с помощью формата x-www-form-urlencoded. На это уйдет много секунд.
3) Когда же наконец сработает Event.OPEN, и данные действительно будут отправлены на сервер, время до Event.COMPLETE занимает менее секунды (при условии небольшого ответа от сервера в кб).

Вот такая небольшая история на тему "почему так долго сохраняет". А оно и не сохраняет, а подготавливает ;)