2012-02-07 15 views
5

Estoy haciendo mi primera aplicación en el motor de la aplicación de Google. Antes solo estaba verificando los resultados correctos para mi aplicación. Pero luego mi aplicación comenzó a responder muy tarde. Luego revisé los documentos del motor de la aplicación de Google y ahora comencé a usar los appstats. Soy realmente nuevo en eso. Vi un video sobre eso y obtuve algunas cosas, pero aun así estoy un poco confundido. A continuación se presenta la gráfica de solicitud de un inicio de sesión en mi aplicación:¿Qué es la expansión de la plantilla y cómo podemos reducirla si nuestra aplicación del motor de la aplicación google?

enter image description here

y aquí sigue es el código de mi 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(); 
     } 
    } 
} 

acuerdo con motor de aplicación de Google una consulta toma la mayor parte del tiempo y es alrededor de 50-100 ms. Pero en el gráfico, el tiempo total empleado es 15167 ms. Y el tiempo en el que mi aplicación no hace nada (expansión de plantilla) llamada por el chico en la presentación es de casi 140000ms. No entiendo qué es la expansión de esa plantilla y por qué mi aplicación está tomando una gran cantidad de eso. ¿Cómo puedo reducirlo? Puede ser una pregunta básica, pero soy muy nuevo en esto y busqué pero no pude encontrar algo que me ayudara. Gracias por adelantado.

+0

¿Es este el código real que está ejecutando, y el resultado es consistente? ¿Quizás tienes muchas propiedades definidas? Incluya las definiciones de sus modelos en la pregunta. –

+0

¿También tiene los mismos problemas de latencia para otros controladores o solo este? – proppy

+0

es para casi todos los controladores – Piscean

Respuesta

1

Como la plantilla menitoend de @allyourcode se utiliza para generar HTML. Algunos motores de plantillas que están integrados en el motor de la aplicación Google son Django, jinja.

En primer lugar, me gustaría hacerle saber el almacenamiento de contraseñas inclear no es una buena Idea. Asegúrese de que sean hash. Si su sitio web se vuelve comercial y es pirateado, sus clientes se van a enojar. Considere el uso de hash librerías .

En segundo lugar, para reducir el tiempo de consultas, pase por este concepto llamado memcache. Esto reducirá drásticamente el tiempo de consulta.

Aquí es un ejemplo sencillo de utilizar Memcache: - de google.appengine.ext db importación de google.appengine.api Memcache importación

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 

Puede utilizar la misma función para la lectura de Memcache y luego la escritura de datos en memcache

por ejemplo: para la lectura de memcache: - artes = top_arts()

al escribir en la base de datos: -

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