Ik heb op mijn site een auto completion script draaien, dit werkt perfect, maar is erg traag. De gegevens waarin wordt gezocht worden eerst d.m.v. PHP in een JavaScript variabele gezet, die variabele wordt vervolgens in een jQuery script geladen die voor het auto completen zorgt. Het probleem van de snelheid zit hem hier denk ik in de page generate time van het PHP script. Is er een manier van caching o.i.d. mogelijk (de user database verandert niet elke minuut)? Of weet iemand een snellere manier?
Hier staan wat gegevens en code:
Deze code wordt vervolgens in de pagina geladen d.m.v. deze code:
Het script voor het autocompleten is als volgt (hiervoor wordt de plugin jQuery autocomplete gebruikt):
En tot slot wordt de volgende HTML gebruikt om de auto completion box weer te geven:
Hier staan wat gegevens en code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| <? require_once "dbfunctions.php"; connect(); $query_leerlingen = dbquery("SELECT leerlingnummer, voornaam, tussenvoegsel, achternaam FROM leeromgeving_leerlinggegevens"); $query_personeel = dbquery("SELECT personeelslid, voornaam, tussenvoegsel, achternaam FROM leeromgeving_personeelsgegevens"); disconnect(); print "var gegevens = [ \n"; $i = 0; while (list($leerlingnummer, $voornaam, $tussenvoegsel, $achternaam) = mysql_fetch_row($query_leerlingen)) { if(!empty($tussenvoegsel)) { $naam = $voornaam . " " . $tussenvoegsel . " " . $achternaam; } else { $naam = $voornaam . " " . $achternaam; } $id = $leerlingnummer; if($i == 0) { echo "{ naam: \"$naam\", id: \"$id\" }"; } else { echo ", \n { naam: \"$naam\", id: \"$id\" }"; } $i++; } while (list($personeelslid, $voornaam, $tussenvoegsel, $achternaam) = mysql_fetch_row($query_personeel)) { if(!empty($tussenvoegsel)) { $naam = $voornaam . " " . $tussenvoegsel . " " . $achternaam; } else { $naam = $voornaam . " " . $achternaam; } $id = $personeelslid; if($i = 0) { echo "{ naam: \"$naam\", id: \"$id\" }"; } else { echo ", \n { naam: \"$naam\", id: \"$id\" }"; } $i++; } print "]; \n"; ?> |
Deze code wordt vervolgens in de pagina geladen d.m.v. deze code:
HTML:
1
| <script type='text/javascript' src='../includes/search.php'></script> |
Het script voor het autocompleten is als volgt (hiervoor wordt de plugin jQuery autocomplete gebruikt):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| $(function() { $('#delersbox').dialog({modal: true, bgiframe: true, closeOnEscape: true, buttons: {Annuleren: function() {$(this).dialog('close');}}}); $('#delersbox').dialog('close'); $('.sharelinks').click(function() { $('#shareform').append("<input type = 'hidden' name = 'file' value = '" + $(this).attr('id') + "'>"); $('#delersbox').dialog('open'); $("#autocomplete").autocomplete(gegevens, { width: 300, multiple: true, matchContains: true, formatItem: function(row, i, max) { return row.naam + " (" + row.id + ")"; }, formatMatch: function(row, i, max) { return row.id; }, formatResult: function(row) { return row.id; } }); }) }); |
En tot slot wordt de volgende HTML gebruikt om de auto completion box weer te geven:
HTML:
1
2
3
4
5
6
7
8
9
10
11
| <div id = 'delersbox' title = 'Delers toevoegen' style = 'display:none;'> <form action = '?pageindex=diskspace&action=sharesupdate' id = 'shareform' method = 'post'> <p> <textarea id = 'autocomplete' cols = '40' rows = '3' name = 'sharesfield'></textarea> <br> </p> <input type = 'submit' value = 'Voeg delers toe'> </form> <ol id="result"></ol> <br> </div> |