5

我正在谷歌应用引擎上制作我的第一个应用程序。在我只是检查我的应用程序的正确结果之前。但后来我的应用程序开始响应很晚。然后我浏览了谷歌应用引擎文档,现在开始使用 appstats。我对此真的很陌生。我看了一个关于它的视频并得到了一些东西,但我仍然有点困惑。以下是我的应用程序中一个登录请求的图表:

在此处输入图像描述

以下是我的 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();
         }
     }
 }

根据谷歌应用引擎,查询需要大部分时间,大约为 50-100 毫秒。但在图中,总时间为 15167 毫秒。我的应用程序什么都不做(模板扩展)的时间由演示中的人调用,几乎是 140000 毫秒。我不明白那个模板扩展是什么,为什么我的应用程序需要大量的扩展?我怎样才能减少它?可能是一个基本问题,但我对此很陌生,我搜索过但找不到有用的东西。提前致谢。

4

1 回答 1

1

@allyourcode menitoend 模板用于生成 HTML。谷歌应用引擎中内置的一些模板引擎是 Django 、 jinja。

首先,我想让您知道,不明确地存储密码不是一个好主意。确保它们被散列。如果您的网站商业化并且被黑客入侵,您的客户会很生气。考虑使用散列库。

其次,通过这个称为 memcache 的概念来减少查询时间。这将大大减少您的查询时间。

这是使用 memcache 的简单示例:- from google.appengine.ext import db from google.appengine.api import 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

您可以使用相同的函数从 memcache 中读取数据,然后将数据写入 memcache

例如:从内存缓存中读取:-arts = top_arts()

写入数据库时​​:-

#write your entry in database
<some database code>
#update memcache with this new entry
top_arts(update=True)
于 2012-07-26T15:50:03.773 回答