Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    1,471

    ridurre numero di query tramite crontab

    vorrei ridurre il numero di query del mio sito per problemi di carico del server (problema comune x molti siti in hosting). Attualmente sono operative 7 query totali in una pagina dinamica.

    Esse sono riferite a menu di navigazione dinamici, categorie ecc. Per cui mi basterebbe un aggiornamento al giorno, dei relativi menu. Mentre durante l'arco della giornata svolgerebbero il lavoro come "menu statici". Vorrei arrivare ad un max di due tot. per pagina.

    1) Queste query potrebbero essere associate a dei crontab, cosi da aggiornarle sono una unica volta al giorno? la soluzione è fattibile?
    2) in questo caso i menu diventano "statici", per cui riducono il carico del server? e il nr. di query sopratutto?
    3) come faccio in pratica ad associare le query ai crontab?
    4) se avete altre soluzioni alternative, postate pure gentilmente.

    chiedo vs. parere, grazie
    Lilo

  2. #2
    Lilo, ti chiami come un bootloader...

    Comunque bando alle ciance: non è necessario usare crontab, puoi arrangiarti col PHP usando una directory di cache. Ti faccio un esempio stupido:

    Codice PHP:
    $file '/cache/prova.html';
    $mtime filemtime($file);

    // Controlla se è passato più di 1 giorno dall'ultima modifica
    if (time() - $mtime 60*60*24) {
        
    // Rigenera $file
        
    ...
    } else {
        
    // Output di $file senza rigenerazione (e quindi senza query)
        
    readfile($file);


  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    1,471
    nn si finisce mai di imparare, dalle nostre parti invece è una nomignolo in dialetto :-)

    in pratica, allora:

    /cache/prova.html';
    qua ci va il menu statico al 100% (senza query ecc.)

    // Rigenera $file
    ...
    cosa intendi? in pratica estratto la query in questione, e sovrascrivo il file prova.html?
    in questo caso, in ordine:
    1) estraggo la query, la inserisco nella var. $testo
    2) apro il file prova.html con "fopen"
    3) sovrascrivo il file con "fwrite"
    4) chiudo con "fclose"

    era questo il procedimento che intendevi?

  4. #4
    Solitamente un file PHP genera del codice HTML (qualche PHP che genera HTML devi averlo per forza, altrimenti non stiamo parlando di sito dinamico). Per esempio:

    Codice PHP:
    // Programma PHP principale
    ...
    // Qui viene eseguito un altro file php
    include 'intestazione.php'// o require 'intestazione.php'
    ... 
    e il file intestazione.php ti butterà fuori un pò di html (magari l'intestazione del sito... è un esempio). Nel file intestazione ci potranno essere query a MySQL, calcoli e quant'altro rallenta il tuo sito.

    Al posto di includere direttamente 'intestazione.php', puoi adattare l'esempio di cache che ti ho descritto:

    Codice PHP:
    $file '/cache/intestazione.html';
    $mtime filemtime($file);

    // Controlla se è passato più di 1 giorno dall'ultima modifica
    if (time() - $mtime 60*60*24) {
        
    // Rigenerazione dell'html
        
    ob_start();
        include 
    'intestazione.php';
        
    $html ob_get_flush();
        
    file_put_contents($html$file); // Funziona solo con PHP5
    } else {
        
    readfile($file);

    In questo modo, include 'intestazione.php' (col suo bagaglio di lentezza) verrà eseguito solo una volta al giorno: ob_start e ob_get_flush catturano l'output generato da 'intestazione.php' e file_put_contents() lo registra nel file 'cache/intestazione.html'.

    Tutte le altre volte, verrà direttamente buttato in output il file html catturato, con enormi benefici in termini di velocità. Ovviamente devi strutturare il tuo progetto in modo da spostare le operazioni più lente su file PHP catturabili.

    PS: il codice è da affinare (non ho controllato accessi contemporanei in scrittura), ma è comunque un buon inizio (usabile) da poter sviluppare.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    1,471

    includere home page?

    ti ringrazio tantissimo Nicola per la esaustiva risposta.
    Mi hai aperto diverse porte.

    In linea generale, penso quindi di poter includere, anche l'intera home page (index.php), in modo da farla aggiornare solo una volta sola la giornata, risparmiando cosi un sacco di lavoro al server stesso.

    in caso di 1000 utenti giornalieri ad es., invece di utilizzare 5-6000 query, ne utilizzi solo 5-6!!
    sai che risparmio!!! ci sarebbero qualche controindicazioni?

    Grazie ancora
    lilo

  6. #6

    Re: includere home page?

    Originariamente inviato da lilo
    in caso di 1000 utenti giornalieri ad es., invece di utilizzare 5-6000 query, ne utilizzi solo 5-6!!
    sai che risparmio!!! ci sarebbero qualche controindicazioni?
    Hai centrato esattamente il punto.

    L'unica controindicazione, molto spesso decisiva, è appunto che aggiorni il sito una volta al giorno. In moltissimi casi, dove la pagina si modifica quasi ad ogni accesso (gestione utenti con login/logout, blog, carrelli spesa, informazioni in tempo reale ecc...), l'overhead per la generazione del file di cache peggiora le prestazioni invece di migliorarle.

    Per esperienza però posso dirti che anche in questi casi esistono sempre dei pezzi dinamici cacheable, e a volte l'uso scrupoloso della cache può buttarti giù di 5/10 volte il tempo di generazione della pagina.

    Mica male...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.