django中views.py文件中的一个函数具有以下代码:
from lxml import etree
f = etree.parse("path/to/file/k2.xml")
for item in charList:
first += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='on']/text()")
second += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='off']/text()")
这会加载一个14mb的XML文件,扫描直到找到正确的项目,并使用XPath将两个值添加到两个变量中。
这真的很慢 - 5到6秒,这对于高流量站点来说是不可接受的。
Django告诉你没有为每个查询进行数据库调用,而是在settings.py文件中有一个永久连接 - 但如果你使用的是SQL,而不是XML。
是否有某种方法可以加快速度,也许总是将xml文件放在内存中?
答案 0 :(得分:1)
跨14MB XML文件执行XPath会很慢,特别是如果您使用//
作为查询的根目录。这将强制处理器找到每个节点并检查Xpath的有效性。
如果可以,请将文件分解为较小的文档 - 请记住XML是基于文档的格式,您的所有内容是否需要在一个文件中?
如果您必须使用这么大的文件,那么尝试获取最完整的XPath。如果您知道内容仅位于根ndoe的某个分支中,请指定该内容。即使是Xpath根部的微小变化也会对速度产生很大影响。