Jako sporo :( Jquery XML parsiranje (cca 20sekundi)

Hello imali koji majstor da mi da savjet.

Dok razvijam i testiram imam application server na stroju koji dinamicki stvara XML. Ja radim web client koji pomocu jquery-a dohvaca XML i parisra.

Problem: Jako sporo prikazuje podatke na sajt. Cak sam i ogranicia na 20-ak xml elemenata (posto cijeli ima oko 1000).

To je jedna lista kontakata. Neznam bili ovo tribalo ici ovako sporo??

Naime, di sam god gledao na google vecina parsira tako da iterira sa each(function(){…//kod koji parsira …}

Neznam tocno sta bi usporavalo toliko. (btw. firefox prikazuje parseerror neam pojma zasto, dok safari, IE rade normalno - posto je ovo za safari namjenjeno (iphone) nije toliko vazno ali bi ipak volia znati zasto ne radi na FF)

code:

$(document).ready(function()
{
 $.ajax({		 
   type: "GET",
   url: "http://192.168.xxx.xx:10000/rest/contacts/",
   dataType: "xml",
   success: parseXML,
   error: err  
	});	 	 
});	
function err(xhr, reason, ex) 
{ 
	alert('NECE');
	$('#output').append(reason);
}
//parser
function parseXML(xml)
{

  try{
	  $(xml).find("contact").each(function()
	  {
		$("#content > p").append($(this).find("CNT_NAME").text());
		$("#content > p").append(":  "+
$(this).find("CNT_ORGANIZATIONNAME").text() +" 
");	
				
	  });	
  } catch(e) {} 
}

<body>	

   <div id="title">
     <h3>Printing: Contact Name followed by organization</h3>
   </div>
	
   <div id="content">
    	<p></p>
   </div>

</body>



.........................................................................
XML example:
<?xml version="1.0" encoding="utf-8"?>
<RESPONSE xsi:noNamespaceSchemaLocation="http://192.168.xxx.xx:10000/rest/schemas/contacts_response.xsd">

<PARAMETERS>
<Ret_Data>
  <contact url="http://192.168.xxx.xx:10000/rest/contact/1">
  <CNT_ID>1</CNT_ID>
  <CNT_LASTNAME>Marko</CNT_LASTNAME>
  <CNT_FIRSTNAME>Matic</CNT_FIRSTNAME>
  [B]<CNT_ORGANIZATIONNAME>IT Business Soft</CNT_ORGANIZATIONNAME>[/B]
  <CNT_TYPE>1</CNT_TYPE>
  [B]<CNT_NAME>Marko Matic</CNT_NAME>[/B]
  </contact>

  <contact url="http://192.168.xxx.xx:10000/rest/contact/14044">
   ...
  </contact>
   ...
   ... itd
  
   </Ret_Data>
</PARAMETERS>

Hvala

edit (10 minutes expired):

Ima li smisla da se neradi on the fly nego prvo stavi u varijablu a onda ide dalje? Na ovo mislim:

$(xml).find(“contact”).each(function()
{
var $contact = $(this); //this pokazuje na jedan contact element
var ime = $contact.find(‘CNT_NAME’).text();
var org = $contact.find(‘CNT_ORGANIZATIONNAME’).text()+"
";

    var html = '<p>ime + org</p>';
    $('#content').append($(html));  

});

thx

Ne koristi Jquery, jako je spor. Meni su skripte pucale kod veceg broja podataka! :ljuca:

Ako ti je brzina bitna, koristi nativne DOM metode nakon sta isparsiras XML.

http://www.w3schools.com/Dom/dom_parser.asp

Za solidan wrapper nativnih DOM metoda mozes koristiti i:

http://www.cinsoft.net/mylib-doc.asp?view=object

ili

http://dhtmlkitchen.com/ape/

ili

http://pointedears.de/scripts/dhtml.js

ma nije toliko do jqueryija… (20sec???)
napisao sam ovaj post već pred 3h ali server buisy i nisam mogo poslat…
zašto na serveru ne napraviš da ti se sve posloži u html kod, a ne u xml i onda samo imaš $("#content").load(“url”);

[quote=“ivan.skugor”]Ne koristi Jquery, jako je spor. Meni su skripte pucale kod veceg broja podataka! :ljuca:

Ako ti je brzina bitna, koristi nativne DOM metode nakon sta isparsiras XML.

http://www.w3schools.com/Dom/dom_parser.asp

Za solidan wrapper nativnih DOM metoda mozes koristiti i:

http://www.cinsoft.net/mylib-doc.asp?view=object

ili

http://dhtmlkitchen.com/ape/

ili

http://pointedears.de/scripts/dhtml.js
[/quote]

Ej, fala na linkove :cuga2:. Nerazumim uopce zasto je jquery spor nema smisla…nesto tu usporava to moram skuziti. Zapravo jquery to u pozadini i radi, standardan javascript kod di provjeravas prvo koje su browsere u pitanju itd…a bome i mnogo jednostavnije parsira.

Opet ja i taj framework, nekako sam ga ucia i radim s njim vec neko vrime pa mi se tesko oprostiti tek tako i opet trosit vrime na drukcije…ali sta se mora mora.

IMHO za sada: Tribalo bi preispitati ove iteracije jer ocito tu previse trazi…mora postojati optimiziraniji nacin za odvajanje informacija iz xml-a. (iako je strasno human friendly ovako…)

[quote=“Kečko”]ma nije toliko do jqueryija… (20sec???)
napisao sam ovaj post već pred 3h ali server buisy i nisam mogo poslat…
zašto na serveru ne napraviš da ti se sve posloži u html kod, a ne u xml i onda samo imaš $("#content").load(“url”);[/quote]

Da, onaj …kako se to zove, indikator na browseru…znas ono kada se ucitava stranica…krug onaj…e pa on se vrti prvo negdje 10-11 sekundi i onda malo zabloka stranica i onda odjednom pokaze sve ono sta sam trazia u gornjem kodu.
…cca 15-18sek

XML-ove se dinamicki stvaraju na application serveru prema zahtjevu (REST implementiran): GET 192.168.xxx.xx:10000/rest/contacts - lista svih kontakata

Ima drugih tipova podataka koje prije nego sta udju u XMl, koje su base64 enkodirane slike, druge neke podatke itd…tako da iako sam upira u XSL meni je receno da ne kompliciram i vidim sa nekim js frameworkom koje su bogate opcijama, dok sam cuja i od drugih ljudi da sa XSL-om ce biti zajebancije vece.

XSL (server side) bi bilo bolje ali mi pari jako komplicirano i cudno (nisam ga jos nikad koristia), izgleda mi nekako ko da radis prema strogim pravilima?

PHP mi jedino ostaje ka opcija da otvori konekciju prema ovom drugom serveru, uzme xml…ali sta onda opet tribam parsirati…jedino da pripremim XSL za svaki XML i onda onaj php XSL transformator pa poslati gotovi html…

To bi sve jos trazilo vrimena na proucavanje. Uujutro cu testirati brzinu sa native dom metode kako je savjetovano. Povecati ce se kod garant :vatr:

[quote=“Kečko”]ma nije toliko do jqueryija… (20sec???)
napisao sam ovaj post već pred 3h ali server buisy i nisam mogo poslat…
zašto na serveru ne napraviš da ti se sve posloži u html kod, a ne u xml i onda samo imaš $("#content").load(“url”);[/quote]

mozes dat link ili kratki review tog posta, primjer? fala

ma ne, to i je taj post :slight_smile: moja ideja je bila da sve uradiš server side i daš gotov html kod sa servera koji sa ajaxom samo prikazuješ, a iskreno nećeš sigurno dobiti toliko na brzini sa time ako izbaciš jquery… to su nijanse, a jquery je jako brz… Sa izbacivanjem jquerija iskomplicirat ćeš si stvari, a nećeš postići ništa puno bolje…

U usporedbi sa cim? Cistim DOM-om? Bar je duplo sporiji pri manipulaciji DOM-om (na starijim browserima vjerovatno i vise), Ajax mu steka kod velikog broja podataka, UI na IE-u je brz ko Windowsi na POS aparatu. :zub:

Brz je u novijim browserima i novijim masinama … al opet, covjek se zapita, jel to zasluga Jquery-ja ili browsera. :wink:

…neznam

  1. JS na klijent side
    a) jos cu malo testirati jquery viditi u cemu je problem
    b) probati sa native DOM kako je skugor savjetova

  2. Bude li svakako presporo (uspija sam ubrzati na 6 sekundi :slight_smile: )

  • PHP na serveru pripremi HTML stranice.

Ljudi pitanje:

Kako mogu ograniciti onu each() petlju tako da samo prvo dijete pretrazuje, naime, kada GET vrati XML , i success poziva ParseXML, salje se naime cijela lista od 1500 elemenata


to je dubina koju zelim nekako ograniciti u tim petljama

imaš funkciju first

[quote=“doit16”].

  1. Bude li svakako presporo (uspija sam ubrzati na 6 sekundi :slight_smile: )

[/quote]

Mislim da ovo ima veze i s snagom korisnikova računala.
Ako je njegovo računalo slabije, tvojih 6 sek bi moglo biti 10sek na njegovom.

[quote=“gorrc”]Mislim da ovo ima veze i s snagom korisnikova računala.
Ako je njegovo računalo slabije, tvojih 6 sek bi moglo biti 10sek na njegovom.[/quote]

a ma isproba sam i na nova racunala, dobri su procesori tako da tu nema greske.

Evo, uspija sam smanjiti brzinu na 1 sekundu:

Generalna ideja ka ono sta sam i pomislia negdje gori, dakle prvo strpati u varijablu - primjer:

$(xml).find(‘contact’).each(function()
{
var imena = $(this).find(‘CNT_NAME’).text() + ‘
’;
$(’#ispis’).append(imena);
}

EVO ZASTO:

Mada sam unutar petlje, izgleda da je ubrzalo puno cim nisu visestruka trazenja u jednoj liniji. Da se nevaramo i $(’.otac > .sin’) je trazenje, pa je prethodno bilo npr:

$(xml).[color=“Blue”]find/color.[color=“Blue”]each[/color](function()
{
[color=“Blue”]$[/color]("#content > p").append($(this).[color=“Blue”]find/color.text());
}

Se moze ubrzati (izgleda tako) koristnjem varijable. Odnosno prethodno pohranjivanje vrijednosti u varijablama.

BTW.

Ima li ko primjer kako se mozes ograniciti na odredjeni level tijekom trazenje po XML dokumentu? Recimo, ja znam da moj XML ima dubinu = 2,

0 - ROOT
1 - Glavni element
2 - Childovi

..itd

Kako, dakle, meni moze ici u korist (u smislu brzine) ako ja znam kolika je dubina XML-a?

thx.

ps.

Oko 1500 contacta sada u cca 1sek. obavi…

[quote=“doit16”]a ma isproba sam i na nova racunala, dobri su procesori tako da tu nema greske.

Evo, uspija sam smanjiti brzinu na 1 sekundu:

Generalna ideja ka ono sta sam i pomislia negdje gori, dakle prvo strpati u varijablu - primjer:

$(xml).find(‘contact’).each(function()
{
var imena = $(this).find(‘CNT_NAME’).text() + ‘
’;
$(’#ispis’).append(imena);
}

EVO ZASTO:

Mada sam unutar petlje, izgleda da je ubrzalo puno cim nisu visestruka trazenja u jednoj liniji. Da se nevaramo i $(’.otac > .sin’) je trazenje, pa je prethodno bilo npr:

$(xml).[color=“Blue”]find/color.[color=“Blue”]each[/color](function()
{
[color=“Blue”]$[/color]("#content > p").append($(this).[color=“Blue”]find/color.text());
}

Se moze ubrzati (izgleda tako) koristnjem varijable. Odnosno prethodno pohranjivanje vrijednosti u varijablama.

BTW.

Ima li ko primjer kako se mozes ograniciti na odredjeni level tijekom trazenje po XML dokumentu? Recimo, ja znam da moj XML ima dubinu = 2,

0 - ROOT
1 - Glavni element
2 - Childovi

..itd

Kako, dakle, meni moze ici u korist (u smislu brzine) ako ja znam kolika je dubina XML-a?

thx.

ps.

Oko 1500 contacta sada u cca 1sek. obavi…[/quote]

Mislim da ne razumijes bas sta tocno radis. :slight_smile:

Tvoj primjer o “brzini” Jquery-ja nema veze sa tvojom problematikom.

Probaj ovo pa javi rezultat:

I btw, ova prva linija koda nema veze sa Jquery-jem ni sa njegovom “brzinom”, nego ima veze sa programerskom logikom, naime, doticni element se ne dohvaca svaki put u petlji (each) nego se van petlje stvara referenca na njega. Takvo ubrzanje nije Jquery-jevsko, nego cisto logicno, posto se operacija dohvacanja vise ne obavlja n puta u petlji, nego se obavi jedan put van petlje. Rezultat je u oba slucaja isti element, razlika je jedino u broju dohvacanja. Takva optimizacija cak i nije vezana striktno uz Javascript.

var p = $("#content > p");

$("contact", xml).each(function() {
  
    $(p).append($("CNT_NAME", this).text());
   $(p).append($("
"));
});

[quote=“ivan.skugor”]Mislim da ne razumijes bas sta tocno radis. :slight_smile:

Tvoj primjer o “brzini” Jquery-ja nema veze sa tvojom problematikom.

Probaj ovo pa javi rezultat:

I btw, ova prva linija koda nema veze sa Jquery-jem ni sa njegovom “brzinom”, nego ima veze sa programerskom logikom, naime, doticni element se ne dohvaca svaki put u petlji (each) nego se van petlje stvara referenca na njega. Takvo ubrzanje nije Jquery-jevsko, nego cisto logicno, posto se operacija dohvacanja vise ne obavlja n puta u petlji, nego se obavi jedan put van petlje. Rezultat je u oba slucaja isti element, razlika je jedino u broju dohvacanja. Takva optimizacija cak i nije vezana striktno uz Javascript.

var p = $("#content > p");

$("contact", xml).each(function() {
  
    $(p).append($("CNT_NAME", this).text());
   $(p).append($("
"));
});

[/quote]

Ej Ivane, pa da na to sam i mislija malos am se u nedostatku izrazia, nisam mislija da je to Jquery-jevsko ali…u mom slucaju je sa 12 sekundi skocilo na 1 sekundo

jer sam unutar each petrlje prvo pridruziva varijablama odredjene upite.

Ocu, sutra ujutro posto nemam app.server kod kuce. Pozdrav

To ne bi smjelo imati utjecaja (bar ne u smislu onog primjera sa ubrzanjem). Mislim da si dobio ubrzanje zbog neceg drugog.

Da zaokruzim ovaj topic

Ima pak nekoliko tehnika koji imaju veze sa brzinom jQuerya. Postoje i tehnika koje nisu vezani toliko za jQuery kao u proslom primjeru gdje malo kesiras prvo.

[color=“Blue”]Bolje je koristiti id-selektore[/color]
$(’#mojDiv’)
nego klasne
$(’.prvi’)
jer kada primjerice insertamo mnogo DOM elemenata trazenje elementa pomocu selektora moze biti jako sporo jer mora prvo prolaziti kroz cilu dom strukturu. Pomaze ako napises sto vise hintova od trazene lokacije, npr.
$(’.prvi > .drugi > .treci > .cetvrti’)
ili kao sta sa sam gori navea koristiti direktno #ID

Ono sta zelim reci je da je lako koristiti framework i kazati: “ah ja imam samo to napisati” ali zapravo u pozadini moze biti hrpa koda, i ponekad nezeljeno moze biti beskonacno prebrojivo mnogo iteracija (parsiranje etc) u pozadini :gitara:
Anyway, lako je koristiti znak [color=“Red”]$[/color]. Ali triba znati ipak par dobrih savjeta ili sta se nalazi ispod haube.

Ostatak savjeta i tipova su na stranici:

http://www.jedi.be/blog/2008/10/10/is-your-jquery-or-javascript-getting-slow-or-bad-performance/

Opet, nema to veze sa ubrzavanjem Jquery-ja. Izbor selektora, odnosno njegovo dobro definiranje spada u drugu domenu. Bolja definicija selektora suzava prostor pretrazivanja, pa se s time dobije na brzini.

tocno.

naslov teme je: jako sporo jquery xml parsiranje:
Generalno znacenje: Koristim jquery te mi je XML parsiranje jako sporo
Razlog: Nedovoljno znanja itd, bilo to povezano striktno sa jQuery-em (ili opcenito programerskim tehnikama) meni je svejedno jer u oba slucajeva lekcija naucena.
Solucija problema: Kesiranje + Definiranje selektora AMEN
Izvorni problem: Vrijeme parsiranje 1500 kontakata ubrzati do na 1 sekundu.
Problem rijesio: doit16 (niko nije citao kod)

Zakljucak:
naucia sam po nesto i u puno tih jquery knjiga ne navode da bi se sporo izvrsavalo ukoliko ne pripazis. Tocno, nema veza striktno sa jquery frameworkom.

Poznat primjer na internetu (bez kesiranja):

http://www.switchonthecode.com/tutorials/xml-parsing-with-jquery

korisno: IMROVE YOUR JQUERY - 25 excellent tips!!

http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx

Dali svaki od tih 25 tips ima veze sa Jqueryem?? hm… mozda kad bi bia suludo dobar programer i sam bi se barem pola sjetio :slight_smile: a da nemaju veze sa jquerijem, nego sa izborom nekakvim i mojim iskustvom?

To nije pretpostavka od koje zelim polaziti, tu sam da ucim, pa ako ce to bit neka caka opcenita igrom slucaja vezana za neku tehnologiju - odlicno!


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja