Geschwindigkeitsoptimierung bei DATENBANK-Connection

PHP - alles Rund um die Programmierung von PHP und MySQL

Ist die geniale Programmiersprache, da sowohl für Einsteiger geeignet wie auch für Profis.

Moderator: lauras

Beiträge bitte im neuen Forum

Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon drPHIP132 » Sonntag 11. Dezember 2011, 19:22

Kann man an der Geschwindigkeit irgendetwas optimieren?
Mein Script schaut ja nur, ob der gewünschte Eintrag vorhanden ist und wenn ja, dann "zieht" es den in meine Seite rein.
Ich habe gehört, dass das MEGA-CMS mit Template-Engine in Dustins Agentur in einer Sekunde alle schafft....da kann es doch nicht so bleiben, dass mein Miniscript auch eine Sekunde Laufzeit hat (Xampp).

Schaut euch bitte einfach mal den Code an und sagt mir bitte, wie man ihn schneller machen/optimieren könnte.

Code: Alles auswählen

<section>
                <?php
                        
//Datenbankszugriffsdaten auswählen
                        include( "include/xampp_www.php" );

                        $pageID = htmlentities( $_GET['pageID'] );
                        #bereinigen


                        //variablenzuweisung via MySQL
                        $mysql['error']      = false; # kein Fehler
                        $mysql['connection'] = mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASS );
                        $mysql['database']   = mysql_select_db( MYSQL_NAME );


                        if( !$mysql['connection'] OR !$mysql['database'] )
                        {
                            $mysql['error'] = true;
                            # MySQL Fehler

                            $mysql['error_mes'] = '<p><strong>'. mysql_errno() .': </strong>'. mysql_error() .'</p>';
                        }


                        if( !$mysql['error'] )
                        {
                            $mysql['query'] = "SELECT `ID` , `Inhalt` FROM `cms_daten` WHERE
                            `ID` = '"
. $pageID ."'
                            LIMIT 1;"
;

                            $mysql['return'] = mysql_query( $mysql['query'] );

                            $mysql['num_rows'] = mysql_num_rows( $mysql['return'] );
                            # mysql_num_rows zählt die anzahl
                            # der zurückgegebenen zeilen,
                            # da wir "LIMIT 1" angaben gilt:
                            # 1 = daten stimmen
                            # 0 = daten stimmen nicht

                                if( 1 == $mysql['num_rows'] )
                                #wenn 'datei' vorhanden ist
                                {
                                    $rückgabewert = mysql_fetch_assoc( $mysql['return'] );
                                    echo $rückgabewert['Inhalt'];
                                                      #betreffende spalte

                                    mysql_free_result( $mysql['return'] );
                                    #speicher wird freigegeben
                                }
                                else
                                
{
                                    //404 includen
                                    # 404 nicht in datenbank nehmen
                                    echo "Datei nicht vorhanden";
                                }
                        }
                        else
                        
{
                            print '<p>Leider gab es einen internen Fehler: '. $mysql['error_mes'] .'</p>';
                        }


                ?>
        </section>


MfG Phip S.
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon webmaster3000 » Sonntag 11. Dezember 2011, 19:40

Hallo!

Mir persönlich ist nichts aufgefallen, was man optimieren kann, ich aber auch kein Experte.
Dauert das Skript wirklich eine Sekunde? Vielleicht kommt es dir nur, Übertragung usw. mit eingerechnet, so vor.

Aber mir ist sonst noch was aufgefallen:
  • Dringendes Appell an die Sicherheit der Besucher deiner Seite (soweit vorhanden): Lass doch die Get-Variable auch mit mysql_real_escape() escapen
  • Das Ergebnis deiner Datenbankabfrage könntest du auch auf fehlschlag überprüfen lassen. Geeignet dazu wären Exceptions.

Gruß,
webmaster3000
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon Sören » Sonntag 11. Dezember 2011, 20:17

Wo führst du das Skript denn aus?
Die Geschwindigkeit hängt auch sehr stark vom Server ab, ich glaube kaum, dass Sarkkans Agentur Server hat, die völlig mit Benutzern zugemüllt sind und sich jedes bischen Systemleistung mit anderen teilen müssen, wohingegen Freehoste, wie z.B. bplaced, ziemlich lahm sind.

Du kannst die wirkliche Ausführzeit auch mit der Funktion microtime() ausrechnen.
Benutzeravatar
Sören
HTML-Acrobat
 
Beiträge: 851
Registriert: Samstag 5. Juni 2010, 16:00

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon drPHIP132 » Sonntag 11. Dezember 2011, 20:19

Derzeit nur im XAMPP
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon drPHIP132 » Sonntag 11. Dezember 2011, 20:56

durchschnittlich dauert es noch 0,450000 Millisekunden.
Der vollständigkeihalber kompletter code:

PS: Es kann doch net sein, dass es bei meinem pc mit 4(!) i7, (8GB) DDR3 - Ram und Windows 7 64-bit system sooo langsam läuft. .___.

Code: Alles auswählen

<?php

    
/*---------------------------CMS beginnt--------------------------*/
    session_start();


    if( $_SESSION['eingeloggt'] !== TRUE )
    {
        //nicht eingeloggt müssen die Seite verlassen
        header('Location: http://localhost/in_development/p-schuster.sarkkan.de/cms/login.php');
        //muss immer angepasst werden; entweder XAMPP oder WWW
        die();
    }
    elseif( $_GET['pageID'] == "" )
    {
        //eingeloggte dürfen auf seite bleiben
        header('Location:' . $_SERVER['PHP_SELF'] . '?pageID=1');
        die();
    }



?>
<!DOCTYPE html>
<html>

<head>
    <title>Administrationsbereich</title>

    <meta charset="UTF-8" />
    <link href="style.css" type="text/css" rel="stylesheet" />
    <link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />
</head>
<body>

        <nav>
        <a href="index.php?pageID=0">Dateien bearbeiten</a>
        <a href="index.php?pageID=1">Seite verwalten</a>
        <a href="index.php?pageID=2">Ausloggen</a>
        </nav>

        <section>
                <?php
                        $now 
= microtime();


                        //Datenbankszugriffsdaten auswählen
                        include( "include/xampp_www.php" );

                        $pageID = htmlentities( $_GET['pageID'] );
                        #bereinigen


                        //variablenzuweisung via MySQL
                        $mysql['error']      = false; # kein Fehler
                        $mysql['connection'] = mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASS );
                        $mysql['database']   = mysql_select_db( MYSQL_NAME );


                        if( !$mysql['connection'] OR !$mysql['database'] )
                        {
                            $mysql['error'] = true;
                            # MySQL Fehler

                            $mysql['error_mes'] = '<p><strong>'. mysql_errno() .': </strong>'. mysql_error() .'</p>';
                        }


                        if( !$mysql['error'] )
                        {
                            $mysql['query'] = "SELECT `ID` , `Inhalt` FROM `cms_daten` WHERE
                            `ID` = '"
. $pageID ."'
                            LIMIT 1;"
;

                            $mysql['return'] = mysql_query( $mysql['query'] );

                            $mysql['num_rows'] = mysql_num_rows( $mysql['return'] );
                            # mysql_num_rows zählt die anzahl
                            # der zurückgegebenen zeilen,
                            # da wir "LIMIT 1" angaben gilt:
                            # 1 = daten stimmen
                            # 0 = daten stimmen nicht

                                if( 1 == $mysql['num_rows'] )
                                #wenn 'datei' vorhanden ist
                                {
                                    $rückgabewert = mysql_fetch_assoc( $mysql['return'] );
                                    echo $rückgabewert['Inhalt'];
                                                      #betreffende spalte
                                }
                                else
                                
{
                                    //404 includen
                                    # 404 nicht in datenbank nehmen
                                    echo "Datei nicht vorhanden";
                                }
                        }
                        else
                        
{
                            print '<p>Leider gab es einen internen Fehler: '. $mysql['error_mes'] .'</p>';
                        }

                     echo (microtime() -$now )." Millisekunden Laufzeit";
                ?>
        </section>

</body>
</html>
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon drPHIP132 » Sonntag 11. Dezember 2011, 20:59

webmaster3000 hat geschrieben:
  • Das Ergebnis deiner Datenbankabfrage könntest du auch auf fehlschlag überprüfen lassen. Geeignet dazu wären Exceptions.



Macht es doch.??
Es includet dann die 404.php wenn eintrag vorhanden ist, oder gibt aus "interner fehler" bei datenbank-connection => fehlschlag.

oder was meinst du?
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon webmaster3000 » Montag 12. Dezember 2011, 08:05

Ich meinte nicht, dass du die Anzahl der Zeilen überprüfst, sondern das Ergebnis der Abfrage ($mysql['return']).
Das kann nämlich FALSE sein, z. B. wenn die abgefragte Tabelle nicht existiert oder Ein SQL-Syntaxfehler auftrat.

drPHIP132 hat geschrieben:PS: Es kann doch net sein, dass es bei meinem pc mit 4(!) i7, (8GB) DDR3 - Ram und Windows 7 64-bit system sooo langsam läuft. .___.

64 Bit sind hier eher schlecht, weil XAMPP und damit Apache, PHP und MySQL als 32-Bit-Prozess ausgeführt werden, was langsamer ist, oder gibt es XAMPP für Windows als 64-Bit-Version?

Gruß,
webmaster3000
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon Sarkkan » Montag 12. Dezember 2011, 08:21

webmaster3000 hat geschrieben:Ich meinte nicht, dass du die Anzahl der Zeilen überprüfst, sondern das Ergebnis der Abfrage ($mysql['return']).
Das kann nämlich FALSE sein, z. B. wenn die abgefragte Tabelle nicht existiert oder Ein SQL-Syntaxfehler auftrat.

Okey, aus der Sicht eines Anfängers der zum ersten mal von Exception hört.. Ich soll also irgendwie (bzw. wenn ich mir nur den Code deines Links angeschaut habe) mittels Exceptions also mit try versuchen herauszufinden, ob mein Ergebnis false ist.. :roll:
Ich finde Try&Catch ja nie wirklich schön, eine If-Anweisung reicht vollkommen aus, mal daovn abgesehen das in einem Fertigen Projekt eigentlich an dieser Stelle niemals wieder Fehler in dem Sinne eines "Catchable Errors" Auftretten würden.
Hier gibt es nur die Möglichkeit zwischen
-> Eingabe war gültig, Ergebnis ist Seite
-> Ungültige Eingabe, kein Ergebnis
An dem SQL-Code wird sich nie groß was ändern.
Benutzeravatar
Sarkkan
HTML-Acrobat
 
Beiträge: 1557
Registriert: Montag 5. April 2010, 01:46
Wohnort: Bei Köln

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon Basiii » Montag 12. Dezember 2011, 11:31

webmaster3000 hat geschrieben:64 Bit sind hier eher schlecht, weil XAMPP und damit Apache, PHP und MySQL als 32-Bit-Prozess ausgeführt werden, was langsamer ist, oder gibt es XAMPP für Windows als 64-Bit-Version?


Ich steig auch mal kurz in das OffTopic ein:

Ein 64 Bit System funktioniert genau wie ein 32 Bit System, alle 32 Bit Programme laufen genau so wie auf 32 Bit Systemen, einziger Unterschied ist das 64 Bit Programme unterstützt werden, zumindest sollte das so sein, klappen tut das meist auch nicht, also läuft XAMPP auf einem 32 Bit System genau so gut wie auf einem 64 Bit System.

Wenn man jetzt von einem super starken Prozessor ausgeht wird man bei Webanwendungen (!) wohl kaum einen Unterschied der einzelnen Leistungsklassen feststellen können, es geht hier immerhin von Datenmengen in maximal kiloBytes (wenn nicht macht euch mal Gedanken, das ganze muss blitzschnell zum Besucher übertragen werden :!: ) die selbst für uralte Prozessoren ein Witz an Rechenleistung sind.
Benutzeravatar
Basiii
HTML-Acrobat
 
Beiträge: 1139
Registriert: Dienstag 12. Januar 2010, 13:57

Re: Geschwindigkeitsoptimierung bei DATENBANK-Connection

Beitragvon drPHIP132 » Montag 12. Dezember 2011, 15:38

Back to Topic:

Sonst keine ideen für optimierung der geschwindikkeit? ;)
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge


Beiträge bitte im neuen Forum

Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron