谷歌应用程序引擎代码优化

2024-06-17 11:15:43 发布

您现在位置:Python中文网/ 问答频道 /正文

googleappengine告诉我优化这个代码。有人知道我能做什么吗?在

def index(request):
    user = users.get_current_user()
    return base.views.render('XXX.html', 
                 dict(profiles=Profile.gql("").fetch(limit=100), user=user))

稍后在模板中我会:

^{pr2}$

其中使用的方法有:

def shortDisplay(self):
    return "%s/day; %s/week; %s days" % (self.maxPerDay, self.maxPerWeek, self.days)

def gravatarUrl(self):
    email = self.user.email().lower()
    default = "..."
    gravatar_url = "http://www.gravatar.com/avatar.php?"
    gravatar_url += urllib.urlencode({'gravatar_id':hashlib.md5(email).hexdigest(), 
        'default':default, 'size':"64"})
    return gravatar_url

Tags: 代码selfdefaulturlgetindexreturnemail
3条回答

CPU使用率高的原因是每个请求获取100个实体。这里有几个选项:

  • 使用配置文件.all().fetch(100)会更快,而且更容易阅读。在
  • 从概要文件模型中删除任何无关的属性。反序列化实体的每属性开销很大。在
  • 每页显示较少的用户。在
  • 将此页的输出存储在memcache中,并尽可能从memcache呈现。这样,您就不需要经常生成页面,所以高CPU也不重要。在

我想每次对每个项目执行md5散列是相当昂贵的。最好把gravatar邮件散列存储在某处。在

我遇到了一个问题,大量的CPU被用于看似微不足道的工作,结果却不是多次运行的查询。在我的Django模板中,我做到了post.comments.count然后循环通过发表评论. 这导致了两次执行——一次是计数,一次是实体。哎呀!在

我还想说,拿一份Guido的Appstats的副本。这对Python没有帮助,但是查看API调用所花费的时间(以及调用之间的时间——这通常会表明Python的速度较慢)是非常有用的。在

你可以在这里得到图书馆:https://sites.google.com/site/appengineappstats/

我在我的博客上写了一篇关于它的文章(附截图):http://blog.dantup.com/2010/01/profiling-google-app-engine-with-appstats

Appstats http://blog.dantup.com/pi/appstats_4_thumb.png

相关问题 更多 >