Mit Internet-Explorer sehr langsam! (Bugs)

by Steffen @, Thursday, October 14, 2010, 16:27 (4914 days ago)

Hallo,

ist schon bekannt, dass die neue Version (konkret 2.2.6) mit dem Internet-Explorer ziemlich langsam ist? Betroffen ist nur die Startseite (Anzeige: 30 Threats mit je 10-20 Antworten, Ladezeit bis zu 10 Sekunden und mehr). Es tritt beim IE6, IE7 und IE8 auf, beim neuen IE9 anscheinend nicht. Die Browser anderer Hersteller laufen einwandfrei.

Ich vermute(!) es liegt daran, dass die JavaScript-Datei neu programmiert wurde und nun mit einem der vielen Fehler des IE kollidiert.

Viele Grüße
Steffen

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Thursday, October 14, 2010, 16:30 (4914 days ago) @ Steffen

Hi,

Ich vermute(!) es liegt daran, dass die JavaScript-Datei neu programmiert wurde

Kannst Du das _hier im Forum_ reproduzieren? Hier läuft ja das selbe Script.

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Thursday, October 14, 2010, 16:39 (4914 days ago) @ Micha

Hallo Micha,

Ich vermute(!) es liegt daran, dass die JavaScript-Datei neu programmiert wurde

Kannst Du das _hier im Forum_ reproduzieren? Hier läuft ja das selbe Script.

Ich meine ja. Die Ladezeit ist geschätzt eine halbe Sekunde langsamer (IE6 gegenpber FireFox).

Ja, bei so kurzen Zeiten kann das auch eine andere Ursache haben; allerdings sind hier auf der Startseite wesentlich weniger Beiträge zu laden, sodass der "Fehler" nicht so sehr auftritt (vermute ich mal).

Ich geb Dir mal den Link zum Forum, dann kannst Du es selbst probieren:
http://www.ice-treff.de (kannst den Link ja wieder löschen)

Viele Grüße
Steffen

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Thursday, October 14, 2010, 16:44 (4914 days ago) @ Steffen

Hallo,

Ich meine ja. Die Ladezeit ist geschätzt eine halbe Sekunde langsamer (IE6 gegenpber FireFox).

Eine halbe Sekunde länger? Hier im Forum? Okay, das kann ich nicht bestätigen. Auch bei Dir kann ich zwischen Opera und IE keinen signifikanten Unterschied erkennen. Wir es schneller, wenn Du das JS mal aus dem Template entfernst?

(kannst den Link ja wieder löschen)

Wegen mir muss der nicht weg. Es gibt ja noch andere Helfer, die ggf. noch weitere Ideen haben. Daher: Soll ich ihn löschen?

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Thursday, October 14, 2010, 16:56 (4914 days ago) @ Micha

Hallo Micha,

Danke erstmal!

Ich meine ja. Die Ladezeit ist geschätzt eine halbe Sekunde langsamer (IE6 gegenpber FireFox).

Eine halbe Sekunde länger? Hier im Forum? Okay, das kann ich nicht bestätigen. Auch bei Dir kann ich zwischen Opera und IE keinen signifikanten Unterschied erkennen.

Dein IE ist nicht Version 9? Denn der funktioniert anscheinend problemlos (ich frage nur zur Vergewisserung).

"Mein" IE (Version 6) benötigt bei meinem Forum ungefähr 9 Sekunden, wenn ich die Zahl der Threats von 30 auf 20 reduziere etwas weniger.

Wir es schneller, wenn Du das JS mal aus dem Template entfernst?

Probier ich später, muss jetzt außer Haus (dachte nicht, dass mein Eintrag sofortige Arbeit nach sich zieht *gg*)

(kannst den Link ja wieder löschen)

Wegen mir muss der nicht weg. Es gibt ja noch andere Helfer, die ggf. noch weitere Ideen haben. Daher: Soll ich ihn löschen?

Wegen mir nicht! Ich war mir nur nicht sicher, ob Euch solche Links recht sind.

Viele Grüße
Steffen


P.S.: Eine Frage noch: Wenn man auf "aktualisieren" klickt, werden ja die roten Pfeile grau. Das kann ich nachvollziehen (würde es aber "als gelesen markieren" nennen). Allerdings erscheinen auch alle Beiträge, die ich besucht habe (=lila) wieder als ungeselen (=blau). Ist das Absicht?

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Thursday, October 14, 2010, 17:08 (4914 days ago) @ Steffen

Hi,

Dein IE ist nicht Version 9? Denn der funktioniert anscheinend problemlos (ich frage nur zur Vergewisserung).

Gut, dass Du das fragst. Aber nein, es ist einer der 8ter

[image]

Probier ich später, muss jetzt außer Haus (dachte nicht, dass mein Eintrag sofortige Arbeit nach sich zieht *gg*)

Sondern? ;-) Okay. Lass es mich/uns bitte wissen. Sollte es am JS liegen und der IE9 wirklich schneller sein, dann könnte es daran liegen, dass der 9er ggf. DOMContentLoaded nun kann. Bis zur 8ter Reihe konnte das in jedem Fall keiner der IEs und wir haben einen Trigger eingebaut, der im IE solange probiert, bis er feuert.
Sollte das also wirklich das Problem sein, so könnte man das JS ans Ende der Seite packen und dort direkt starten und nicht über onload gehen. Ich habe im SELF-Raum auch schon gelesen, dass dies sogar empfohlen wird...

Wegen mir nicht! Ich war mir nur nicht sicher, ob Euch solche Links recht sind.

Ich denke nicht, dass es ein Problem ist. Schließlich triott bei Dir das Problem auf, warum also nicht "zeigen".

P.S.: Eine Frage noch:

Ich kann Dir ein paar Sachen zum JS sagen - mehr nicht ;-)

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Thursday, October 14, 2010, 22:51 (4914 days ago) @ Micha

Hallo,

Probier ich später, muss jetzt außer Haus (dachte nicht, dass mein Eintrag sofortige Arbeit nach sich zieht *gg*)

Sondern? ;-)

Wenn ich wieder zurück bin - also jetzt :-D

Also: Wenn die Datei main.min.js nicht geladen wird, läd die Seite im IE normal schnell.

Sollte es am JS liegen und der IE9 wirklich schneller sein, dann könnte es daran liegen, dass der 9er ggf. DOMContentLoaded nun kann. Bis zur 8ter Reihe konnte das in jedem Fall keiner der IEs und wir haben einen Trigger eingebaut, der im IE solange probiert, bis er feuert.
Sollte das also wirklich das Problem sein, so könnte man das JS ans Ende der Seite packen und dort direkt starten und nicht über onload gehen. Ich habe im SELF-Raum auch schon gelesen, dass dies sogar empfohlen wird...

Was heißt das konkret? Ich probiere das gerne mal aus (und berichte dann).

Viele Grüße
Steffen

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Friday, October 15, 2010, 04:39 (4914 days ago) @ Steffen

Hi,

Was heißt das konkret? Ich probiere das gerne mal aus (und berichte dann).

Ich nenne Dir mal die Änderungen an der main.js (die mini ist zum Spielen eher ungeeignet). Entweder Du änderst es auch in dieser Datei, dann muss diese aber auch eingebunden werden oder Du suchst die Stellen in der mini und änderst es da.
Mach bitte von allen Dateien, die Du änderst, eine Kopie! Ich habe alle Änderungen nicht getestet, bin also auf Deine Hinweise angewiesen ;-)

In der main.js findest Du ganz am Ende folgende Zeilen:

 
 var mlf = null;
 window.ready.push(function() {
  mlf = new MyLittleJavaScript();
  var ajaxPreviewStructure = typeof settings != "undefined" && typeof settings["ajaxPreviewStructure"] == "string"?settings["ajaxPreviewStructure"]:false;
  if (mlf && typeof lang == "object") 
   mlf.init(ajaxPreviewStructure);
 });

Das änderst Du mal in folgendes:

 
 var mlf = new MyLittleJavaScript();
 var ajaxPreviewStructure = typeof settings != "undefined" && typeof settings["ajaxPreviewStructure"] == "string"?settings["ajaxPreviewStructure"]:false;
 if (mlf && typeof lang == "object") 
  mlf.init(ajaxPreviewStructure);
 

Jetzt sollte das Objekt nicht mehr onload erstellt werden sondern direkt. Problem ist, dass das Objekt ein paar Manipulationen im DOM vornimmt, welches zu diesem Zeitpunkt noch gar nicht existiert. Aus diesem Grund muss das Script im Template nun aus dem Kopf ans Ende der Datei vor den schließenden BODY-Tag.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>my little forum</title>
</head>
<body>
 
<!-- Die Einträge usw. -->
 
<script src="js/main.min.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>

Möglicherweise reicht es auch schon, wenn Du nur das Script ans Ende des Templates kopierst, da es auch dann erst am Ende der Seite geladen wird. Du könntest dies ja vor der Manipulation des Scriptes mal ausprobieren.

Viel Erfolg
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Friday, October 15, 2010, 09:33 (4914 days ago) @ Micha

Also:

  • JS-Code austauschen, JS laden im HEAD ==> schnell, aber fehlerhafte Darstellung
  • JS-Code austauschen, JS laden im BODY ==> langsam
  • JS-Code nicht austauschen, JS laden im BODY ==> langsam
  • JS-Code löschen (also den Teil, den ich austauschen sollte), JS laden im BODY ==> langsam

Gerade letzter Erkenntnis deutet imho darauf hin, dass es an einer anderen Stelle im JS-Code liegen muss

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Friday, October 15, 2010, 09:58 (4914 days ago) @ Steffen

Hi,

JS-Code austauschen, JS laden im HEAD ==> schnell, aber fehlerhafte Darstellung

Es wird ein Fehler geben, was das Script vorzeitig abbricht.

JS-Code austauschen, JS laden im BODY ==> langsam
JS-Code nicht austauschen, JS laden im BODY ==> langsam

Schade, aber dann funktioniert der Trigger ja zumindest. eigentlich hätte ich hier schon mehr erwartet, da der Browser nun nicht erst das Script abarbeitet...

JS-Code löschen (also den Teil, den ich austauschen sollte), JS laden im BODY ==> langsam

WAS hast Du gelöscht? Den Teil, den ich Dir gezeigt hatte?

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Friday, October 15, 2010, 10:03 (4914 days ago) @ Micha

Hallo,

JS-Code löschen (also den Teil, den ich austauschen sollte), JS laden im BODY ==> langsam

WAS hast Du gelöscht? Den Teil, den ich Dir gezeigt hatte?

Ich habe den Teil gelöscht, den ich ersetzen sollte. Also ersatzlos rausgeflogen war folgendes:

var mlf = null;
 window.ready.push(function() {
  mlf = new MyLittleJavaScript();
  var ajaxPreviewStructure = typeof settings != "undefined" && typeof settings["ajaxPreviewStructure"] == "string"?settings["ajaxPreviewStructure"]:false;
  if (mlf && typeof lang == "object") 
   mlf.init(ajaxPreviewStructure);
 });

Ich wollte damit ausprobieren, ob dieser Codeabschnitt überhaupt für das Problem verantwortlich ist.

Viele Grüße
Steffen

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Friday, October 15, 2010, 10:05 (4914 days ago) @ Steffen

Hallo,

Ich wollte damit ausprobieren, ob dieser Codeabschnitt überhaupt für das Problem verantwortlich ist.

Wenn Du diese Zeilen löscht, sollte es zu Deinem ersten Versuch keinen Unterschied mehr geben. Diese paar Zeilen sorgen dafür, dass das Script überhaupt startet. Löscht Du diese Zeilen, sollten alle JS-Funktionen nicht mehr gehen (auf der Hauptseite). Insofern muss es mit Deiner ersten Lösung, wo das Script irgendwann abbricht, (fast) gleich sein. Ist dies so?

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Friday, October 15, 2010, 12:32 (4914 days ago) @ Micha

Hi :)

Ich wollte damit ausprobieren, ob dieser Codeabschnitt überhaupt für das Problem verantwortlich ist.


Wenn Du diese Zeilen löscht, sollte es zu Deinem ersten Versuch keinen Unterschied mehr geben. Diese paar Zeilen sorgen dafür, dass das Script überhaupt startet. Löscht Du diese Zeilen, sollten alle JS-Funktionen nicht mehr gehen (auf der Hauptseite). Insofern muss es mit Deiner ersten Lösung, wo das Script irgendwann abbricht, (fast) gleich sein. Ist dies so?

Wenn ich besagten Abschnitt lösche, dauert es trotzdem lange.

Ich habe noch etwas rumgespielt. Wenn ich Zeile 471 (t.readyList[i].call( w, t );) deaktiviere, dann läuft es schnell! (der Parameter t.readyList.length ist 1, die Zeile wird also genau ein mal aufgerufen). Vielleicht hilft das weiter?

Wenn ich besagte Zeile deaktiviere, sieht das Edit-Fenster so aus:
[image]
(bitte anklicken für große Version)

Gruß,
Steffen

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Friday, October 15, 2010, 13:03 (4914 days ago) @ Steffen

Hi,

Ich habe noch etwas rumgespielt. Wenn ich Zeile 471 (t.readyList[i].call( w, t );) deaktiviere, dann läuft es schnell! (der Parameter t.readyList.length ist 1, die Zeile wird also genau ein mal aufgerufen). Vielleicht hilft das weiter?

Wenn Du das Script unverändert gelassen hast, wird genau an dieser Stelle die Funktion gestartet. Der Aufruf ewrfolgt, wenn alle wesentlichen Teile des Dokuments geladen sind. Wenn Du diesen auskommentierst, wird also das JS nicht gestartet. Diese Funktion wird darüberhinaus auch nicht ausgeführt, wenn Du die modifizierte Variante nutzt mit:

 
var mlf = null;
 mlf = new MyLittleJavaScript();
 var ajaxPreviewStructure = typeof settings != "undefined" && typeof settings["ajaxPreviewStructure"] == "string"?settings["ajaxPreviewStructure"]:false;
 if (mlf && typeof lang == "object") 
  mlf.init(ajaxPreviewStructure);

Löscht Du den o.g. Code oder das Original, hat dies den selben Effekt, wie das Auskommentieren dieser Zeile. Es kann also in beiden Fällen keinen Unterschied geben, was die Ladezeiten betrifft. Sollte es dennoch einen Unterschied geben, so kann dieser nicht am JS liegen.

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Friday, October 15, 2010, 13:13 (4914 days ago) @ Steffen

Hi,

ich habe bei mir mal eine Zeitmessung eingebaut:

var startDate = new Date();
 var mlf = null;
 window.ready.push(function() {
  mlf = new MyLittleJavaScript();
  var ajaxPreviewStructure = typeof settings != "undefined" && typeof settings["ajaxPreviewStructure"] == "string"?settings["ajaxPreviewStructure"]:false;
  if (mlf && typeof lang == "object") 
   mlf.init(ajaxPreviewStructure);
  var endDate = new Date() 
  var diff = endDate.getTime() - startDate.getTime()
  window.alert("Es hat " + diff/1000.0 + " Sekunden gedauert, diese Seite zu laden !")
 });

Während Opera verdammt fix ist, braucht der IE ca. 1sec. Ich vermute mal, bei Dir ist es ähnlich?

Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Mit Internet-Explorer sehr langsam!

by Steffen @, Friday, October 15, 2010, 20:30 (4913 days ago) @ Micha

Ich habe die Zeitmessung mal ans Ende von main.js gehangen (das war doch richtig?). Ergebnis:

FF ==> 1,5 Sekunden
IE ==> 29 Sekunden

Dürfte 3 mal so langsam gedauert haben wie sonst, ich probiere es später nochmal. Aber der Unterschied ist deutlich!

Mit Internet-Explorer sehr langsam!

by Steffen @, Friday, October 15, 2010, 22:02 (4913 days ago) @ Micha

Ich habe das Zeitmessscript jetzt mal dauerhaft eingebaut. Das Ergebnis wird ganz unten auf der Seite angezeigt:
http://www.ice-treff.de

Avatar

Tests

by Alfie ⌂, Vienna, Austria, Sunday, October 17, 2010, 01:31 (4912 days ago) @ Steffen

Ich mag mich nicht bei dir registrieren, daher hier (SeaMonkey 2.0.8 und IE 8.0.6001.18702IC unter XP Pro SP3 32bit, aktuelle Patches):

  • SM + JavaScript: 2.264"
  • SM + JavaScript: 2.252 (reload, aktiver Cache)
  • SM - JavaScript: <1" (geschätzt, leerer Cache)
  • IE + JavaScript: 15.625"
  • IE + JavaScript: 14.125" (reload, aktiver Cache)
  • IE - JavaScript: <2" (geschätzt, leerer Cache)

--
Cheers,
Alfie (Helmut Schütz)
BEBA-Forum (v1.8β)

Avatar

Mit Internet-Explorer sehr langsam!

by Micha ⌂, Sunday, October 17, 2010, 19:21 (4911 days ago) @ Steffen

Hi,

okay, das ist die Laufzeit des gesamten Script. Nun stellt sich die Frage, wo die meiste Zeit verloren geht. In der aufgerufenen init-Funktionen werden sukzessiv verschiedene setXYZ-Funktionen aufgerufen. Hier müsste man also nach und nach mal testen, wo der Zeitfresser ist.

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

getElementsByClassName

by Steffen @, Sunday, October 17, 2010, 20:01 (4911 days ago) @ Micha

Getestet habe ich bis gerade eben, jetzt habe ich keine Lust mehr :(

Aber ich habe den dringenden Verdacht, dass die Funktion getElementsByClassName Schuld ist!

Begründung:

  • FireFox kennt sie (da wird dann die interne, schnelle Funktion ausgeführt), InternetExplorer nicht (der bekommt dann JavaScript vorgesetzt). Andere Browser konnte ich nicht testen.
  • Jedes mal, wenn ich eine Zeile deaktiviert habe, in der getElementsByClassName vorkommt, wurde es ungefähr 10 Sekunden schneller (bei 40 Sekunden Gesamtladezeit).

Da ist die Frage: Kann man die in mlf implementierte Funktion irgendwie beschleunigen?

Anderer Lösungsansatz: Man schreibt eine Funktion, die alle Elemente nach ihrem Classname sortiert als Array zurückgibt, also z.B.:

Elemente['Klasse1']=Array(Elemente ...)
Elemente['Klasse2']=Array(Elemente ...)

Dann müsste man anstatt e=getElementsByClassName('Klasse1') folgendes aufrufen:

Elemente=NeueFunktion();
e=Elemente['Klasse1'];

Avatar

getElementsByClassName

by Micha ⌂, Monday, October 18, 2010, 04:32 (4911 days ago) @ Steffen

Hallo,

es muss sicher sein, dass es diese Funktion ist. Es nutzt aber nichts, wenn Du den Aufruf verhinderst, da mögliche Folgeoperationen dann auch nicht mehr statt finden. Um zu prüfen, ob es wirklich an dieser Funktion liegt, muss eine Zeitmessung vor und eine direkt hinter dem Funktionsaufruf stattfinden. Wenn sichergestellt ist, dass es diese Funktion ist, kann man über Änderungen nachdenken.

Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

getElementsByClassName

by Steffen @, Monday, October 18, 2010, 06:28 (4911 days ago) @ Micha

Hallo Micha,

schon klar, die Fakten (=Zeitmessung) fehlen. Ich hatte gestern nach all der probiererei ehrlich gesagt keinen Kopf mehr dafür.

Heute komme ich nicht dazu, aber Morgen beschäftige ich mich noch mal damit, mache Zeitmessungen und gehe noch der These nach, dass der IE bei Textoperationen extrem langsam sei.

Ich poste das Ergebnis dann hier.

Viele Grüße
Steffen

Avatar

getElementsByClassName

by Micha ⌂, Monday, October 18, 2010, 15:42 (4911 days ago) @ Steffen

Hi,

das ist kein Problem. ;-) Sollte es wirklich an dieser Funktion liegen, können wir Dein Konzept immernoch umsetzen - nur umsonst machen möchte ich es halt nicht ;-)

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

getElementsByClassName

by Steffen @, Tuesday, October 19, 2010, 11:03 (4910 days ago) @ Micha

Salut :cool:

Sollte es wirklich an dieser Funktion liegen, können wir Dein Konzept immernoch umsetzen - nur umsonst machen möchte ich es halt nicht ;-)

Narütlich nicht! ;) ;)

Ich habe jetzt einen Zeitmesser eingebaut:

getElementsByClassName (tail): 7.516 Sekunden
getElementsByClassName (options): 12.657 Sekunden
getElementsByClassName (posting): 11.968 Sekunden
getElementsByClassName (thread-posting): 11.875 Sekunden
getElementsByClassName (thread-posting): 11.859 Sekunden

Gesamtladezeit: 58.125 Sekunden

Nachher teste ich noch verschiedene Möglichkeiten, wie man die Funktion beschleunigen kann.

Avatar

getElementsByClassName

by Micha ⌂, Tuesday, October 19, 2010, 13:09 (4910 days ago) @ Steffen
edited by Micha, Tuesday, October 19, 2010, 13:29

Hi,

Ich habe jetzt einen Zeitmesser eingebaut:

getElementsByClassName (tail): 7.516 Sekunden
getElementsByClassName (options): 12.657 Sekunden
getElementsByClassName (posting): 11.968 Sekunden
getElementsByClassName (thread-posting): 11.875 Sekunden
getElementsByClassName (thread-posting): 11.859 Sekunden

Gesamtladezeit: 58.125 Sekunden

Ich denke, wir haben hier 2 Möglichkeiten. Einmal Dein Vorschlag mit dem Array. Also alle Klassen in einem Objekt speichern und beim Erneuten Aufruf der Funktion auf dieses Objekt zurückgreifen oder wir übergeben neben der Klasse noch einen HTML-Tag und grenzen so den Suchbereich ein. Wenn also bspw. tail nur in LI vorkommt, dann reicht es ja, wenn er nur in den LIs sucht. (zB. wie hier beschrieben, wo sogar das Elternelement noch vorgegeben werden kann)

Letzteres könnte natürlich zu Problemen führen, wenn Klassen auf verschiedene Elemente angewendet werden aber bei der Suche berücksichtigt werden sollen bzw. müssen.

Ich werde heute Abend mal ein wenig Spielen; ggf. hast Du dann ja auch schon eine Lösung.

Gruß Micha


NACHTRAG: Habe erst jetzt Deine Lösung gesehen.

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Die Lösung !!!

by Steffen @, Tuesday, October 19, 2010, 11:46 (4910 days ago) @ Steffen

Ich habe das Problem gefunden! Die Objekteigenschaft "length" scheint eine lahme Krücke zu sein. Und da sie in einer for-Schleife jedes mal aufgerufen wird, sind die 5 * >4.000 = >20.000 Aufrufen in der Funktion getElementsByClassName die Bremse.

Lösung:

Einfach nur die Zeile

 
for(var i=0;i<all_obj.length;i++) {
 

tauschen mit

 
var length = all_obj.length;
for(var i=0;i<length;i++) {
 

Das reduziert die Aufrufzeit von 55 Sekunden auf 2 Sekunden :ok:

Testweise habe ich alle "length" in Schleifen auf diese Weise getauscht, das bringt aber keine spürbare Beschleunigung.

Avatar

Die Lösung !!!

by Micha ⌂, Tuesday, October 19, 2010, 16:19 (4909 days ago) @ Steffen

Hi,

wie ich in Deinem Forum gesehen habe, ist der Erfolg auch durch andere User bestätigt worden. Gut zu wissen! Ich habe mal händisch auch die main.min.js angepasst.

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

Die Lösung !!!

by Alex ⌂, Tuesday, October 19, 2010, 17:55 (4909 days ago) @ Micha

Hallo,

bin auch noch da, habe nur im Moment kaum Zeit, hier etwas zu machen. Habe auch nicht alles nachvollzogen, aber wenn Ihr eine verbesserte Version des JavaScriptes habt, würde ich das gerne einbauen und "frei lassen".

Grüße
Alex

Avatar

Modifizierung von getElementsByClassName

by Micha ⌂, Tuesday, October 19, 2010, 18:08 (4909 days ago) @ Alex

Guten Abend Alex,

ich habe mir IE9 installiert hier zu hause. Drum kann ich den finalen Test erst morgen bei mir auf Arbeit machen in der Mittagspause. Die Änderung des Scripts ist recht simple. Die nachgebaute Funktion getElementsByClassName muss ein wenig geändert werden. Hier die von Steffen gefundene Lösung, wo lediglich die Bedingung der FOR-Schleife geändert wird:

/**
 * Liefert eine Liste mit Elementen, die die
 * selbe CSS-Klasse haben
 *
 * @param class_name
 * @return node_list
 */
if(typeof document.getElementsByClassName != 'function') {  
 document.getElementsByClassName = function (class_name) {
  var all_obj,ret_obj=new Array(),j=0,teststr;
  if(this.all)
   all_obj=this.all;
  else if(this.getElementsByTagName && !this.all)
   all_obj=this.getElementsByTagName("*");
  var len=all_obj.length;
  for(var i=0;i<len;i++) {
   if(all_obj[i].className.indexOf(class_name)!=-1) {
    teststr=","+all_obj[i].className.split(" ").join(",")+",";
    if(teststr.indexOf(","+class_name+",")!=-1) {
     ret_obj[j]=all_obj[i];
     j++;
    }
   } 
  }
  return ret_obj;
 };
}

Im IE9 ist mir aufgefallen, dass ich vertikale Scrollbalken auf der Seite habe. Ich kann also das gesamte Forum fast vollständig nach links ins "nichts" schieben. Hier müsste mal einer mit Ahnung an der CSS etwas frisieren. Da der 9er ja bessert[tm] sein soll, habe ich mal im Template bei mir <!--[if lt IE 9]> eingefügt bei dem IE-DIV. Das allein verursacht/verhindert jedoch nicht diese Scrollbalken.

Gruß Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Avatar

Modifizierung von getElementsByClassName

by Alex ⌂, Tuesday, October 19, 2010, 20:54 (4909 days ago) @ Micha

Hallo Micha,

Die nachgebaute Funktion getElementsByClassName muss ein wenig geändert werden. Hier die von Steffen gefundene Lösung, wo lediglich die Bedingung der FOR-Schleife geändert wird: [...]

Sehr gut, werde ich so bald wie möglich testen und einbauen!

Im IE9 ist mir aufgefallen, [...]

Tja, ein neuer IE = ein neues Problem. Und die alten IEs bleiben weiterhin im Umlauf... :crying: Muss mal sehen, ob ich den zum Testen irgendwie installiert bekomme. Habe hier nur ein (virtuelles) XP, das reicht scheinbar nicht...

Grüße
Alex

Avatar

Modifizierung von getElementsByClassName

by Micha ⌂, Thursday, October 21, 2010, 06:09 (4908 days ago) @ Alex

Hi Alex,

ich konnte nun auch mit dem IE8 bei mir keine Probleme feststellen.

Tja, ein neuer IE = ein neues Problem. Und die alten IEs bleiben weiterhin im Umlauf... :crying:

Ja, so scheint es. Aus diesem Grund dachte ich, dass die Einschränkung über die Version mittels Conditional Comments bereits ausreicht - wie leichtgläubig von mir. :no:

Habe hier nur ein (virtuelles) XP, das reicht scheinbar nicht...

Laut dieser Info läuft der neue nur auf Vista und Windows 7.

Gruß
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

aktualisieren

by Steffen @, Tuesday, October 19, 2010, 18:09 (4909 days ago) @ Alex

Hallo Alex,

ich habe in diesem Beitrag (im P.S.) noch einen eventuellen Fehler festgestellt (in meinen Augen ist es ein Fehler, bin mir aber nicht sicher, ob ich den Nutzen übersehen habe).

Die Lösung dessen habe ich in meinem Forum schon länger eingebaut. Sie funktioniert seither problemlos und lautet: In der Datei main.inc muss Zeile 260 entfernt werden:

//    $_SESSION[$settings['session_prefix'].'usersettings']['read'] = array();


Ich hätte dann noch andere Vorschläge fürs Forum, aber nichts, was man "mal eben" ändern könnte.

Viele Grüße
Steffen

Avatar

aktualisieren

by Alex ⌂, Tuesday, October 19, 2010, 21:04 (4909 days ago) @ Steffen

Hallo Steffen,

ich habe in diesem Beitrag (im P.S.) noch einen eventuellen Fehler festgestellt (in meinen Augen ist es ein Fehler, bin mir aber nicht sicher, ob ich den Nutzen übersehen habe).

Das ist schon so gewollt. Alle Markierungen sollen damit zurückgesetzt werden. Ob das Sinnvoll ist, darüber kann man sicher streiten. ;-)

Ich hätte dann noch andere Vorschläge fürs Forum, aber nichts, was man "mal eben" ändern könnte.

Nur her damit! Ob, wann und was von wem Umgesetzt wird, steht allerdings immer in den Sternen. ;-)

Grüße
Alex

aktualisieren

by Steffen @, Thursday, October 21, 2010, 20:55 (4907 days ago) @ Alex

Hi Alex,

Das ist schon so gewollt. Alle Markierungen sollen damit zurückgesetzt werden. Ob das Sinnvoll ist, darüber kann man sicher streiten. ;-)

Aha! Hmmm.....also bei uns sind sowohl wir Admins, als auch die User der Meinung, dass die Funkion nur dann sinnvoll ist, wenn die Links markiert, also lila bleiben. Daraufhin habe ich die entsprechende Zeile auskommentiert, und alle sind glücklich :)

Ich hätte dann noch andere Vorschläge fürs Forum, aber nichts, was man "mal eben" ändern könnte.


Nur her damit! Ob, wann und was von wem Umgesetzt wird, steht allerdings immer in den Sternen. ;-)

Ja, das ist klar ;)
Ich mache mal die Liste fertig, dann stelle ich sie hier ein.

RSS Feed of thread