Sono uno studente di CS e per esercitare le mie capacità di codifica sto cercando di implementare un lettore di e-book e desidero qualche consiglio da parte di programmatori più esperti. Sto usando C ++ \ QML ma cercherò di mantenere il mio problema non specifico per qualsiasi tecnologia.
Prefazione piccola
Una volta aperto il libro, lo tengo in memoria. Genero anche una serie di pagine. Inizialmente tengo in memoria:
- la pagina corrente;
- 3 pagine a sinistra;
- 3 pagine a destra.
Le ultime due opzioni sono necessarie per consentire lo scorrimento veloce. Quando l'utente scorre indietro di una pagina \ inoltra il mio programma calcola alcune pagine aggiuntive in quella direzione.
Permetto anche all'utente di cambiare la dimensione della finestra che influisce sulle dimensioni della pagina. E qui ci sono problemi.
Il problema
Ogni volta che l'utente cambia la dimensione della finestra cambia la dimensione della pagina = > il programma deve ricalcolare lo stato della pagina attualmente visualizzata (la sua dimensione e il suo contenuto) e anche le pagine vicine. Ci vuole un po 'di tempo.
Quindi ogni volta che l'utente si diverte con la finestra dell'app, il mio programma ha dei tempi difficili nei calcoli. Quelle calibrazioni richiedono del tempo e rallentano l'intera app.
Cosa ho fatto per risolverlo
- Ho pensato di vietare all'utente di modificare manualmente le dimensioni della finestra (e dargli alcune dimensioni di pagina consentite), ma non sono sicuro di quanto sia facile da usare :) In questo caso, potrei calcolare pagine di dimensioni predefinite al iniziando così non rallenterà l'app tanto quanto ora.
- Pensavo che il multi-threading mi avrebbe salvato. Da vero principiante all'inizio ho fatto tutto in un thread. Finché la mia app ha iniziato a funzionare davvero (lentamente ovviamente, poiché la mia GUI si bloccava a volte a causa di calcoli), ho introdotto il multi-threading e ora la mia GUI e il thread di lavoro sono separati. È più veloce un po 'ora, ma a volte riesco a vedere quanto è lento, specialmente su un laptop piccolo, quando scorri le pagine più velocemente di una tartaruga.
Quindi, la mia domanda è: quanto è appropriato il mio approccio? È sano di mente e quali sono i modi per migliorare la perfomance?