如何为LAMP Web应用程序优化此导出功能?

时间:2009-01-05 07:21:41

标签: optimization caching lamp

我有一个功能,允许用户创建项目并在此页面上查看它。 他们可以导入资源(pdf,img等)以及他们的项目。 所以现在我想创建一个功能,允许用户导出他们所有的东西和那些与他们在同一组中的人都整齐地用拉链文件中的漂亮丝带。

目前我正在使用Archive:Zip预先压缩文件,保留CRC32校验和并将其作为每日cronjob运行以减少用户等待时间。但是如果对任何文件有任何改变,我将不得不重新运行整个文件。

我的初步基准测试显示,103 MB的文件最多需要47秒才能运行。 该过程涉及生成将它们链接到XSL的XML,复制图像,用于iframe的html以及什么不是。

我正在考虑创建一个表或文本文件来保存临时存储区域中所有文件的CRC32校验和或上次修改日期,并在每次用户点击导出时与此列表进行比较,如果有的话新文件,我将从缓存的zip文件中删除相同的文件,并添加到新文件中。或者我将保留所有松散的文件并复制和替换较新的文件,然后在每次点击时进行存档。

我的问题是:

  1. 这被认为是过早或过早的 糟糕的优化技术?
  2. 我应该如何正确优化这个?
  3. 是否有一些书或资源 我可以学习这些 优化技术?

1 个答案:

答案 0 :(得分:1)

这个想法出了什么问题:

  • 只要用户文件发生更改(添加,删除或更改文件),就会设置某种标记。
  • 对文件已更改的每个用户运行每夜压缩,然后重置该标志。
  • 如果用户在设置标志时请求导出,则必须在导出完成之前再次执行压缩(没有办法解决)。

为了进一步加快用户体验,您还可以将导出请求与导出操作分离。例如,当用户(其标志已设置)请求导出时,通知他们将在压缩发生时完成,并设置不同的标志。然后修改上面的第二步,如果设置了第二个标志,也导出新创建的包。

这会立即向用户反馈某些事情会发生,但会将咕噜咕噜的工作推向未来。

或者,您不必将导出绑定到压缩。您可以每晚压缩,但根据需要在白天允许额外的压缩/出口工作。然而,将请求与事件分离仍然很好。

回答您的具体问题。

1 /我不认为这种过早或不好的优化。 “代码”在功能上是完整的,因为它可以满足您的所有需求,因此是优化的最佳时机。此外,您已经确定了瓶颈并正在优化正确的区域。

2 /见上文。您应该通过完成您所做的事情来优化它 - 找出瓶颈并集中精力改进。鉴于你不太可能获得更好的压缩性能,我建议的解耦“技巧”是一个很好的。就像进度条和闪屏一样,它通常更多地与用户感知的速度有关,而不是速度本身。

3 /书?不要打扰,网上有成千上万的资源。继续询问SO并打印出所有回复。最终你的大脑会像我的一样充满,每一段新代码都会让你暂时忘记你妻子的名字: - )。