Optimization 如何为LAMP web应用优化此导出功能?

Optimization 如何为LAMP web应用优化此导出功能?,optimization,caching,lamp,Optimization,Caching,Lamp,我有一个功能,允许用户创建项目,并在此页面上查看它。 他们可以导入资源(pdf、img等)与项目一起保存。 所以现在我想创建一个功能,允许用户导出他们所有的东西,以及与他们属于同一组的人,并将漂亮的丝带整齐地绑在一个zip文件中 目前,我正在使用Archive:Zip预先压缩文件,保留其CRC32校验和,并将其作为日常cronjob运行,以减少用户等待时间。但是如果对任何文件有任何更改,我将不得不重新运行整个过程 我的初始基准测试表明,103MB的文件运行时间将达到47秒。 这个过程包括生成将它

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

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

我的初始基准测试表明,103MB的文件运行时间将达到47秒。 这个过程包括生成将它们链接到XSL的XML、复制图像、iFrame的html等等

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

我的问题是:

  • 这是否被认为是一种不成熟或不成熟的做法 糟糕的优化技术
  • 我应该如何适当地优化它
  • 是否有一些书或资源 我可以学习这些东西 优化技术

  • 有什么不对的想法:

    • 每当用户文件更改(添加、删除或更改文件)时,设置某种类型的标志
    • 在文件已更改的每个用户上运行夜间压缩,然后重置该标志
    • 如果用户在设置标志时请求导出,则必须在导出完成之前再次进行压缩(没有办法)
    为了进一步加快用户体验,还可以将导出请求与导出操作分离。例如,当用户(其标志已设置)请求导出时,通知他们将在压缩发生时进行导出,并设置不同的标志。然后修改上面的第二步,如果设置了第二个标志,也导出新创建的包

    这会给用户即时的反馈,即会发生一些事情,但会将繁重的工作转移到未来

    或者,您不必将导出绑定到压缩。您可以每晚压缩,但可以根据需要在白天进行额外的压缩/导出作业。不过,将请求与事件解耦仍然是一件好事

    回答你的具体问题

    <P>1/I不考虑这种过早或不好的优化。“代码”在功能上是完整的,因为它完成了您对它的所有要求,所以现在是优化的正确时机。此外,您已经确定了瓶颈并正在优化正确的区域

    2/见上文我的文字。你应该通过做你已经做过的事情来优化它——找出瓶颈并集中精力改进它。考虑到不太可能获得更好的压缩性能,我建议的解耦“技巧”是一个很好的方法。与进度条和闪屏一样,它通常更多地取决于用户对速度的感知,而不是速度本身


    3/书?不用麻烦了,网上有成千上万的资源。继续提问,然后打印出所有的回答。最终,你的大脑会像我一样充满活力,每一个新的代码片段都会让你暂时忘记你妻子的名字:-)。

    这样的想法有什么不对:

    • 每当用户文件更改(添加、删除或更改文件)时,设置某种类型的标志
    • 在文件已更改的每个用户上运行夜间压缩,然后重置该标志
    • 如果用户在设置标志时请求导出,则必须在导出完成之前再次进行压缩(没有办法)
    为了进一步加快用户体验,还可以将导出请求与导出操作分离。例如,当用户(其标志已设置)请求导出时,通知他们将在压缩发生时进行导出,并设置不同的标志。然后修改上面的第二步,如果设置了第二个标志,也导出新创建的包

    这会给用户即时的反馈,即会发生一些事情,但会将繁重的工作转移到未来

    或者,您不必将导出绑定到压缩。您可以每晚压缩,但可以根据需要在白天进行额外的压缩/导出作业。不过,将请求与事件解耦仍然是一件好事

    回答你的具体问题

    <P>1/I不考虑这种过早或不好的优化。“代码”在功能上是完整的,因为它完成了您对它的所有要求,所以现在是优化的正确时机。此外,您已经确定了瓶颈并正在优化正确的区域

    2/见上文我的文字。你应该通过做你已经做过的事情来优化它——找出瓶颈并集中精力改进它。考虑到不太可能获得更好的压缩性能,我建议的解耦“技巧”是一个很好的方法。与进度条和闪屏一样,它通常更多地取决于用户对速度的感知,而不是速度本身


    3/书?不用麻烦了,网上有成千上万的资源。继续提问,然后打印出所有的回答。最终,你的大脑会像我一样充满活力,每一个新的代码片段都会让你暂时忘记你妻子的名字:-)。

    呵呵,有趣又有用+1,好吧,我正在寻找更多的方法来解决这个问题。但是,能够在这样的问题上找到更多的“模式”将是一种有趣的学习经历。谢谢,有趣又有用+1,好的,因为我正在寻找更多的方法来认可