Einträge aus Listboxen (multiple) untereinander verschieben -» Performanceproble
Budch
- javascript
Hallo,
ich habe eine Script, dass Einträge aus Listboxen untereinander verschieben kann. Die Einträge kommen aus dem selben Pool. Wenn in der Zielbox schon Einträge vorhanden sind, sollen diese nicht mehr in der Ausgangsbox erscheinen. Ebenfalls sollen die Einträge beim Verschieben von der Ausgangs- in die Zielbox aus der Ausgangsbox entfernt werden. ES können mehrer Einträge verschoben werden.
Mir stellt sich nun ein Performanceproblem, da die Liste aus über 700 Einträgen besteht. Meine Frage ist nun, ob es prinzipiell möglich ist, ein solches Problem mit JavaScript unter dem gegebenen Performanceproblem zu lösen (Verschieben bei mehreren Einträgen dauert momentan teilweise > 30 sek.).
Wenn ja, ist mein Script wohl zu optimieren :)
Vielen Dnk für Hilfe!
Hallo,
Wenn ja, ist mein Script wohl zu optimieren :)
Vielen Dnk für Hilfe!
Hi,
Sorry, aber da ich dein Script nicht gesehen habe, und mir auch nicht testweise schnell mal eins schreiben werde, ist es wohl nicht zu beurteilen, ob das schneller funktionieren würde oder nicht...
wie werden die daten gespeichert?
verwendest du arrays um die daten darzustellen?
gruß,
Thomas J.
Sorry, aber da ich dein Script nicht gesehen habe, und mir auch nicht testweise schnell mal eins schreiben werde, ist es wohl nicht zu beurteilen, ob das schneller funktionieren würde oder nicht...
Das Script sieht wie folgt aus:
sortitems=1;
function move(fbox,tbox) {
for(var i=0; i<fbox.options.length; i++) {
if(fbox.options[i].selected && fbox.options[i].value != "") {
var no = new Option();
no.value = fbox.options[i].value;
no.text = fbox.options[i].text;
tbox.options[tbox.options.length] = no;
fbox.options[i].value = "";
fbox.options[i].text = "";
}
}
BumpUp(fbox);
if (sortitems) SortD(tbox);
}
function BumpUp(box) {
for(var i=0; i<box.options.length; i++) {
if(box.options[i].value == "") {
for(var j=i; j<box.options.length-1; j++) {
box.options[j].value = box.options[j+1].value;
box.options[j].text = box.options[j+1].text;
}
var ln = i;
break;
}
}
if(ln < box.options.length) {
box.options.length -= 1;
BumpUp(box);
}
}
function SortD(box) {
var temp_opts = new Array();
var temp = new Object();
for(var i=0; i<box.options.length; i++) {
temp_opts[i] = box.options[i];
}
for(var x=0; x<temp_opts.length-1; x++) {
for(var y=(x+1); y<temp_opts.length; y++) {
if(temp_opts[x].text > temp_opts[y].text) {
temp = temp_opts[x].text;
temp_opts[x].text = temp_opts[y].text;
temp_opts[y].text = temp;
}
}
}
for(var i=0; i<box.options.length; i++) {
box.options[i].value = temp_opts[i].value;
box.options[i].text = temp_opts[i].text;
}
}
wie werden die daten gespeichert?
Die Einträge kommen über ein SQL-Statement
Vielen Dank
Budch
hallo,
ich habe das script nicht genauer analysiert, aber vielleicht würde es helfen, die daten vorher in ein javascript-array zu speichern?
die arrays lassen sich wohl deutlich schneller sortieren...
ausserdem könntest du noch eine schnellere sortiermethode verwenden (zB Quicksort) was für größere datenmengen besser geeignet ist.
(habe den code nicht im kopf, aber es gibt bestimmt was im internet)
hoffe dir tips helfen dir etwas,
gruß,
Thomas J.
Hallo Thomas,
die arrays lassen sich wohl deutlich schneller sortieren...
Die einzelnen Optionseinträge sind fest mit dem Value (DB_id) verbunden. In einem Array werden ja dann meines Wissens aber nur die Einträge sortiert und dementsprechend später den falschen Values zugeordnet.
hoffe dir tips helfen dir etwas weiter
Trotzdem vielen Dank
Gruß
Budch