Geheugenefficiënt programmeren

Het is belangrijk dat je geheugenefficiënt programmeert. Dat wil zeggen dat je op je geheugen en op de performance let en niet klakkeloos code gaat tikken zonder dat je bij geheugen en performance nadenkt. Een goed voorbeeld hiervan is het gebruik van variabelen. Vaak zie je mensen die onnodig variabelen aanmaken om een bepaalde handeling uit te voeren. In mijn voorbeeld gaan we een gebruiker invoegen met de volgende gegevens:

  • naam
  • adres
  • woonplaats
  • postcode
  • telnummer

Hiervoor gebruiken we het volgende stukje code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
43
44
45
<?php
// Kijken of er gepost is
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    $sNaam = $_POST['naam'];
    $sAdres = $_POST['adres'];
    $sWoonplaats = $_POST['woonplaats'];
    $sPostcode = $_POST['postcode'];
    $sTelnummer = $_POST['telnummer'];
        
    $sEscapeNaam = mysql_real_escape_string($sNaam);
    $sEscapeAdres = mysql_real_escape_string($sAdres);
    $sEscapeWoonplaats = mysql_real_escape_string($sWoonplaats);
    $sEscapePostcode = mysql_real_escape_string($sPostcode);
    $sEscapeTelnummer = mysql_real_escape_string($sTelnummer);        
        
    // Query aanmaken
    $sQuery = "
    INSERT INTO gebruikers
    (
        naam,
        adres,
        woonplaats,
        postcode,
        telnummer
    )
    VALUES
    (
        '"
. $sEscapeNaam . "',
        '"
. $sEscapeAdres . "',
        '"
. $sEscapeWoonplaats . "',
        '"
. $sEscapePostcode . "',
        '"
. $sEscapeTelnummer . "'
    )
    "
;
    // Verdere verwerking van het formulier en invoegen van het record
}
?>

<form method="post" action=""><p>
Naam: <input type="text" name="naam" /><br /><br />
Adres: <input type="text" name="adres" /><br /><br />
Woonplaats: <input type="text" name="woonplaats" /><br /><br />
Postcode: <input type="text" name="postcode" /><br /><br />
Telefoonnummer: <input type="text" name="telnummer" /><br /><br />
</p></form>


Je zult misschien lachen om dit extreme voorbeeld, maar dit wordt in de praktijk dus echt zo gedaan. Voor iedere aanpassing in een string, een nieuwe variabele. Dat is onnodig, onoverzichtelijk én het verspilt geheugen dat je niet voor niks hoeft te verspillen!

Hoe moet het dan wel?
In ons voorbeeld gebruiken we een post-waarde die we direct ophalen zonder er een variabele voor aan te maken. Die kunnen we gemakkelijk tijdens het invoegen van het record escapen, je hoeft dus geen extra variabelen aan te maken voor iedere stap die je zet in een variabele!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
// Kijken of er gepost is
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // Query aanmaken
    $sQuery = "
    INSERT INTO gebruikers
    (
        naam,
        adres,
        woonplaats,
        postcode,
        telnummer
    )
    VALUES
    (
        '"
. mysql_real_escape_string($_POST['naam']) . "',
        '"
. mysql_real_escape_string($_POST['adres']) . "',
        '"
. mysql_real_escape_string($_POST['woonplaats']) . "',
        '"
. mysql_real_escape_string($_POST['postcode']) . "',
        '"
. mysql_real_escape_string($_POST['telnummer']) . "'
    )
    "
;
    // Verdere verwerking van het formulier en invoegen van het record
}
?>

<form method="post" action=""><p>
Naam: <input type="text" name="naam" /><br /><br />
Adres: <input type="text" name="adres" /><br /><br />
Woonplaats: <input type="text" name="woonplaats" /><br /><br />
Postcode: <input type="text" name="postcode" /><br /><br />
Telefoonnummer: <input type="text" name="telnummer" /><br /><br />
</p></form>


Dit stukje code doet precies hetzelfde, alleen is het op een geheugenefficiëntere manier dan het stukje daarvoor gebouwd.

Ook is het in je SQL-statements belangrijk om geheugeneffieciënt te werk te gaan. Veel mensen selecteren bijvoorbeeld van een record alle data, terwijl er maar 10% van nodig is. Hier een voorbeeld, waar we gebruik maken van de tabel gebruikers met de volgende kolommen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
+------------+
| id         |
| naam       |
| adres      |
| woonplaats |
| email      |
| wachtwoord |
| status     |
+------------+

Wat doen mensen vaak als ze alleen de woonplaats willen hebben? Dan halen ze alle kolommen uit het record op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    *
FROM
    gebruikers

Je ziet dat er geselecteerd wordt met een asterisk (*). Dit wil zeggen:
Alle kolommen uit het record

Dit is onnodig, want zes van die kolommen gebruik je niet. Het is dus niet nodig om ze op te halen. Geef daarom bij je query op welke kolommen je wilt selecteren, zo worden je querys sneller en verspil je niet onnodig geheugen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    woonplaats
FROM
    gebruikers

Verder valt er over dit stuk niet veel te vertellen. Het is gewoon belangrijk dat je geen onnodige ruimte verspilt, dat is nergens voor nodig en het komt de snelheid (die merk je overigens vrijwel niet) niet ten goede.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Leesbaarheid
  2. SQL-injection
  3. XSS-injection
  4. Gebruik van backticks in MySQL
  5. Correcte foutenafhandeling
  6. Geheugenefficiënt programmeren
  7. Slot

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.