簡體   English   中英

Django:從一個模塊導入一個視圖比在views.py文件中包含它要慢嗎?

[英]Django: is importing a view from a module slower than including it in the main views.py file?

這可能更像是一個關於Python本身如何導入方法的問題,雖然我在表面層面上理解,但我並沒有真正深入理解。

一個極其簡化的例子可能會讓事情更加清晰。 在下面兩個例子中,執行速度會有明顯的差異嗎?

例1

# views.py

from app_name.models import *

def add_item(request, name, category):
    item = Item(name=name, category=category)
    item.save()
    return HttpResponseRedirect('/')

例2

# views.py

from app_name.models import *
from app_name.items import add_new_item

def add_item(request, name, category):
    item = add_new_item(request, name, category)
    return HttpResponseRedirect('/')

# items.py

def add_new_item(request, name, category):
    item = Item(name=name, category=category)
    item.save()
    return item

我應該再次補充說,這是一個極其簡化的例子,並不反映實際的現實世界決定。 我只是想了解Python的工作原理,以及示例2是否會明顯變慢,如果是這樣,在什么情況下。

謝謝。

你不會看到速度上的任何差異。 導入模塊后,它將保留在內存中,因此無需再次加載。 您可以檢查已加載的內容,如下所示:

import sys
print sys.modules
# {'cStringIO': <module 'cStringIO' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/cStringIO.so'>, 'copy_reg': <mo........

導入某些東西的行為會“降低”應用程序的速度。 但是,我們討論的是從文件系統讀取文件並將其編譯一次所需的時間 - 毫秒。 所以,是的,導入視圖與視圖只是存在較慢,但實際上,沒有區別。

正如其他人已經指出的那樣,你的例子不會有任何區別,因為導入只會發生一次 更重要的是,你應該確保不做例如。 函數內部的任何導入,如果它是可以避免的,因為每次執行函數時都會重做這些導入!

如果你想擁有清晰且可維護的代碼,那么處理你的導入結構就更為重要了,像from app_name.models import *這樣的通配符導入是非常邪惡的,你應該避免它! 另見例如。 這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM