Avatar billede learner Praktikant
26. november 2006 - 21:02 Der er 4 kommentarer og
1 løsning

Cached sider ?

Hej, jeg har en masse sider som henter deres indhold i en fælles database. Systemet er begyndt at blive for langsomt fordi der efterhånden er så mange domæner med i systemet. Jeg har bearbejdet mine koder og raffineret en del. og så har jeg prøvet at tune databasen lidt med at lave indeks. Jeg overvejer om det evt kan være en løsning at generere cached udgaver af siderne. Jeg har tænkt på om det gør systemet hurtigere? er det en løsning der hjælper? eller skal jeg finde et bedre webhotel eller hvad?

jeg havde forestillet mig at:
htacces skal undersøge om der findes en fil med cached udgave af siden. hvis den findes, skal den vise den. Ellers skal den bruge php til at lave en cached udgave og vise den.
Avatar billede intenz Novice
26. november 2006 - 21:21 #1
Det vil gøre siden hurtigere, om den stadig vil være belastet afhænger også lidt af hvor belastet hele systemet er.
Men alt andet lige går der hurtigere at hente en html fil end en fil der skal parse php og hente data fra mysql hver gang.
Avatar billede coderdk Praktikant
26. november 2006 - 22:23 #2
Hvorfor ikke bare generere en cached udgave af filen hver gang du retter i indholdet?
Avatar billede learner Praktikant
26. november 2006 - 22:43 #3
coderdk: nemlig os noget lign det jeg tænkte
Avatar billede learner Praktikant
26. november 2006 - 22:44 #4
har fundet dette script men forstår ik det hele:


class CacheObj{
    function CacheObj(){
        global $DOCUMENT_ROOT;
       
        if ( substr( $DOCUMENT_ROOT, -1 ) != "/" ){
            $DOCUMENT_ROOT .= "/";
        }
       
        $this->CacheDir = $DOCUMENT_ROOT ."cache/";

        if ( !$this->FileName ){
            $filename = ereg_replace("/", "_" , getenv("SCRIPT_FILENAME") );
            $this->FileName = $filename;
        }
       
        if ( !$this->Periode ){
            $this->Periode = 3600;
        }
    }
   
    function Exists(){
        $opt = false;
        if( is_dir( $this->CacheDir() ) ){
            if ( !substr( $this->CacheDir() , -1 ) == "/" ){
                if( is_file( $this->CacheDir() . "/" . $this->FileName() ) ){
                    $opt = true;
                }
            } else {
                if( is_file( $this->CacheDir() . $this->FileName() ) ){
                    $opt = true;
                }
            }               
        }
        return $opt;
    }
   
    // default 1 hour ( 60 * 60 = 3600 )
    function setPeriode( $time = 3600 ){
        $this->Periode = $time;
    }
   
    function Periode(){
        return $this->Periode;
    }
   
    function CachedFileContent( $Content = 'none content' ){
        $ip = getenv("REMOTE_ADDR");
        $fp = fopen( $this->CacheDir() . $this->FileName(), "w" );
        fwrite($fp, "" . time() + $this->Periode . "\n<!-- \n\n\tThis file was created " . date("d/m-Y H:i:s") . " and having a valid periode in " . $this->Periode . "sec.\n\tThis cached file is create by $ip and brought to you by ZOLID.dk  \n\n-->\n" . $Content );
        fclose($fp);
    }
   
    function isValid(){
        $file = $this->getCachedFileContent();
        if ( $file != false ){
            $source = file( $this->CacheDir() . $this->FileName() );

            if ( trim ( $source[0] ) < time() ){
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }
   
    function getCachedFileContent( $echoString = false ){
        if ( $this->Exists() ){
            $source = file( $this->CacheDir() . $this->FileName() );
            unset($source[0]);
           
            if ( $echoString == true ){
                foreach($source AS $line){
                    echo $line. "\n";
                }
                return true;
            } else {
                $line = '';
                foreach($source AS $line){
                    $return_line .= $line. "\n";
                }
                return $return_line;
            }
        } else {
            return false;
        }   
    }
   
    function startCacheContentBlok( $name = '' ){
        ob_start(gz_handler);
    }
   
    function endCacheContentBlok( $name = '' ){
        $printOut = ob_get_contents();
        ob_end_flush();
        return $printOut;
    }
   
    function CacheDir(){
        if ( !substr( $this->CacheDir, -1 ) == "/" ){
            $this->CacheDir .= "/";
        }
        return $this->CacheDir;
    }
   
    function setCacheDir( $value ){
        return $this->CacheDir;
    }
   
    function FileName(){
        return $this->FileName;
    }
   
    function setFileName( $value ){
        $this->FileName = $value;
    }
}



// Rundt om din sql select kan du benytte følgen kode til at cache output til en fil.
include_once( "cacheobj.php" );
$cacheobj = new cacheObj();
$cacheobj->setFileName( 'index_link-list.php' );
$cacheobj->setPeriode( 7200 );
$content = $cacheobj->getCachedFileContent( false );

if ( (!$cacheobj->Exists()) || ($cacheobj->isValid() != true)/*  || ($_GET[""]) || ($_SESSION[""]) */ ){
    $cacheobj->startCacheContentBlok();

    // SQL SELECT OSV..

    $printOut = $cacheobj->endCacheContentBlok();
    $cacheobj->CachedFileContent( $printOut );
} else {
    echo $content;
}


Tror I ik det kan tilpasses?
Avatar billede learner Praktikant
24. december 2006 - 10:39 #5
lukker dette spm
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester