PDA

Просмотр полной версии : оптимизация 2


tandem
03.11.2005, 21:27
а как вот такую штуку оптимизировать:
pdata = new XML();
pdata.load("list.xml");
list = new Array;
function myOnLoad (){
list = pdata.firstChild.nextSibling.childNodes;
p1=list [1].firstChild.nodeValue;
p2=list [3].firstChild.nodeValue;
p3=list [5].firstChild.nodeValue;
p4=list [7].firstChild.nodeValue;
p5=list [9].firstChild.nodeValue;
p6=list [11].firstChild.nodeValue;
p7=list [13].firstChild.nodeValue;
p8=list [15].firstChild.nodeValue;
p9=list [17].firstChild.nodeValue;
p10=list [19].firstChild.nodeValue;
}
playdata.onLoad = myOnLoad;

пробовал в цикл загнать - не работает. :-(

user356
03.11.2005, 21:43
А это специально, что в одном месте написано pdata, а в другом - playdata?

kpa.person
03.11.2005, 21:47
Если надо удобно и красиво используй библиотеку XPath. Очень рульная штука. (http://www.xfactorstudio.com/ActionScript/AS2/XPath/)
А если просто в конкретном примере сделать побыстрее, то цикл.
И если я правильно понял тебе нужны переменные в области xml object;

pdata = new XML();
scope = this;
pdata.load("list.xml");
list = new Array;
function myOnLoad (){
list = pdata.firstChild.nextSibling.childNodes;
max = list.length;// или max = 20; (первые 19 значений)
for(var i=1; i<max; ++i){
scope["p"+i] = list[i].firstChild.nodeValue;
}


Не очень хорошо, что не используются указатели на область видимости переменных типа "var" или scope.
И такая жесткая техника не всегда приемлема, вдруг придется немного изменить xml и нужно будет переписывать парсер.
Складывать на мой взгляд лучше в массив, чем в нумерованые переменные: arr[i] = ...

7thsky™
03.11.2005, 22:50
var xml:XML = new XML ();
xml.ignoreWhite = true;
xml.load ('test.xml');
xml.onLoad = onLoaded;

function onLoaded (flag:Boolean):Void {
if (flag) {
for (var o:XMLNode = xml.firstChild, i:Number = 0; o != null; o = o.nextSibling, i++) {
this ['p' + i] = o.firstChild.nodeValue;
} // end for
} // end if
}

tandem
04.11.2005, 01:39
Если надо удобно и красиво используй библиотеку XPath. Очень рульная штука. (http://www.xfactorstudio.com/ActionScript/AS2/XPath/)
А если просто в конкретном примере сделать побыстрее, то цикл.
И если я правильно понял тебе нужны переменные в области xml object;

pdata = new XML();
scope = this;
pdata.load("list.xml");
list = new Array;
function myOnLoad (){
list = pdata.firstChild.nextSibling.childNodes;
max = list.length;// или max = 20; (первые 19 значений)
for(var i=1; i<max; ++i){
scope["p"+i] = list[i].firstChild.nodeValue;
}


Не очень хорошо, что не используются указатели на область видимости переменных типа "var" или scope.
И такая жесткая техника не всегда приемлема, вдруг придется немного изменить xml и нужно будет переписывать парсер.
Складывать на мой взгляд лучше в массив, чем в нумерованые переменные: arr[i] = ...
догда другой вопрос:
flash берёт переменные из ХМЛ, но как сделать так чтобы, если я в данный момент заменил этот ХМЛ, то и у пользователя смотревшего в данный момент flashку он тоже "перезагрузился".
Пытался сделать перезагрузку в определённое время, но он похоже грузит из кэша - как-то это мона сделать чтобы грузил заного?