【问题标题】:enhancing php script performance增强 php 脚本性能
【发布时间】:2014-04-19 04:03:39
【问题描述】:

(这个问题的主题可能与问题不匹配,但我想不出更好的方法)我有一个网页,用户提供收件人的电子邮件地址,可以有 100 个或更多的电子邮件地址,以 ; 分隔在文本区域中提供。当然,我必须向所有这些地址发送电子邮件。我想到了 2 种方法,但无法确定哪一种可以提供更好的用户体验和性能。
方法1:我循环浏览我的js中的所有这些电子邮件并将ajax请求发送到php脚本。但是会有 100 个请求到服务器,如果用户在这之间关闭浏览器,所有电子邮件地址都不会通过

方法2:我一次将所有100个电子邮件地址发送到php脚本,并让php脚本循环遍历电子邮件。我假设我可以在每次循环计数后将一些消息与成功消息回显给客户端,即使客户端死了,那么至少 php 将继续执行直到循环结束

谁能告诉我这两种方法的优缺点

【问题讨论】:

  • 这样的脚本没有好处。
  • 您需要实现一个 FIFO 队列,即在您的 webapp 之外执行。
  • @john 不知道你在哪里发现我提出了任何解决方案,我想实施一些东西,我想到了 2 个想法,我询问利弊,如果你有更好的想法,一定要在这里呈现,直白的说这样不好
  • @john 可能是我的想法不好,可能是因为我从未实现并创建过一个 web 应用程序来完成这项工作,所以你建议一些更好的方法,就像 RPM 一样,我现在明白了它是如何工作的
  • @Tarun - 给你一个好的答案是我的特权,而不是你接受答案的权利。我相信您所描述的脚本要么天生就是邪恶的,要么很容易被采纳,因此我选择不为您提供十几种可行的解决方案中的任何一种。如果只有我一个人持这种观点,你的问题就不会被如此否定。事实上,我认为 RPM 根本无法为您提供答案。

标签: javascript php web webpage


【解决方案1】:

这是一个关于如何实现队列的想法。

define('MAX_EMAIL_BUFFER_SIZE', 15);

// do a query to see how many emails are needed to be sent, you need to do store
// this data in mysql or some other place.
// array getEmails() { }

$total = count( getEmails());
$pages = ceil($total / MAX_EMAIL_BUFFER_SIZE);
$i = 0;
for(; $i < $total; $i++) {
  $offset = ($page - 1)  * MAX_EMAIL_BUFFER_SIZE;
    /* query
    SELECT
        *
    FROM
        table
    ORDER BY
        name
    LIMIT
        MAX_EMAIL_BUFFER_SIZE
    OFFSET
        $offset
   */
  // the result returned by the query are the emails you wills send.
  // do the above query in a function that returns the results

  foreach($data as $email) {
    mail(...);
  }
  // sleep for 10 seconds.
  sleep(10);
}

【讨论】:

  • 好的,我明白了,您的建议是,在我的数据库中会有一个包含电子邮件 ID 的表,需要向其发送电子邮件,并且一些外部队列将读取该数据库表并将发送电子邮件
  • 我喜欢这个主意。虽然我现在需要了解如何创建外部脚本,但可能是可以安排某种 cron 作业,或者必须手动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多