2012-02-07 8 views
5

Sto realizzando la mia prima app su Google App Engine. Prima stavo solo controllando i risultati corretti per la mia app. Ma poi la mia app ha iniziato a rispondere davvero tardi. Poi ho consultato i documenti del motore delle app di google e ora ho iniziato a utilizzare gli appstats. Sono davvero nuovo a questo. Ho visto un video su di esso e ho ottenuto alcune cose, ma sono ancora un po 'confuso. Di seguito è riportato il grafico per la richiesta di un accesso nella mia app:Qual è l'espansione del modello e come possiamo ridurla se la nostra applicazione del motore di app di google?

enter image description here

e seguendo qui è il codice per il mio LoginCheckServlet:

public class LoginCheckServlet extends HttpServlet { 
    @SuppressWarnings("unchecked") 
    public void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException { 
     resp.setContentType("text/html"); 
     PrintWriter out = resp.getWriter(); 
     HttpSession session = req.getSession(true); 
     PersistenceManager pm = PMF.get().getPersistenceManager(); 
     try 
     { 
      List<User> result = null; 
      Query query = pm.newQuery(User.class); 
      query.setFilter("email == emailParam"); 
      query.declareParameters("String emailParam"); 
      result = (List<User>) query.execute(req.getParameter("email")); 
      if(result.size() == 0){ 
       out.println(0); 
      }else{ 
       String pwd = req.getParameter("password"); 
       String userPwd = result.get(0).getPassword(); 
       if(pwd.equals(userPwd)){ 
        result.get(0).setActive(true); 
        session.setAttribute("email", result.get(0).getEmail()); 
        session.setAttribute("name", result.get(0).getName()); 
        out.println("1"); 
       }else{ 
        out.println("2"); 
       } 
      } 
     }catch(Exception ex) 
     { 
      out.println(ex); 
     } 
     finally 
     { 
      pm.close(); 
     } 
    } 
} 

secondo il motore di applicazione Google una query prende la maggior parte del tempo ed è di circa 50-100 ms. Ma nel grafico il tempo totale impiegato è 15167 ms. E il tempo in cui la mia app non sta facendo nulla (espansione del modello) chiamato dal ragazzo in presentazione è quasi 140000ms. Non capisco che cos'è l'espansione del modello e perché la mia app ne sta prendendo una grande quantità? Come posso ridurlo? Potrebbe essere una domanda di base, ma io sono molto nuovo a questo e ho cercato, ma non riuscivo a trovare qualcosa di aiuto. Grazie in anticipo.

+0

È questo il codice effettivo che stai utilizzando ed è coerente? Forse hai un sacco di proprietà definite? Includi le definizioni dei tuoi modelli nella domanda. –

+0

Hai anche gli stessi problemi di latenza per gli altri gestori o solo questo? – proppy

+0

relativo per quasi tutti i gestori – Piscean

risposta

1

Come modello di menOteend @allyourcode vengono utilizzati per generare HTML. Alcuni motori di template che sono costruiti nel motore di app di Google sono Django, jinja.

Prima di tutto vorrei farvi sapere memorizzare le password inclear non è una buona Idea.Make in modo che siano hashed.If il vostro sito va commerciale e ottiene hacked oyur clienti stanno andando essere incazzato off.Consider utilizzando le librerie di hashing .

In secondo luogo per ridurre il tempo delle interrogazioni passare attraverso questo concetto chiamato memcache. Questo ridurrà drasticamente il tempo di interrogazione.

Ecco semplice esempio per utilizzare memcache: - da google.appengine.ext import db da google.appengine.api importazione memcache

def top_arts(update = False): 
    key = 'top' 

    #Getting arts from memcache 
    arts = memcache.get(key) 

    #Check if key is defined in memcache 
    #or an update has been invoked 
    if update or not arts: 
    #Querying the Google Data store using GQL 
    arts = db.GqlQuery('SELECT * from Art ORDER BY created DESC LIMIT 10') 
    memcache.set(key, arts) 
    return arts 

È possibile utilizzare la stessa funzione per la lettura e poi memcache la scrittura dei dati in memcache

esempio: per la lettura da memcache: - arti = top_arts()

durante la scrittura nel database: -

#write your entry in database 
<some database code> 
#update memcache with this new entry 
top_arts(update=True) 
Problemi correlati