Newsgroup: it.comp.www.php
Titolo: Qualche domandina sulle prestazioni

Ciao a tutti,
sto programmando un sito in php, e anche se devo dire sono riuscito a fare +
o - quello che volevo, ho notato che risulta abbastanza pesante sui dischi
del server.
Insomma, le pagine vengono generate spesso in meno di un decimo di secondo,
ma i dischi lavorano parecchio, come NON fanno con altri siti sullo stesso
webserver.
Mi veniva quindi qualche domanda:
- spesso mi trovo a fare delle query mysql "incrociate". Cioè, in una
tabella per esempio ho un articolo, che appartiene a una categoria di cui ho
memorizzato l'id. Dopo aver fatto la query per l'articolo, devo fare la
query alla tabella delle categorie per tirare fuori il nome e altre
informazioni.
Può essere questo a causare il superlavoro dei dischi? mi sembra strano,
perchè non vedo alternative....
- per dividere articoli lunghi in pagine, quando inserisco i dati inserisco
una stringa che indica l'interruzione di pagina. al momento di creare la
pagina web però l'unico modo che ho trovato per riconoscere la stringa e
interrompere la pagina è con lo strtok, che non credo sia molto leggero. C'è
alternativa?
Oltretutto, se l'articolo ha per es 4 pagine, quando genero la 4 pagina devo
comunque fare lo strtok di tutto l'articolo....
- quando ci sono molte news, divido per pagine con x news per pagina.
Quando però devo creare pagine che non siano la prima, faccio comunque x
fetch_array inutili. Non c'è modo di far partire la query direttamente da
una certa row?
Grazie a tutti e scusate la lunghezza :D
Se non avete capito che intendo, trovate lo scheletro qua
www.siamotroppoavanti.it
Già che ci siete se vi accorgete che manca qualche funzionalità ditemelo che
implemento :D

 una certa row?
Si, ed inoltre normalmente puoi usare LIMITS per limitare il range dei
risultati, come nel tuo caso (esempio vuoi solo i primi dieci risultati
secondo l'ordinamento scelto, oppure quelli dall'11esimo al 20esimo)...
Insomma, prova a guardare il manuale del DBMS che usi (MySQL?) e cerca JOIN
e LIMITS

 cerca JOIN e LIMITS
Ecco questa mi mancava. Non sapevo dei diversi parametri della LIMIT,
pensavo limitasse solo i risultati non sapevo gli si potesse dare anche un
offset
Bene altra cosa imparata :D
Che mi dici della strtok? alternative?

 inserisco una stringa che indica l'interruzione di pagina. 
Scusa, ma visto che li "spezzetti", non è il caso di inserirli come tali nel 
DB?
Ciao.
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.


La strok non è poi pesante, è una funzione il cui tempo di esecuzione è
funzione lineare delle dimensioni dell'input (e cmq di solito i colli di
bottiglia sono le query mal fatte). Comunque se vuoi una soluzione, ti
conviene spezzare la pagina quando inserisci le pagine nel db, ovvero crei
un'altra tabella nel db, chiamiamola "pagine", con i seguenti attributi:
- Chiave primaria della tabella articoli (sarà qualcosa tipo ID_articolo o
simile, immagino), e la imposti a chiave esterna, se usi un db diverso da
mysql
- Numero di pagina
- Contenuto della pagina
Chiave primaria di questa tabella "pagine": quella della tabella articoli +
numero di pagina
A questo punto non devi più usare lo strok al prezzo di una join sul db...
Io sinceramente preferirei la strok se il testo non ha dimensioni
enciclopediche

 dimensioni enciclopediche
Allora tengo la strtok perchè anche a me piace di + che faccia tutto il
motore php del sito :D
Già che ci sono approfitto della tua disponibilità per un'altra domanda:
quando inserisco del testo nel database, mi perdo tutte le informazione di
tabulazione tipo gli "invio".
E' normale?
Credo che non venga salvato nulla nel db perchè anche nel database non v'è
traccia di \n o chissà che.
Come si può fare?
Per ora sono costretto a inserire il testo come se fosse html quindi coi
<br> per gli invii...
Oltretutto l'invio in fase di inserimento non è considerato neanche come
spazio, quindi visto che la strtok cerca gli spazi se inserisco
testo
[finepagina]
testo
la strtok me lo vede come testo[finepagina]testo e non interrompe....
Idee? :D

 Idee? :D
Buh, così su due piedi non capisco come mai... dipende a come usi strok. Cmq
se hai bisogno di ricercare sottostringhe più "complesse" (non credo sia
questo il caso), prova a dare un'occhiata sul manuale alla sezione
espressioni regolari...
Spero di esserti stato d'aiuto
Ciao ciao

 Spero di esserti stato d'aiuto
Utilissimo!
E' raro trovare un ng disponibile come questo!
Mi sa che metterò le tende qui :D

 while($word=strtok($text, ' ')){
scusa ma perché non strok($text,'[') ?
Poi ovviamente devi fare qualche altro check, ma cmq risparmi tempo e
fatica.
Mica ti occorre trovare tutte le parole di cui è composto il testo, ti basta
cercare [finepagina]...

 ti basta cercare [finepagina]...
uhm
non ti seguo
se cercassi [ e avessi un testo bla bla bla bla [finepagina] bla bla bla lui
mi passerebbe solo "bla bla bla" no?
Piuttosto potrei cercare ] e poi controllare se la stringa trovata finisce
per [finepagina. Ma come si fa? :D
Ovviamente direttamente [finepagina] non lo posso cercare vero?

 ti basta cercare [finepagina]...
ORa sto facendo qualche esperimento con la "explode" dandogli come
separatore [finepagina] e come limite 2
Dovrebbe funzionare
Se riesco poi vi dico :D

 Se riesco poi vi dico :D
wow funziona!
e anche bene :D
Ho snellito di molto il codice :D