如何让我的Google AppEngine应用程序的请求更好更快地执行(即减少加载时间和减少CPU使用率)?我特指的是应用程序服务器端部分的改进,而不是客户端部分。
答案 0 :(得分:3)
使用appengine Appstats查看您的应用程序实际使用更多cpu资源的位置。尝试找出原因,并寻找替代解决方案。 在python中你可以做很多优化。中号
利用memcache api制作 数据提取简单快捷。避免 不必要的fetch()和get()。
避免在执行大量RPC时 使用db.reference()属性。 Nick's blog就此解释了这一点。
appengine中的建模在性能方面很重要。确保为您的应用设计合适的型号。
除非您确实需要,否则请避免进行获取和获取。
答案 1 :(得分:1)
我建议您使用Appstats查看应用中的哪些地方存在瓶颈。
答案 2 :(得分:1)
我使用memcache显着提高了应用的效果。我希望它也可以用于你。当将memcache与HTTP头设置结合使用时,缓存控制我的响应时间得到了显着改善。
答案 3 :(得分:1)
这不是一个真正的优化,但框架的选择在这里非常重要。 Java和Python中的大多数遗留框架(Django,..)并不是为了快速启动而设计的,因为它在传统托管中并不重要。考虑使用像Tipfy,Kai,Webapp,...(Python)或slim3,...(Java)这样的App Engine特定框架。
理想情况下,您应该组织数据,以便每个用户请求只需要一次调用数据存储区,最好是db.get,因为查询速度要慢得多。为此,您通常需要对数据进行非规范化,并使用实体组和事务来保持不同的副本同步。
在进行多个urlfetch或API调用时,可以使用非阻塞(异步)语法并行调用来加快进程。尽可能缓存当然也非常重要。
如果您还没有,我建议您观看Google的IO会谈(2010年和2011年),特别是今年的Scaling App Engine Applications,它可以很好地描述服务器端的最佳做法。
答案 4 :(得分:0)
一个经常被忽视的方面是各种Appengine相关服务支持异步处理,例如数据存储:
https://cloud.google.com/appengine/docs/java/datastore/async
和网址抓取:
https://cloud.google.com/appengine/docs/python/urlfetch/asynchronousrequests
如果您有执行各种任务的请求,您可以看到它们是否可以并行化。