2010-02-22 56 views
0

我不知道會這樣作任何真正的高效化差(即計算時間,內存等)Django的效率問題

這是我的模型:

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

假設我有2種不同的方法,同時節省在視圖中的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() 

我知道這個問題可能有點傻,但長期投入,通過這些輸入對象使得代碼不可讀幾乎:)

+0

@Ludwik Trammer:聽起來像是一個答案。請將其發佈爲答案,以便我們可以正確地對其進行修改。 – 2010-02-22 14:53:47

+0

@ S.Lott:好的,我現在做了。我原本不是因爲它不回答原來的問題(效率),但如果你認爲我應該這樣做,那麼肯定,爲什麼不呢。你可以通過BTW評論評論。 – 2010-02-22 15:52:32

回答

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爲過早優化提醒。 – cethegeek 2010-02-22 20:35:28

0

根我認爲,第二種方法(直接傳遞的request.session元素)是更具有可讀性。查看代碼,我立即知道發生了什麼 - 它使用未經修改的原始會話數據創建對象。如果它只是一個變量,我不知道它來自哪裏,如果在此期間進行了修改等,我將不得不讀取更大部分的代碼。您可以將語句拆分爲多行。

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

到本地名稱綁定到一個值,如所需要的時間,例如,input_name = request.session['name'],相比執行.save()本身會花時間絕對是微不足道的 - 你永遠無法衡量它。所以,忘記如此小的效率,關注樣式,健壯性和可維護性(在這兩種情況下都很好) - 如果您需要調整應用程序的速度,請從開始分析