Visualizzazione risultati 1 fino 8 di 8

Discussione: [DB TXT] Spezzettare i file velocizza il caricamento?

  1. #1
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito [DB TXT] Spezzettare i file velocizza il caricamento?

    Salve,

    siccome ho un sito che salva i propri dati (articoli soprattutto) in file di testo ed avendo riscontrato particolare lentezza nel caricamento di tutti gli articoli, mi chiedevo se sia possibile che già a 21 KB di file, il sito potesse essere così lento.

    Ho messo in dubbio anche il codice, non OO..

    Voi che ne pensate? Spezzettando il file da dove carico i dati, dovrebbe velocizzarsi il tutto? O devo rivedere il codice?

    Grazie, ciao!

  2. #2
    Guest

    Predefinito

    Secondo me deve essere il codice, perché aprire e leggere un file da 21Kb dovrebbe essere fatto in una frazione di un secondo.

    Comunque, se il file dovrebbe diventare molto più grande:
    Se ti servono solo alcuni pezzi del contenuto, allora spezzettare il file può velocizzare il caricamento, almeno se poi sai in quale file si trova ciò che ti serve.
    Se vuoi visualizzare comunque tutti i dati presenti nel file, allora non so se spezzettandolo guadagni qualcosa. Potrebbe anche essere che dovendo aprire più file, alla fine diventa più lento.
    In altre parole, non so se aprire e leggere un unico file di 1Mb sia più lento o più veloce che aprire 100 file da 10Kb ognuno. Mentre aprire e leggere un unico file di 1Mb dovrebbe essere più lento che aprire 1 unico file da 10Kb.

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    in generale, n operazioni su file sono più lente di una operazione su file, per file di dimensioni limitate. Ovvio che mettere tutto in un file non è una soluzione, visto che il metodo non scala nel tempo, con l'aumento degli articoli.

    Devi quindi fare i conti di quanto ti costa una richiesta per una pagina, e quanto il contenuto della stessa cambia, e se puoi raggruppare i dati che non cambiano in un unico file, in modo da poter caricare magari il 90% della pagina in un'unica operazione. In qualche modo, stiamo parlando di un sistema di cache dei dati ecco.

    Poi si, dipende anche dal codice e dai giri che fa per leggere i file ed elaborarli. Il fatto che non sia OO non influisce affatto*, il conto dipende solo da che operazioni compie.

    (* nel limitato caso - non tirate fuori discorsi estremi o valutazioni al limite )

  4. #4
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Allora penso che l'unica causa sia il mio *vecchio* codice che fa schifo.

    Uso un unico file per racchiudere alcuni elementi degli articoli, da questo file si ricava anche l'id, che sarebbe poi anche il nome dell'altro file di testo contenente il testo dell'articolo.

    Ho fatto un'altra prova, e in effetti quest'ultima mi ha provato quello che mi avete detto:

    Codice PHP:
    <?php
    $i
    = "";
    while(
    file_exists("dati/articoli/db".$i.".txt"))
    {
    $file = file("dati/articoli/db".$i.".txt");
    foreach(
    $file as $rigo)
    {
    echo
    $rigo."<br />";
    }
    $i++;
    }
    ?>
    Il file ci mette un nanosecondo ad essere eseguito '_'

    Devo purtoppo rivedere il codice...però non capisco...alla fine non differisce di molto da quello sopra!
    Intanto grazie :)

    Tornerò...

    EDIT:
    Wow, mi ci è voluto poco : vi illustro l'errore, miei cari due interessati!
    Ecco che cosa facevo e cosa non faccio più:
    Facevo
    Scorrevo tutto il file alla ricerca di una riga alla quale mancasse un valore ( ) e aggiungevo quell'articolo all'elenco degli "esclusi" (gli articoli senza un'area apposita). Togliendo questa azione, ora lo script è RAPIDISSIMO.
    Ora ci vorrà solo un pò più d'attenzione da parte dei miei fidi admin (oppure inserisco un controllo al momento dell'aggiunta di un articolo...si, molto più intelligente!)

    Faccio
    Ho tolto quel controllo.

    Grazie ancora :)
    Ultima modifica di Leo91 : 24-01-2008 alle ore 18.09.29

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    ottimiziamo anche questo
    file() controlla già automaticamente se il file esiste, e ritorna false se non lo trova, quindi possiamo sopprimere file_exists().
    Codice PHP:
    $i = 0; // inizializziamo a zero, per consistenza
    while ( $file = file("dati/articoli/db{$i}.txt") )
    {
    foreach(
    $file as $rigo)
    echo
    $rigo."<br />";
    $i++;
    }
    Poi stai cercando in un elenco di file, ma se ci sono dei buchi? perdi tempo a provarci, quindi possiamo prima prendere l'elenco dei file con glob(), e leggere solo quelli:
    Codice PHP:
    foreach ( glob("dati/articoli/db*.txt") as $file)
    foreach(
    $file as $riga)
    echo
    $rigo . "<br/>";
    so che era solo un codice di prova, ma spero di averti dato qualche spunto su come velocizzare. Php è stato creato con una enorme (davvero!) libreria di funzioni, e per limitare la quantità di "codice aggiunto", ovvero controlli strani, rigiri di variabili.

    Anche solo il fatto che tutte le funzioni ritornino false (od un suo equivalente, e.g. 0 oppure "") in modo da facilitare i controlli di errore (che sono già fatti dalla funzione stessa!) è una cosa che va sfruttata al massimo
    Ultima modifica di dreadnaut : 24-01-2008 alle ore 18.14.41

  6. #6
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Grazie del suggerimento .
    Comunque cercavo si un elenco di file, ma un elenco di file "dbn.txt", dove db0.txt è in realta db.txt

    Grazie anche di questa seconda funzione di file: non sapevo che restituisse false se non trovava il file!
    In più mi hai ricordato di come NON usare le graffe

    Grazie, grazie e ancora grazie

    Ciaooo!

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Citazione Originalmente inviato da Leo91 Visualizza messaggio
    Comunque cercavo si un elenco di file, ma un elenco di file "dbn.txt", dove db0.txt è in realta db.txt
    acc, allora il primo esempio era sbagliato, ma nel secondo db.txt rientra nel pattern db*.txt

    Altra cosina (che in realtà richiederebbe una paginata di testo) è che ti conviene pensare a quali vengono caricati con maggiore frequenza: e.g. se nella home page hai la lista dei titoli degli ultimi 10 articoli, e per caricarli ti tocca caricare 10 file, non è proprio un gran metodo. Perché non salvare i 10 titoli da qualche parte, ed aggiornare questo file solo una volta ogni <inserisci qui intervallo di tempo od evento>?

    Qualcosa mi dice che stasera devo trovare tempo per documentare cache.engine.php e metterlo online...

  8. #8
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    acc, allora il primo esempio era sbagliato, ma nel secondo db.txt rientra nel pattern db*.txt

    Altra cosina (che in realtà richiederebbe una paginata di testo) è che ti conviene pensare a quali vengono caricati con maggiore frequenza: e.g. se nella home page hai la lista dei titoli degli ultimi 10 articoli, e per caricarli ti tocca caricare 10 file, non è proprio un gran metodo. Perché non salvare i 10 titoli da qualche parte, ed aggiornare questo file solo una volta ogni <inserisci qui intervallo di tempo od evento>?

    Qualcosa mi dice che stasera devo trovare tempo per documentare cache.engine.php e metterlo online...


    Se continui, non mi fai andare a letto però!!!
    Una cosa simile la faccio per tenermi l'elenco degli ultimi 5 articoli...quanto mi sento stupido! Perchè non c'ho pensato?

    Già mi immagino la velocità di caricamento della home che va alle stelle (e l'ora tarda alla quale mi poserò sul letto '_' )

    Compongo... [grasie]

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •