Этот блок кода:
foos = memcache.get("all-foos")
if foos is None:
foos = Foo.all()
size = foo.count()
else :
size = len(foo)
foosTab=[]
for i in range(size) :
foosTab.insert(i,foos[i])
memcache.set("all-foos", foosTab, 60)
Можно заменить на этот (гораздо более простой) код:
foos = memcache.get("all-foos")
if not foos:
foos = Foo.all.fetch(1000) # At most 1000 foos
memcache.set("all-foos", foos, 60)
В частности, он избегает ненужного вызова count()
(который выдает дорогостоящий RPC для чего-то, что вы все равно узнаете при получении результата), он выполняет один вызов выборки вместо перебора результатов и выборки в пакетами из 20, и он вызывает memcache set (один раз!), только если ему нужно было сначала получить список.