lazy import 和全局域/函数域的变量,实例定义。
说结论
lazy import : 在函数内(在使用时) 导入使用到的 package。
优点: 在 main 函数 import 其他文件时,不会在 import 处卡太久。
缺点: 对于批处理频繁调用的函数,它总是需要额外导入的时间。(这个有时候长达三四秒)
权衡点在于是否具有 GUI 界面,以及是否属于高频调用。
高频调用全局定义变量和导入。
低频次函数较好的习惯是在使用时导入和定义初始化
对于 GUI 界面(你不希望每次切换页面的时候响应长达三四秒),尽可能地优化交互体验为主。即使是高频次批处理,我们也应该优先考虑用户交互响应速度。(使用时导入)
即使会多写很多行代码,也依然应该考虑函数内定义。
因为性能就是一个积少成多的过程,原本 python 就不快,如果再不考虑性能,那只会让人难以忍受。
原因
Streamlit 的运行逻辑是通过频繁从头到尾地运行整个脚本。
而在顶部的 import ,我在一些 util 里面凑齐了四巨头(torch, numpy , pandas, funasr )。导致首次进入那个页面都会加载四五秒 =-= 。优化后几乎没有延迟,相当于把加载时间挪到了处理时间。但交互体验优先级应该最高。