Thread Optimieren
(21 answers)
Opened by kabel at 2003-08-20 12:05
Hi Ihr,
mein Script ist saulangsam und ich hätte gerne mal ein paar Tipps zur Optimierung. Es sind zwei Scripts, die hintereinander aufgerufen werden und anscheinend Jahre brauchen. Code (perl): (dl
)
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 #!/usr/bin/perl #Einleitung use CGI; use CGI::Carp qw(fatalsToBrowser); $q = new CGI; require "hpm_einstellungen.cgi"; #Username ermitteln $username = $q->param("user"); if ($username eq "") { $url = $ENV{REQUEST_URI}; $username = (split /\//, $url)[-1]; } #Prüfen, ob User vorhanden ist oder User-ID ermitteln $anfrage = "SELECT userid, status FROM hpm_user WHERE username='$username';"; &datenbank; $ergebnisse = $sth->fetchall_arrayref( { userid => 1, status => 1 } ); foreach(@$ergebnisse) { $userid = $_->{userid}; $status = $_->{status}; } if ($userid eq "") { require "hpm_homepage_error404.cgi"; } #Prüfen, ob User gesperrt ist if ($status eq "4") { require "hpm_homepage_gesperrt.cgi"; } open(FILE, "$internmaindir/userdaten/$userid/daten/homepagedaten.dat"); flock FILE,1; @einstellungen = <FILE>; s/\n// foreach (@einstellungen); close(FILE); $titel = $einstellungen[0]; $beschreibung = $einstellungen[1]; $design = $einstellungen[3]; $autor = $einstellungen[4]; $herausgeber = $einstellungen[5]; $copyright = $einstellungen[6]; $keywords = $einstellungen[7]; #Prüfen, ob Design erlaubt ist if (!($design eq "own")) { open(FILE, "$internmaindir/userdaten/$userid/daten/payeddesigns.dat"); flock FILE,1; @designs = <FILE>; s/\n// foreach (@designs); close(FILE); foreach(@designs) { if ($_ eq $design) { $found = "ja"; } } if (!($found eq "ja")) { require "hpm_homepage_designnn.cgi"; } } #Art und Name des Designs ermitteln if ($design eq "own") { $name = "own"; } else { $anfrage = "SELECT name FROM hpm_designs WHERE designid='$design'"; &datenbank; $ergebnisse = $sth->fetchall_arrayref( { name => 1 } ); foreach(@$ergebnisse) { $name = $_->{name}; } } #Hintergrundmusik ermitteln open(FILE, "$internmaindir/userdaten/$userid/daten/musik.dat"); flock FILE,1; @einstellungen = <FILE>; s/\n// foreach (@einstellungen); close(FILE); $hintergrundmusik = $einstellungen[0]; #Prüfen, ob Werbung angezeigt werden muss open(FILE, "$internmaindir/userdaten/$userid/daten/funktionen.dat"); flock FILE,1; @einstellungen = <FILE>; s/\n// foreach (@einstellungen); close(FILE); $werbung = $einstellungen[6]; #Frameset ausgeben print "Content-type: text/html\n\n"; if ($werbung eq "1") { $anfrage = "SELECT value FROM hpm_sonstiges WHERE name='werbeart'"; &datenbank; $ergebnisse = $sth->fetchall_arrayref( { value => 1 } ); foreach(@$ergebnisse) { $werbeart = $_->{value}; } if ($werbeart eq "1") { require "hpm_homepage_frame.cgi"; } elsif ($werbeart eq "2") { require "hpm_homepage_popup.cgi"; } } else { require "hpm_homepage_werbefrei.cgi"; } exit(); Die hpm_homepage_frame, popup und werbefrei printen noch ein bisschen HTML-Code für ein Frameset und binden dann hpm_homepage.cgi so ein. Code (perl): (dl
)
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 #!/usr/bin/perl #Einleitung use CGI; use CGI::Carp qw(fatalsToBrowser); $q = new CGI; require "hpm_einstellungen.cgi"; #Infos einlesen $userid = $q->param("userid"); $name = $q->param("name"); $page = $q->param("page"); $typ = $q->param("typ"); $var = $q->param("var"); $id = $q->param("id"); if ($page eq "") { $page = "index"; } if ($name eq "") { open(FILE, "$internmaindir/userdaten/$userid/daten/homepagedaten.dat"); flock FILE,1; @einstellungen = <FILE>; s/\n// foreach (@einstellungen); close(FILE); $design = $einstellungen[3]; if ($design eq "own") { $name = "own"; } else { $anfrage = "SELECT name FROM hpm_designs WHERE designid='$design'"; &datenbank; $ergebnisse = $sth->fetchall_arrayref( { name => 1 } ); foreach(@$ergebnisse) { $name = $_->{name}; } } if ($name eq "") { $message = "Designfehler. Bitte wenden Sie sich an den Webmaster."; &error_end; } } #Besucher für User zählen open(FILE, "$internmaindir/userdaten/$userid/daten/counter.dat"); flock FILE,1; @einstellungen = <FILE>; s/\n// foreach (@einstellungen); close(FILE); $zahl = $einstellungen[0]; $ips = $einstellungen[1]; $userip = $ENV{'REMOTE_ADDR'}; ($datum, $uhrzeit) = split (/\|/, &DATUM_UHRZEIT); if (!((grep(/$userip/, split(",", $ips))) > 0)) { $newips = "$userip,$ips"; $newips = substr($newips, 0, 250); $zahl++; open(FILE, ">$internmaindir/userdaten/$userid/daten/counter.dat"); flock FILE,2; print FILE "$zahl\n"; print FILE "$newips\n"; close(FILE); open(FILE, "$internmaindir/userdaten/$userid/daten/counter_tage.dat"); flock FILE,1; @tage = <FILE>; s/\n// foreach (@tage); close(FILE); for(0..$#tage) { ($tagdatum, $tagzahl) = split(/\|\|\|/, $tage[$_]); if ($tagdatum eq $datum) { $status = "ja"; $zeile = $_; $zahl = $tagzahl; } } if ($status eq "ja") { $eintraege[$zeile] = "$datum|||$zahl"; open(FILE, ">$internmaindir/userdaten/$userid/daten/counter_tage.dat"); flock FILE,2; foreach(@tage) { print FILE $_ . "\n"; } close(FILE); } else { open(FILE, ">>$internmaindir/userdaten/$userid/daten/counter_tage.dat"); flock FILE,2; print FILE "$datum|||1\n"; close(FILE); } #Aufruf der Homepage für System zählen $anfrage = "SELECT value FROM hpm_sonstiges WHERE name='counter_homepages';"; &datenbank; $ergebnisse = $sth->fetchall_arrayref( { value => 1 } ); foreach(@$ergebnisse) { $inhalt = $_->{value}; } @content = split/OOO/, $inhalt; ($countdatum, $countzahl) = split(/\|\|\|/, $content[0]); $countzahl++; $content[0] = "$countdatum|||$countzahl"; $newinhalt = ""; foreach(@content) { $newinhalt .= $_ . "OOO"; } $anfrage = "UPDATE hpm_sonstiges SET value='$newinhalt' WHERE name='counter_homepages'"; &datenbank; } #Prüfen, ob Intro angezeigt werden soll oder nicht open(FILE, "$internmaindir/userdaten/$userid/daten/intro.dat"); flock FILE,1; @einstellungen = <FILE>; s/\n// foreach (@einstellungen); close(FILE); $showit = $einstellungen[0]; if (($showit eq "0") || ($showit eq "") || (!($id eq "")) || (!($page eq "index"))) { #Intro nicht anzeigen if ($name eq "own") { print "Location: designs/benutzer.cgi?page=$page&typ=$typ&id=$id&userid=$userid&var=$var\n\n"; } else { print "Location: designs/$name/index.cgi?page=$page&typ=$typ&id=$id&userid=$userid&var=$var\n\n"; } } elsif ($showit eq "1") { #Intro anzeigen #Richten Link für Weiterleitung generieren if ($name eq "own") { $weiterlink = "$homedir/designs/benutzer.cgi?page=$page&typ=$typ&id=$id&userid=$userid&var=$var"; } else { $weiterlink = "$homedir/designs/$name/index.cgi?page=$page&typ=$typ&id=$id&userid=$userid&var=$var"; } #Intro ausgeben $form = $einstellungen[1]; $grafik = $einstellungen[2]; $flash = $einstellungen[3]; $quali = $einstellungen[4]; $width = $einstellungen[5]; $height = $einstellungen[6]; $hintergrund_farbe = $einstellungen[7]; $hintergrund_bild = $einstellungen[8]; $button_text = $einstellungen[9]; $button_schriftgroesse = $einstellungen[10]; $button_schriftart = $einstellungen[11]; $button_schriftfarbe = $einstellungen[12]; print "Content-type: text/html\n\n"; print "<html>\n"; print "<head></head>\n"; print "<body text=\"$button_schriftfarbe\" bgcolor=\"$hintergrund_farbe\" background=\"$hintergrund_bild\" link=\"$button_schriftfarbe\" vlink=\"$button_schriftfarbe\" alink=\"$button_schriftfarbe\">\n"; print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" height=\"100%\">\n"; print " <tr>\n"; print " <td width=\"100%\" align=\"center\">\n"; if ($form eq "1") { #Grafik-Tag print " <p><img border=\"0\" src=\"$maindir/userdaten/$userid/bilder/$grafik\"></p>\n"; } elsif ($form eq "2") { #Flash-Tag print " <p>\n"; print " <object width=\"$width\" height=\"$height\">\n"; print " <param name=\"movie\" value=\"$maindir/userdaten/$userid/flash/$flash\">\n"; print " <param name=\"loop\" value=\"false\">\n"; print " <param name=\"quality\" value=\"$quali\">\n"; print " <param name=\"menu\" value=\"false\">\n"; print " <embed src=\"$maindir/userdaten/$userid/flash/$flash\" width=\"$width\" height=\"$height\" loop=\"false\" quality=\"$quali\" menu=\"false\" border=\"0\" type=\"application/x-shockwave-flash\" pluginspace=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\"></embed>\n"; print " </object>\n"; print " <p>\n"; } print " <p><font face=\"$button_schriftart\" size=\"$button_schriftgroesse\"><a target=\"_self\" href=\"$weiterlink\"><font>$button_text</font></a></font></p>\n"; print " </td>\n"; print " </tr>\n"; print "</table>\n"; print "</body>\n"; print "</html>\n"; } exit(); Hmm ich denke mal ich habe da ne Menge uneffektiv programmiert. Viele Grüße Steffen\n\n <!--EDIT|snadra|1061376157--> |