将OBlog部署到服务器上后,发现存在严重的性能问题
查看log后发现,由于搜索部分用到了jieba分词,因此希望为了加速查询速度,在服务启动时生成jieba的字典
但这个优化反而成为了负优化
经过大量的搜索和询问,得知WSGI中,每一个访问请求,都会分配一个线程(或者排队等待前面的线程结束) ,并且每次访问都会从头跑一次flask
也即本身在本地测试工作正常的before_first_request
到了服务器上,每一次访问都会执行
这时,before_request
和before_first_request
实际上没有什么区别
为了解决这个问题,不让服务器因为生成字典炸下去,我选择了nginx+gunicorn
gunicorn也是一个WSGI中间件,但是它可以配置启动前要执行的命令,实现before_first_request
的功能
具体配置部分可以见https://github.com/OhYee/OBlog/blob/master/config.py