zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden zu komplizierter Code?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #31 (permalink)  
Alt 18.08.2009, 18:11
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Oh man, da hab' ich ja eine ganz schöne Diskussion ausgelöst.

Ich fühle mich eher im C++-Umfeld wohler als im C-Umfeld, und bei C++ ist es halt so, dass Variablen i.d.R. so spät wie möglich deklariert werden und so früh wie möglich wieder freigegeben werden, zumindest so, wie ich es gerlernt habe.

Gegen globale Varialben im Allgemeinen spricht für mich zum einen die Wiederverwendbarkeit, zum anderen der Überblick.
Einzelne Funktionen/Klassen sind wiederverwendbarer, wenn sie alles nötige übergeben bekommen und sich nicht auf irgendwelche globalen Variablen verlassen müssen.
Je lokaler man arbeitet, desto sauberer ist es imo, ein wenig performanter ebenso (denke ich), aber das ist bei heutigen Power-Maschinen nicht in jedem Bereich wichtig.
Allerdings muss man hier auch beachten, dass lokale Variablen auch erstmal angelegt werden müssen, hierzu fehlen wir Informationen, was nun wirklich schneller ist.

Ich arbeite im Auftrag für eine Firma, welche ein recht umfangreiches Tool in Perl geschrieben hat, da das Tool zum einen sehr gewachsen ist und zum anderen der ursprüngliche Hauptentwickler ebenso gerne mit globalen Variablen arbeitet, gibt es nun einen Haufen globaler Variablen, wo man tierisch aufpassen muss, dass man da nicht auf einmal irgendwas falsch zuweist, weil sonst das ganze Teil gegen die Wand fährt.
Nicht so schön, aber nun auch mit vertretbarem Aufwand leider nicht mehr zu ändern.

Insbesondere bei Javascript sind globale Variablen aber sehr sehr böse, was die Performance betrifft. Ich kenne die genauen Bezeichnungen jetzt nicht, aber bei Javascript werden sämtliche Variablen in eine Art Tabellen gespeichert und je Block wird eine neue Tabelle für lokale Variablen erstellt und auf einen Stack gelegt, zumindest so ungefähr.
Wenn man nun in einem Block auf eine Variable zugreift, wird erstmal in der obersten Tabelle nach der Variablen gesucht, wird sie nicht gefunden, wird im Stack nach unten gewandert usw. bis man auf unterster (globaler) Ebene angelangt ist, was schon einiges an Zeit in Anspruch nehmen kann.
Das Böse ist nun, dass dies bei jedem Zugriff auf eine Variable geschieht.
Ich habe schon mehrere Videotutorials zur Performance-Steigerung bei Javascript gesehen und in jedem wurde geraten Variablen auf die mehr als einmal zugegriffen wird lokal zwischenzuspeichern, um dieses rumgesuche zu vermeiden und so einen möglichst schnellen Zugriff auf die Variable zu erhalten.
Mit Zitat antworten
Sponsored Links
  #32 (permalink)  
Alt 18.08.2009, 18:14
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Hi Mantiz,

klar ist das bei einem Interpreter anders. Macht aber nix
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #33 (permalink)  
Alt 18.08.2009, 18:18
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Mir ist Deine etwas schleierhaft, push und pop haben nicht viel mit der
Speicherung lokaler Variablen zu tun. Eher vielleicht mit der Stackkorrektur
nach Funktionsende.

Werden die Funktionsargumente auf dem Stack an die Funktion übergeben,
holt man sie dort ab. Eher nicht mit push und pop.
Das waren nur Hinweise, wie intern die Daten gespeichert werden um zu erklären warum der Zugriff auf lokale Variabeln schneller ist.

Ich weiß aber auch nicht warum du darauf so rumreitest, du kannst natürlich auch einen Benchmark machen dann siehst du, das ich in demn Punkt recht habe, egal wie es jetzt konkret umgesetzt wird. In JS z.b. dürfte dieser Punkt eher untergeordnetet Rolle spielen, da rührt der Geschwindigkeitsvorteil wohl eher aus der Reihenfolge, in welchem Scope JS die Variabeln sucht. Ich wollte dir lediglich erklären, wie es in "deiner" Sprache ist und woher dort der Geschwindigkeitsvorteil kommt.

Du kannst dir natürlich auch ein paar Seiten durchlesen, wo erklärt, wird, wie das intern abläuft. Das hat aber null mit dem zu tun, worum du eigentlich diskutieren wolltest.

Es bleibt festzuhalten, dass es in C vielleicht sinnvoll ist das Konfigurationsvariabeln global sind. Ansonsten sind sie immer zu vermeiden.
Mit Zitat antworten
  #34 (permalink)  
Alt 18.08.2009, 18:30
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Na gut, trinken wir lieber mal ein Bier zusammen.

In der neuen c't ist ab Seite 160 ein ganz interessanter Artikel über Perfomance
bei JS. Lese ich gerade ...

JS legt für Variable anscheinend Tabellen an, für jeden Gültigkeitsbereich eine.
In der Praxis (meiner natürlich) sind das recht wenige, dürfte also wenig ausmachen.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #35 (permalink)  
Alt 18.08.2009, 18:44
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Ich zitiere einfach noch mal, den Ausgangpunkt der Diskussion:
Zitat:
Globale Variablen sind IMMER eine schlechte Idee.
Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Ok - begründe das bitte mal schlüssig. Ich diskutiere da germe mal 'drüber ...
Bis jetzt hast du wenig gesagt um meine Auflistung von Gründen, schlüssig zu widerlegen.
Mit Zitat antworten
  #36 (permalink)  
Alt 18.08.2009, 19:16
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Nein - genug. Es sollte klar sein.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #37 (permalink)  
Alt 18.08.2009, 20:55
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Jo, trinken wir lieber ein Bier zusammen.

So hetzerisch sollte das eigentlich gar nicht rüber kommen.

Ich mag globale Variablen halt nicht, werde jetzt aber nichts sagen, was evtl. für noch mehr Stoff sorgen könnte.

Ich denke was Javascript angeht, so sind wir uns einig (zumindest habe ich Deinen Post diesbzgl. so verstanden), also lassen wir es gut sein.

*Prost*
Mit Zitat antworten
  #38 (permalink)  
Alt 18.08.2009, 21:09
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Auch *prost*.

Es ist aber auch ein vertracktes Thema. Ich müßte mal sehen, ob mein Watcom
auch einen Assembler-Output macht, dann kann ich das kontrollieren. Der
alte Aztek machte das als default. x86 Assembler ist furchtbar, so viele
Befehle, daß man ständig im Buch nachsehen muß was der genau macht. 6502
oder 6809 sind da erheblich einfacher und irgendwie logischer (auch 68xxx).

Daß ich relativ häufig globale Variable verwende hängt auch damit zusammen,
das ich mir immer vorher das Script überlege und dann das interpretiere ...

Es sind halt immer so Standardsachen: Kunde will etwas neues, also suche ich
mir etwas, was ich so ähnlich schon mal gemacht habe und passe das an. Da
schleppen sich auch mal Altlasten durch. Man kann das Schlamperei nennen,
aber ich habe halt schnell ein Ergebnis (und das wird abgerechnet).

Als Beispiel: Ich lese XML, csv oÄ ein und weiß, es sind Zeilen mit max 32KB.
Paßt nicht auf Stack, also global den Lesepuffer. Ständig nachsehen wie lange
die Zeile in echt ist ist aufwändig und ständig malloc() und free() hat mit Performance
auch nichts am Hut (vor allem bei Dateien mit einigen 10000 Zeilen).

stack overflow ist auch nicht so prickelnd.

Ich würde auch nie auf die Idee kommen, so etwas mit JS auch nur zu probieren.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Antwort

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 are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML mit PHP Code aus Datenbank auslesen + ausführen Garlandt Serveradministration und serverseitige Scripte 14 01.05.2011 13:45
Wort in Javascript Code einfügen; dann Javascript Code ausgeben Sp33dy G0nz4l3s Javascript & Ajax 1 23.05.2008 10:37
DOM und (XML mit HTML CODE) verarbeiten WIE? silence_le Serveradministration und serverseitige Scripte 4 18.06.2007 18:33
Php Code und Html Code in Variable ausführen? The Sayan Serveradministration und serverseitige Scripte 17 23.01.2007 02:00
XHTML und CSS Code auszeichnen Lloyd Larkin Barrierefreiheit 11 20.07.2006 08:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:59 Uhr.