当前位置:  开发笔记 > 编程语言 > 正文

从Django中的其他网站缓存数据

如何解决《从Django中的其他网站缓存数据》经验,为你挑选了1个好方法。

假设我有一个简单的视图,需要解析来自外部网站的数据.

现在它看起来像这样:

def index(request):
    source = urllib2.urlopen(EXTERNAL_WEBSITE_URL)
    bs = BeautifulSoup.BeautifulSoup(source.read())
    finalList = [] # do whatever with bs to populate the list
    return render_to_response('someTemplate.html', {'finalList': finalList})

首先,这是否可以接受?

显然,这在性能方面并不好.外部网站页面非常大,我只提取了一小部分内容.我想到了两个解决方案:

    以异步方式完成所有这些操作.加载页面的其余部分,一旦我得到它就填充数据.但我甚至不知道从哪里开始.我刚开始使用Django并且从未做过任何异步直到现在.

    我不在乎这个数据是否每2-3分钟更新一次,因此缓存也是一个很好的解决方案(也节省了额外的往返次数).我该如何缓存这些数据?

S.Lott.. 5

首先,不要过早优化.让它工作.

然后,添加足够的日志记录以查看性能问题(如果有)确实存在.

您可能会发现最终用户的PC是最慢的部分; 实际上,当您不在浏览器中获取.JS库和.CSS以及艺术品和渲染时,从其他站点获取数据可能会非常快.

一旦你完全确定获取远程内容确实是一个问题.真.然后你必须做以下事情.

    编写一个"crontab"脚本,不时地执行远程提取表单.

    设计一个缓存远程结果的地方.数据库或文件系统,选择一个.

    更新您的Django应用程序以从缓存(数据库或文件系统)而不是远程URL获取数据.

只有在您有绝对证据证明urllib2读取远程站点是瓶颈之后.



1> S.Lott..:

首先,不要过早优化.让它工作.

然后,添加足够的日志记录以查看性能问题(如果有)确实存在.

您可能会发现最终用户的PC是最慢的部分; 实际上,当您不在浏览器中获取.JS库和.CSS以及艺术品和渲染时,从其他站点获取数据可能会非常快.

一旦你完全确定获取远程内容确实是一个问题.真.然后你必须做以下事情.

    编写一个"crontab"脚本,不时地执行远程提取表单.

    设计一个缓存远程结果的地方.数据库或文件系统,选择一个.

    更新您的Django应用程序以从缓存(数据库或文件系统)而不是远程URL获取数据.

只有在您有绝对证据证明urllib2读取远程站点是瓶颈之后.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有