重复导入视图会影响 Django 应用程序的性能吗?

问题描述 投票:0回答:1

在这样的情况下:

# views.py
def myView(request):
    import something
    import other
    
    something.doStuff()
    other.doOtherStuff()
    return render(request, 'page.html', context)

def myOtherView(request):
    import something
    import other
    
    something.doThings()
    other.doOtherThings()
    return render(request, 'page2.html', context)

在视图级别导入内容是一种不好的做法吗?会影响性能吗?

# views.py
import something
import other

def myView(request):
    something.doStuff()
    other.doOtherStuff()
    return render(request, 'page.html', context)

def myOtherView(request):
    something.doThings()
    other.doOtherThings()
    return render(request, 'page2.html', context)

第二个版本更好/更快吗?

python django python-import
1个回答
0
投票

会影响性能吗?

不会有太大区别。

import
语句将查看是否已加载模块,并将模块添加到范围中。鉴于模块已经被加载(例如在启动时,或者当您触发加载模块的视图时),它只会使其慢几分之一毫秒,因为它只是意识到它已经加载了模块,然后将项目移至范围内。

有时甚至需要

本地导入,因为这会导致导入周期:其中一个模块A导入模块B,然后B触发导入A,而A仍在加载中过程。在这种情况下,我们可以通过仅在触发函数时触发加载模块B来打破循环,因此至少在加载B之前先完成加载模块A

但是本地导入还有另一个缺点:它更容易出现错误:如果您导入一个不存在的模块,或者稍后将该模块移动到其他地方,则导入语句的目标可能是加载一个模块(不再)存在,但很难找出导入中断的位置:它需要触发所有视图,而加载文件顶部的项目将主动加载模块,从而引发错误。这使得更容易发现错误。

© www.soinside.com 2019 - 2024. All rights reserved.