【问题标题】:Increase speed at which HTML table cells are created in Python提高在 Python 中创建 HTML 表格单元格的速度
【发布时间】:2014-10-19 16:07:59
【问题描述】:

我继承了一些 Python 代码,这些代码用于创建最多 19 列宽、5000 行的表格。最初,表格在屏幕上绘制需要 9 秒,但 I managed to reduce that 需要 6 秒

现在我想进一步优化它。不出所料,我已经看到瓶颈是创建单元格内容的部分。代码是:

sText += '<td align="middle">%s</td>' % sCellContents

其中sTextsCellContents 是字符串。 (格式化单元格内容的样式可能会有所不同。)

如果我删除了除 &lt;td&gt;&lt;/td&gt; 标记之外的所有内容,则速度保持不变,这意味着样式对性能没有影响。但是如果我删除这些标签(从而将内容放在表格之外),屏幕会在 三秒 后显示(当然,格式很糟糕)。

有什么方法可以在保留格式的同时优化该行吗?

我已经尝试过使用列表:

lText.append(sCellContents)

然后在最后加入:

sText = ''.join(lText)

但这并没有什么不同。

【问题讨论】:

  • 你试过像 Mako 或 Jinja2 这样的模板引擎吗?
  • @MFB - 不,部分原因是我不熟悉这些其他选项,部分原因是我不想对遗留代码进行剧烈 (?) 更改。
  • 还不错……但请花 2 分钟阅读本页的前几段:docs.makotemplates.org/en/latest/usage.html
  • " 表格在屏幕上绘制花了 9 秒" 出于好奇,您是如何确定瓶颈存在于“生成 HTML”而不是“浏览器端”?您的 HTML 的字节大小是多少?
  • @Wikis 你有profiled你的代码吗?

标签: python html performance list html-table


【解决方案1】:

您可以尝试Mako 模板,而无需对现有代码进行过多修改。

from mako.template import Template

t = Template('<td align="middle">${content}</td>')

for cell in sCellContents:
    t.render(content=cell)

如果有什么不同的话,看看会有什么不同会很有趣。

【讨论】:

  • 抱歉,我花了一些时间尝试设置它,但它并不像我希望的那样简单。
【解决方案2】:

你应该试试io.StringIO。相反,它是一个流,可能会提高性能。像这样使用它:

s_text_stream = io.StringIO()
s_text_stream.write('<td align="middle">%s</td>' % sCellContents)
s_text_stream.seek(0)
s_text = s_text_stream.read()

【讨论】:

  • 谢谢,我试过了,但没有得到任何输出,会继续尝试。
  • 对不起,我不得不放弃这个。添加s_text_stream.seek(0) s_text = s_text_stream.read() 使加载时间超过 20 秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2016-09-05
  • 2013-03-19
  • 2016-01-27
相关资源
最近更新 更多