我正在构建 Stripe SaaS,它检索注册用户的所有发票并进行一些统计
我的服务器位于 Godaddy 共享服务器上,内存为 512mb,页面加载时间可能需要 20 秒,如果用户有 50 张发票,这对性能来说太糟糕了
我正在使用带有 Stripe 包的 Laravel 5.4 框架
这是我在 Controller 中的代码
\Stripe\Stripe::setApiKey($secret_key);
$invoices= \Stripe\Invoice::all(array("limit" => 100));
我的观点是
@foreach($invoices->autoPagingIterator() as $invoice)
<tr>
<td>invoice.created</td>
<td> {{$invoice->id}}</td>
<td>{{$invoice->amount_due}}</td>
<td> {{$invoice->attempt_count}}</td>
<td> {{$invoice->livemode}}</td>
<td> {{$invoice->charge}}</td>
<td> {{$invoice->currency}}</td>
<td> {{$invoice->customer}}</td>
<td> {{$invoice->date}}</td>
<td> {{$invoice->description}}</td>
<td> {{$invoice->discount}}</td>
<td> {{$invoice->ending_balance}}</td>
<td> {{$invoice->period_end}}</td>
<td> {{$invoice->period_start}}</td>
<td> {{$invoice->subscription}}</td>
<td> {{$invoice->paid}}</td>
</tr>
@endforeach
逻辑是 key 存储在数据库中,每个用户都有自己的 key 我想知道这是在没有重负载的情况下进行 SaaS 的最佳实践
最佳答案
Stripe 内置了速率限制,可防止您一次提取过多数据。
我们最近为客户构建了一个系统(我们使用 Stripe Connect 作为客户和企业之间的“中间人”,收取费用),该系统需要我们显示以前的发票。我们想出的唯一真正的方法是同步数据并保留本地副本。
这花了一周的时间来运行我们所有的旧数据,但现在可以通过可排队事件动态运行,在创建 strip 数据时处理拉取 strip 数据。
我的建议是设置一个队列,将所有发票数据拉到您自己的数据库中,然后您可以在其中格式化和显示,而不会出现明显的加载延迟。将其与查询缓存和索引相结合,您应该可以以较低的服务器开销实现相当快的设置。
作为旁注,我还建议寻找比共享托管更好的托管选项,因为在如此有限的环境中尝试执行队列和计划等操作时会遇到很多问题。从长远来看,简单的 DigitalOcean 或 Linode 盒子与 Laravel Forge 相结合使 Laravel 的特定部署和管理变得更加容易。
关于php - Stripe API 列出发票的速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45401509/