我正在谷歌应用引擎上制作我的第一个应用。在我检查我的应用程序的正确结果之前。但后来我的应用程序开始响应很晚。然后我通过谷歌应用程序引擎文档,现在开始使用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毫秒。我的应用程序在演示文稿中调用的任何内容(模板扩展)的时间几乎是140000ms。我不明白那个模板扩展是什么以及为什么我的应用程序占用了大量的内容?我怎样才能减少它?可能是一个基本的问题,但我对此非常新,我搜索但找不到帮助的东西。提前谢谢。
答案 0 :(得分:1)
由于@allyourcode menitoend模板用于生成HTML。一些在Google应用引擎中构建的模板引擎是Django,jinja。
首先,我想让你知道存储密码inclear不是一个好主意。确保他们是哈希。如果你的网站商业化,它被黑客攻击oyur客户将会生气。考虑使用散列库。
其次要减少查询时间,请通过这个名为memcache的概念。这将大大缩短查询时间。
这是使用memcache的简单示例: - 来自google.appengine.ext import db 来自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
例如:从memcache读取: - arts = top_arts()
写入数据库时: -
#write your entry in database
<some database code>
#update memcache with this new entry
top_arts(update=True)