Ekivisi evos overflowed span stnv kato meria tou

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 23 Ιουν 2005 18:14

oxi dev lew afto to CDATA eivai xrisimo movo otav dev 8es va kaveis escape tous sigkekrimevous xaraktires :)
n html entities se apalasei apo aftn tnv diadikasia
kai outos n allos to va metatrepeis tous xaraktires sta equivelant htmlika komatia tous eivai aparetito kai gia allous logous

opote me tnv htmlentities glitoveis evtelos ta CDATA
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από skeftomilos » 23 Ιουν 2005 23:00

Ok, δίκιο έχεις.:) Θα μπορούσε όμως κάποιος να ήθελε να στείλει έτοιμο κώδικα HTML από τον server, οπότε δε θα γλίτωνε τα CDATA νομίζω...
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 24 Ιουν 2005 01:57

sigoura alla se eva browser based chat sistima sigoura 8es minimum stuff kai av pervave html kai scripts kai tetoia sigoura parexeis eva extra kivdivo pou dev tov 8es
Giafto kai aloste xrisimopioume katakorov afto pou ekave introduse gia proti fora to phpbb to bbcode pou eivai eva ipokatastato kai asfales (oso mporei:P) se sxesi me tnv domi tis html afou apotelite apo safe xaraktires
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από skeftomilos » 25 Ιουν 2005 20:12

Βρίσκω ευκαιρία για μια παρατήρηση που μπορεί να είναι χρήσιμη. Οι μέθοδοι του DOM όπως η document.getElementsByTagName δεν επιστρέφουν κανονικά JavaScript arrays αλλά αντικείμενα τύπου HTMLCollection. Στην πράξη δεν υπάρχει μεγάλη διαφορά καθώς η πρόσβαση στα στοιχεία γίνεται με τη σύνταξη [] και στις δύο περιπτώσεις:

Κώδικας: Επιλογή όλων

var array = ["mathematics", "physics", "chemistry"]
var first_element = array[0]

var collection = document.getElementsByTagName("div")
var first_element = collection[0]
Για τις DOM συλλογές υπάρχει κι ένας άλλος τρόπος πρόσβασης, η ιδιότητα item:

Κώδικας: Επιλογή όλων

var first_element = collection.item(0)
Παρ'όλα αυτά υπάρχει ένα ζήτημα απόδοσης. Η ιδιότητα length της HTMLCollection είναι υπολογιζόμενη και άρα πιο αργή από τη αντίστοιχη ιδιότητα των JavaScript arrays. Επομένως ο παρακάτω κώδικας είναι σπάταλος σε CPU:

Κώδικας: Επιλογή όλων

for &#40;var i = 0; i < collection.length; i++&#41; &#123;
  var element = collection&#91;i&#93;
&#125;
... γιατί σε κάθε loop πρέπει να υπολογίζεται η length. Πολύ προτιμότερος είναι ο παρακάτω:

Κώδικας: Επιλογή όλων

var length = collection.length
for &#40;var i = 0; i < length; i++&#41; &#123;
  var element = collection&#91;i&#93;
&#125;
Η διαφορά είναι ιδιαίτερα εμφανής στον Firefox 1.0, αλλά πολύ λιγότερο (σχεδόν ανύπαρκτη) στους IE6 και Opera 8.0.

Όσον αφορά τη σύγκριση απόδοσης μεταξύ JavaScript arrays και συλλογών HTMLCollection, τα πρώτα είναι τουλάχιστον δέκα φορές ταχύτερα. Με λίγα λόγια το DOM είναι αργό. :P
Τελευταία επεξεργασία από το μέλος skeftomilos την 27 Ιουν 2005 02:27, έχει επεξεργασθεί 1 φορά συνολικά.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 25 Ιουν 2005 20:20

pavtos n simiosi pou kaveis eivai gevika eksaplomevi se oles tis glosses kai oxi aparetita logo tou DOM

as pou me kai stnv php eivai kalo practice va apofeboume tnv epavalipsi se while for kai loops gevikotera twv function pou ipologizouve mege8i opos
sizeof streln count ... opote dev mou kavei ekpliksi n paratirisi pou kaveis :)

Aftos o tropos bebea eivai xrisimos movo otav
mesa sto loop iparxei periptosi va allaksei to mege8os
tou mege8ous pou metras :)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από skeftomilos » 27 Ιουν 2005 02:28

Η αλήθεια είναι ότι συνηθισμένος από τη VB μου είχε διαφύγει τόσον καιρό αυτή η λεπτομέρεια. Στη VB (και τη VBScript) ο αριθμός των επαναλήψεων ενός βρόγχου υπολογίζεται μόνο μία φορά:

Κώδικας: Επιλογή όλων

Dim arr, i, element
arr = Array&#40;"mathematics", "physics", "chemistry"&#41;
For i = LBound&#40;arr&#41; To UBound&#40;arr&#41;
  element = arr&#40;i&#41;
Next
Η έκφραση UBound(arr) θα υπολογιστεί μόνο μία φορά, ακόμα κι αν μέσα στο βρόγχο γίνει αύξηση ή μείωση των στοιχείων του array.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 27 Ιουν 2005 08:21

evdiaferousa leptomeria :)
Perl php C++ python afta ipologizouve ek veou to for kai to while
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 06 Αύγ 2005 23:59

Paratirisa eva problimataki me to ajax.

O borwser tivei va metatrepei aftomata tous xaraktires se utf8. Afto exei os apotelesma otav to input eivai se allo charset va dieliei olo to xml tree .

Iparxei arage kapoios tropos va elegxoume to encoding pou diabazei kai stelvei dedomeva meso tou XMLHttpRequest ?
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

smiley
Δημοσιεύσεις: 1382
Εγγραφή: 18 Μαρ 2005 14:02

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από smiley » 13 Αύγ 2005 01:01

Rapid-eraser έγραψε: ...
pavtos afto to xmlhttpRequest eivai o roufianos tou internet :P
mporeis va kaveis trelo sniffing kai intersect se
polla pragmata kai favtazomai oti mias kai twra
sividitopiisame tnv xrisimotita tou sivtoma 8a doume
xmlhttpRequest locking/blocking stous browsers :(
...
o megaliteros roufianos toy internet einai to google toolbar :wink:

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 13 Αύγ 2005 02:30

movo pou prepei va tov egkatastiseis gia va givei o megaliteros ... to xmlhttprequest eivai idi egkatestimevo :P
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από skeftomilos » 21 Αύγ 2005 20:09

Δεν ξέρω αν η ερώτηση παραμένει επίκαιρη αλλά σήμερα το κοίταξα και νομίζω ότι η λύση βρίσκεται στο XML declaration:

Κώδικας: Επιλογή όλων

<?xml version="1.0" encoding="iso-8859-7" standalone="yes"?>
<data>Καλημέρα!</data>
Η ιδιότητα http.responseText επιστρέφει ????! στον IE, αλλά μέσω responseXML το διαβάζει σωστά:

Κώδικας: Επιλογή όλων

alert&#40;http.responseXML.documentElement.firstChild.nodeValue&#41;  // = Καλημέρα!
Κοίταξα από περιέργια τον κώδικά σου για να δω αν αντιμετώπισες ένα πρόβλημα που συνάντησα:

Κώδικας: Επιλογή όλων

httpGetData.open&#40;'GET' , 'server.php?lastid=' + lastid + '&nick=' + nickname + '&fake='+Math.floor&#40;Math.random&#40;&#41; * 1000000&#41;&#41;;
Ο Opera αδιαφορεί για τον HTTP header Expires και κάνει cached τα αρχεία όταν το url δεν αλλάζει. Οπότε καλά κάνεις και προσθέτεις την παράμετρο &fake, αν και θα προτιμούσα new Date().getTime() που επιστρέφει σίγουρα μοναδικό αριθμό. Απ' ό,τι είδα η συμπεριφορά του Opera καθορίζεται από μία επιλογή στα Options:

Tools - Preferences - History - Check documents

Το default είναι Every 5 hours, και νομίζω δε μας κάνει! :)

Υπάρχει ακόμα ένας τρόπος για αθόρυβη επικοινωνία browser-server (εκτός από τα iframes), το script rewriting. Δηλαδή ξαναγράφουμε δυναμικά ένα tag <script> (δεν αρκεί η αλλαγή του src) και μετά από λίγο ο κώδικας που περιέχει το νέο js αρχείο είναι διαθέσιμος. Υπάρχουν οι ίδιες επιπλοκές με το caching που υπάρχουν και με το XMLHttpRequest, αλλά γενικά η μέθοδος είναι κάπως πρωτόγονη.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από Rapid-eraser » 21 Αύγ 2005 21:42

8a to koitakso ksava afto av kai vomizo oti otav ekava testakia stov server me xml kai allo charset eixa to idio problima.

To problima omos parola afta paramevei kai stnv me8odo apostolis twv data apo to httpXMLRequest kai ta apostelei pali sav unicode ... perierga pragmata !

Afto me to cache to paratirisa stov IE kai avagkastika eprepe va bro mia me8odo gia tnv allagi tou url.
Afto me to time profavos eivai pio sosti prosegkisi
parola afta tnv dedomevi stigmi pou egrafa tov kodika dev to skeftika :)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από skeftomilos » 04 Σεπ 2005 05:45

Δοκίμασα να στείλω δεδομένα στον server με τη μέθοδο POST, αλλά όταν έφτανε το request στον server η ASP συλλογή Request.Post ήταν άδεια. Με λίγο Googling προέκυψε ότι χρειάζεται να προστεθεί client-side ένας ειδικός header για να καταλάβουν τα server scripts ότι πρόκειται για POST data:

Κώδικας: Επιλογή όλων

http.open&#40;'POST', url, true&#41;
http.setRequestHeader&#40;'Content-Type', 'application/x-www-form-urlencoded'&#41;
http.send&#40;data&#41;
Δουλεύει περίφημα μέχρι να το δοκιμάσει κανείς με Opera 8.00 και να δει ότι η μέθοδος setRequestHeader() δεν υπάρχει! Όμως στην έκδοση 8.01 που βγήκε πρόσφατα διόρθωσαν αυτή τη σοβαρή έλλειψη, μόνο που κατάφεραν να την κάνουν λίγο buggy (έτσι για να μας βασανίζουν :P) με αποτέλεσμα να βάζουν σε μπελάδες τους ColdFusion developers. Περισσότερες λεπτομέρειες σε αυτό το μικρό αλλά ενδιαφέρον άρθρο.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από cherouvim » 04 Σεπ 2005 09:07

skeftomilos έγραψε:

Κώδικας: Επιλογή όλων

var length = collection.length
for &#40;var i = 0; i < length; i++&#41; &#123;
  var element = collection&#91;i&#93;
&#125;
Distihos omos exeis spatalisei to var length pou pleon exei global scope sto simeio pou to exeis valei. Fysika den ginete sto javascript. Stis pragmatikes glosses programatismou grafe:

Κώδικας: Επιλογή όλων

for&#40;int i=0, length=collection.size&#40;&#41;; i<length; i++&#41; &#123;
   foo&#40;&#41;;
&#125;
I akoma kalytera to foreach tis php i to for(TYPE element: collection) tis Java 1.5

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Ekivisi evos overflowed span stnv kato meria tou

Δημοσίευση από skeftomilos » 04 Σεπ 2005 19:08

Χε χε! Ωραίες οι παρατηρήσεις, αλλά για να αποδειχτεί ότι η JS δεν είναι πραγματική γλώσσα θα χρειαστεί περισσότερη προσπάθεια. :P

α) Απόλυτα έγκυρος JavaScript κώδικας:

Κώδικας: Επιλογή όλων

for &#40;var i = 0, length = collection.length; i < length; i++&#41; &#123;
  var element = collection&#91;i&#93;
&#125;
β) Ακόμα καλύτερος τρόπος για enumeration:

Κώδικας: Επιλογή όλων

for &#40;var i = 0, element; element = collection&#91;i&#93;; i++&#41; &#123;
&#125;
γ) Νόμιμος αλλά πιο αργός και εν δυνάμει προβληματικός τρόπος σε στυλ foreach:

Κώδικας: Επιλογή όλων

for &#40;var i in collection&#41; &#123;
  var element = collection&#91;i&#93;
&#125;
δ) Ο παρακάτω κώδικας δε λερώνει το local namespace μόνο με την length αλλά και με τις i και element.

Κώδικας: Επιλογή όλων

var length = collection.length
for &#40;var i = 0; i < length; i++&#41; &#123;
  var element = collection&#91;i&#93;
&#125;
Τέτοιου είδους κώδικας βρίσκεται συνήθως μέσα σε ρουτίνες, οπότε το global namespace μένει καθαρό. Αν πρόκειται να τρέξει σε global scope τον κλείνουμε σε μία ανώνυμη ρουτίνα και είμαστε OK. :)

Κώδικας: Επιλογή όλων

&#40;function&#40;&#41; &#123;
  var length = collection.length
  for &#40;var i = 0; i < length; i++&#41; &#123;
    var element = collection&#91;i&#93;
  &#125;
&#125;&#41;&#40;&#41;
Οι σύγχρονες βιβλιοθήκες JavaScript φτιάχνονται σχεδόν αποκλειστικά με αυτό τον τρόπο. Όλος ο κώδικας βρίσκεται μέσα σε μία ανώνυμη function και έξω υπάρχει μόνο μία δήλωση μεταβλητής που αποτελεί και τη μοναδική δίοδο επικοινωνίας με τα ενδότερα. Χρειάζεται μόνο λίγη προσοχή με την closure για να μη δημιουργηθούν IE-memory-leaks.

Κώδικας: Επιλογή όλων

var AcroNix

&#40;function&#40;&#41; &#123;
  //1000 γραμμές κώδικα.
&#125;&#41;&#40;&#41;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης