Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-01-2006, 22:04   #1 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
Parser klasse problem bei "while"... Der flashplayer wird durch ein script verlangsam

Hi folgendes problem ich schreibe gerade neparser klasse sowei kein grosses ding... eigentlich..

aber nun komme ich dazu das ich die childnodes aalle durchlaufe...

soweit auch kein problem

allerdings beinhaltet die kürzeste liste (die ich habe) genau 71 (unter) knoten mit jeweils 5-6 attributen... sollte man eigentlich meinen das das kein problem ist...

aber ich merke beim film testen schon das er endlos lange parst.. dann kommt irgendwann die meldung die bei einer sich totlaufenden applikation immer in flash kommt...

"der flashplayer wird durch ein script in diesem film verangsamt wollen sie verarbeitung des scriptes abbrechen ...."

meine schleife sieht so aus....
PHP-Code:
var counteing=0;
        var 
subnode.childNodes;
        
trace(n+"huhu")
        while (
subnode != null) {
        var 
OPMLCtext=this.convertEntities(subnode.attributes.text);
        var 
OPMLCdesc=this.convertEntities(subnode.attributes.description);
        var 
OPMLCtitel=this.convertEntities(subnode.attributes.titel);
        var 
OPMLCtype=this.convertEntities(subnode.attributes.type);
        var 
OPMLCvers=this.convertEntities(subnode.attributes.version);
        var 
OPMLCxmlU=this.convertEntities(subnode.attributes.xmlUrl);
        var 
OPMLChtmlU=this.convertEntities(subnode.attributes.htmlUrl);
        
subnode subnode.nextSibling;
        
counteing++
        
trace(counteing)
        
this.container.push(new Object({otitle:OPMLCtitel,otext:OPMLCtext,odesc:OPMLCdesc,otype:OPMLCtype,overs:OPMLCtype,oxmlu:OPMLCxmlU,ohtmlu:OPMLCxmlU}));
    } 
und befindet sich in einer Private Function an die das NodeObjekt "subNode" übergeben wird, darin enthalten... die eigentlichen subnodes die ich abfragen will.

laos steht in der ersten zeole noch..

PHP-Code:
var subnode subNode.firstchild

also ausgetracer bekommi ich da oben dieses huhu und dann bei der "aktuellen" xml datei 71 einträge und selbst bei dieser ebkomme ich die fehlermeldung, klicke ich hier auf nein.. also das script soll weiter ausgeführt werden, hab ich kurze zeit spüter alle ergebnissse...

AAABBBBEEERRR
die die ich eigentlich ausgeben will hat 675 und wenn ich da auf nein klicke kommt nur immer wieder diese fehlermeldung und das bis zum exitus...


wer sich nun fragt was die function convert html entities ist... das was der name schon sagt..da wird nur & gegen & zum beispiel ausgetauscht wird... und an dieser liegts absolut nicht die hab ich da schonmal rausgenommen selbes problem


also wer hat ne lösung?

Geändert von _level0 (30-01-2006 um 22:07 Uhr)
_level0 ist offline   Mit Zitat antworten
Alt 31-01-2006, 00:05   #2 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
hmmm ok es liegt gar nicht an der schleife oben

es liegt an einer anderen schleife udnzwar einer aus dem aufrufenden flash...

undzwar dieser schleife hier:

PHP-Code:
[PHP]    for (var 0i<myItems.lengthi++) {
        
trace("...:"+i)
        
Ausgabe.htmlText += "Titel: "+myItems[i].otitel+"<br>"+"Format: "+myItems[i].otype+" Version: "+myItems[i].overs+"<br>HTML: "+myItems[i].ohtmlu+"<br>RSS: "+myItems[i].oxmlu+"<br>Inhalt: <br>"+myItems[i].otext+"<br><br>"
    

[/PHP]

und das problem tritt nur auf wenn ich das letzte

PHP-Code:
myItems[i].otext 
hier mit drin habe...

aber es liegt nicht am inhalt selber ... setze ich es weiter nach vorne und lasse dafür was anderes weg.... gehts auch ohne fehlermeldung!
_level0 ist offline   Mit Zitat antworten
Alt 31-01-2006, 00:30   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.053
"..es liegt an einer anderen schleife.."
nett, das du uns lösungen gibst, für probleme, die wir ohne dich garnicht hätten ;-)

bleibt die generelle frage, warum alle immer ein XML in ein array umbauen müssen? über das attribut id kann direkt auf XML-nodes zugegriffen werden.
Code:
_xml = new XML('<blabla><a id="aaa"><b>bbb</b><c id="ccc">ccccc</c></a><blabla>');
//
if (getSWFVersion()<8) {
	trace(_xml["aaa"]);
	trace(_xml.ccc);
} else {
	trace(_xml.idMap["aaa"]);
	trace(_xml.idMap.ccc);
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (31-01-2006 um 00:47 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 31-01-2006, 00:50   #4 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
ok problemstelung ...

ein xml
2 firstchild.childnodes (head und body)

body hat 70(nachher 1000) childnodes

inhalte liegen nur in atributen vor

gewünschts ausgabe für das body tag

atibut1 von subnode 1
atibut2 von subnode 1
atibut3 von subnode 1
atibut4 von subnode 1
atibut5 von subnode 1
atibut6 von subnode 1

atibut1 von subnode 2
atibut2 von subnode 2
atibut3 von subnode 2
atibut4 von subnode 2
atibut5 von subnode 2
atibut6 von subnode 2

und so weiter (insgesamt 70 nachher 1000 mal)

daher hab ich 6 arrays angelegt und die attribute der nodes dann darf verteilt...diese wiederum in ein array gepackt... das geschieht alles in der angesprochneen klasse.. danach wird der spass im eigentlichen film abgerufen und wie oben in ein textfeld geschrieben....

denkst du es wäre perfomanter wenn ich mir das mit den arrays spare? und den spass nur über xml löse, ich hatte es zwischenzeitlich .. bzw am anfang nur mit bejecten geregelt und da hatte ich selbige probleme...

und warum das alles in einer klasse und einzeln übergeben.. weil es am einfachsten ist um nachher GUI von backend zu trennen (zumindest logisch)

bitte klär mich auf wenn du einen perfomanteren weg weisst weil ih denke auf dem weg komm ich nie ans ziel(oder erst wenn bei flashplayer version 750)
_level0 ist offline   Mit Zitat antworten
Alt 31-01-2006, 01:25   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.053
hab noch ein bisschen probiert:
Code:
_xml = new XML('<blabla><a id="aaa"><b>bbb</b><c id="ccc" name="xxx">cccccc</c></a><blabla>');
//
var link = (getSWFVersion()<8) ? _xml : _xml.idMap;
//
trace(link["aaa"]);
trace(link.ccc);
link.ccc.attributes.name = "Karl";
link.ccc.firstChild.nodeValue = "fffffffff";
trace(link.ccc);
var cccValue = link.ccc.firstChild.nodeValue;
var cccName = link.ccc.attributes.name;
trace(cccValue);
trace(cccName);
"..denkst du es wäre perfomanter wenn ich mir das mit den arrays spare?.."
die antwort nach dem sinn des lebens und allem anderen ist 42

ich kenne weder deine daten, noch wie du diese benutzen willst. die arbeit muss auf jeden fall geleistet werden. die frage ist: ob man am anfang merklich lange warten muss oder immer mal zwischendurch unmerklich lange ;-)
u.U. langt es nur teile in ein array zu sammeln?
und wie du am code siehst, man kann direkt in das XML schreiben und daraus lesen. alles eine frage der organisation.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (31-01-2006 um 01:28 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 31-01-2006, 01:27   #6 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
ok die frage nach dem performanter hat sich erledigt.. ich hab alles mal provesorisch in die klasse eingebaut... also mache nur einen schleifendurchlauf.
und schreibe den text als string mit htmal tags den ich dann übergebe..

ist nun sehr viel schneller und die 70 schafft er schonmal


EDIT:.. naja performanter ist es auf jedenfall, aber bei 674 einträgen braucht das teil auf meinem rechner inklusive laden der 256 kb grossen datei zwischen 45 sekunden und 1 minute

.... zu lange

also muss ich alles umbauen und es mit nem intervall machen und damit fällt denke ich das mit der Klasse flach und ich kann gleich alles auslagern.. damit wäre ich dann auch im falschen forum... was das alles für folgen hat..

wenn du es genau wissen willst ich bastle gerade eine erweiterung für meinen bereits funktionierenden rss reader.. da ich ich zwar schon eine eigen lib eingebaut habe mit wichtigen blogs und foren...aber das ganze möglichste noche rweitern wollte... wollte ich noch einen OPML Reader / Scanner intergrieren (OPML)

Geändert von _level0 (31-01-2006 um 01:44 Uhr)
_level0 ist offline   Mit Zitat antworten
Alt 31-01-2006, 03:29   #7 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
noch ne blöde frage, wo du eben erwähntest das xml und arrays miteinander zu verdinden nicht so gut wäre...

wo ich dir zumndest nach meinen bisherigen tests zustimme,

hast du irgenwoe ein beispiel wigentlich müsste ich das xml doch als dataprovider für eine datagrid komponente verwenden können aber wenn ich den XMLNode aus der klasse übergebe und den als dataprovider für ein datagrid angebe bleibt dieser leer
_level0 ist offline   Mit Zitat antworten
Alt 31-01-2006, 06:17   #8 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
bin intwischen mit meiner ersten lösung(array)
+ datagrid anstelle von html textfeld
+ dataprovider

jetzt auf ca. 16 sekunden runter
bei 265kb datei mit
674 reihen a jeweils
8 einträgen

also 5400 zellen

wenn jemand doch was einfällt wie es doch noch etwas schneller und perfomanter geht bitte melden...
machts da eigentlich noch sinn jetzt noch das grosse array in kleinere zu spliten um den dataprovider kleiner zu halten und dem user ein blättern zu ermöglichen?, weil ich merke das der datagrid ziemlich auf die performance des rechners drückt (ca 50% mehr cpu last)
_level0 ist offline   Mit Zitat antworten
Alt 31-01-2006, 07:09   #9 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
also ich würde ne blätter funktion mit integrieren, also immer nur 100 einträge anzeigen und unter dem datagrid einfach ne ComboBox mit der anzeilen der Seiten und eine einfaches >>Vor <<Zurück

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 31-01-2006, 07:19   #10 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
dachte ich mir auch so nicht nur um die resourcen zu sparen sondern auch um es übersichtlicher zu halten,

dann werd ich suchf und sortierungsfunktionen wohl besser für die arrays oder das xml schreiben.

fragt sich was dann länger dauert... xml durchsuchen und parsen oder das array mit über 5400 inhalten zu durchsuchen...

btw , ich hab eben beim suchen irgendwo bei MM gelesen das die datagrid kmoponente "nur" 5000 Zellen maximal schafft, wie kommts das bei mir 5400 angezeigt werden?(ob sie wirklich alle da sind weiss ich nicht aber der erste ist da und der letzte ist da und dazwischen viel zum scrollen)
_level0 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele