提高文件写入速度

时间:2012-12-13 07:22:02

标签: php image file-io jpeg imagick

我创建了一个网站,其中有一个Checkout按钮,每当客户点击Checkout按钮时,我需要以jpg格式创建4个图像文件并将其保存在服务器上。这些图像文件稍后将由网站管理员打印

现在其中一个图像文件的大小可能是3MB到4MB 而3张图像文件的其余部分大小将介于250KB到500KB之间

现在问题是第一个文件可能从3MB到4MB需要一些时间来创建,如5-10秒(这只是一次一个客户结账时)

但是当我用2个不同的设备同时执行Checkout时,时间范围增加到20秒,其中一个Checkout被处理了,而另一个等待或工作有点慢,所以总时间是20秒,否则时间其中一个Checkout是8秒,而另一个则是12秒

所以我担心如果10或20个客户同时执行Checkout,那么其中一些可能需要等待2或3分钟或者甚至更多

所以任何人都可以告诉我,如何提高PHP写入文件的速率或提高PHP执行速度或增加RAM可能有所帮助(目前为1GB)

注意: -
- >我正在使用IMagick创建图像文件,
- >也不能降低jpg质量,因为它将在150 dpi后打印机,
- >第一个图像文件是高清晰度照片,而其余3个仅填充纯色
- >它们的分辨率也很高,宽度和高度都在2800到4400像素之间 - >还有一个序列号将被添加到所有4个图像文件中,因此我无法降低其质量,否则在打印所有4个图像文件时可能看不到序列号

更新: 客户首先上传照片,然后他可以缩放图像,裁剪图像甚至移动它(用于裁剪目的)

因此,简而言之,他主要是裁剪上传的图像,当他点击结账按钮时,会创建新图像并添加序列号

我在大约1秒内检查了图像被处理或在内存(RAM)中创建的代码,但是当我在服务器本身添加用于在硬盘驱动器上写入图像的代码时,它需要花费一些时间。时间5-8秒如果没有同时请求,则10-15分钟,如果20-30同时请求

此外,我必须向他们展示成功或失败消息,但我只能在创建所有4个图像文件后显示成功消息,所以即使我使用ajax,即使那时我也无法显示成功消息图像已创建

如果我删除用于写入图像的代码,那么如果没有同时请求则时间减少到1秒,如果20-30同时请求则减少到5-10秒

所以我认为问题在于编写图像文件而不是处理或生成它

此外,当用户仍然裁剪图像时,我无法创建图像文件,否则会减慢裁剪过程。情况也不会改变,而是变得更糟,“同时结账时会发生什么”的问题将变为“同时裁剪时会发生什么”。所以这不是一个选择

此外,如果我说电子邮件将发送给您,告知您Checkout是否成功,我认为它看起来不会很专业。

1 个答案:

答案 0 :(得分:0)

只是一些想法,也许其中一个可以帮助你完成手头的任务:

  • 尝试找出您在这些图片上执行的步骤是否会影响您的表现。也许会显示一些代码,以便人们可以提供帮助。
  • 由于较旧的硬件(CPU,RAM,HD),某些图像操作可能需要更长时间。你的硬件够用吗?
  • 您使用的是最新版本的IMagick吗?
  • 尝试将图像处理与结帐流程分开。也许可以先将原始数据写入数据库,文件或其他任何内容,然后创建一个执行处理的cron(或触发它),这样您的用户就不必等待这一点。
  • 你可能也需要深入研究你的php和apache配置。未经优化的设置也可能导致性能问题。