1

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

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

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

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

所以我担心如果 10 或 20 位客户同时执行结帐,那么他们中的一些人可能不得不等待 2 或 3 分钟甚至更长时间

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

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

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

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

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

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

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

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

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

此外,如果我说将向您发送一封电子邮件,通知您您的结帐是否成功,我认为这看起来并不专业。

4

1 回答 1

0

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

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