Django效率问题

时间:2010-02-22 13:54:25

标签: python django performance

我想知道这会产生任何真正的效率差异(即计算时间,内存等......)

这是我的模特:

class FooUser(models.Model):
    name = models.CharField(max_length=50)
    sirname = models.CharField(max_length=50)

假设我在视图中保存FooUser时有两种不同的方法: 首先,将检索到的值分配给变量,然后将其传递给对象。

#say I retrieve name and sirname from users cookie.(lets not care for the exceptions for now.
input_name =request.session['name']
input_sirname =request.session['sirname']

FooUser(name=input_name,sirname=input_sirname).save()

第二个,直接作为参数传递:

#say I retrieve name and sirname from users cookie.(lets not care for the exceptions for now.
FooUser(name=request.session['name'],sirname=request.session['sirname']).save()

我知道这个问题可能有点愚蠢但是对于长输入,将这些输入传递给对象会使代码几乎不可读:)

3 个答案:

答案 0 :(得分:4)

此:

 input_name =request.session['name']
 input_sirname =request.session['sirname']

不是将字符串复制到变量。它只是将字符串对象的指针分配给本地字典中的名称(input_name,input_sirname)。为了更好地解释,你可以抓住这个:http://effbot.org/zone/python-objects.htm

写这个,拥有那些中间字典条目(input_name,input_sirname)在99,999%的情况下具有如此低的开销,我敢打赌你应该关注你的程序中的其他一些瓶颈。

请记住:过早优化是万恶之源: - )

答案 1 :(得分:1)

将本地名称绑定到某个值所需的时间(例如input_name = request.session['name'])与执行.save()本身所需的时间相比绝对可以忽略不计 - 您永远无法做到测量它。因此,忘记这么小的效率并专注于样式,健壮性和可维护性(在您的示例中两者都很好) - 如果您需要调整应用程序的速度,请从分析开始

答案 2 :(得分:0)

我认为第二种方法(直接传递request.session元素)更具可读性。查看代码,我立即知道发生了什么 - 它使用未经修改的原始会话数据创建对象。如果它只是一个变量,我不知道它来自哪里,如果它在此期间被修改等等,我将不得不阅读更大部分的代码。您可以将语句拆分为多行。

FooUser(
    name=request.session['name'],
    sirname=request.session['sirname']
).save()