Stripe API列出发票的速度非常慢

时间:2017-07-30 15:31:12

标签: php laravel stripe-payments stripe-connect

我正在构建Stripe SaaS,它会检索注册用户的所有发票并进行一些统计

我的Godaddy服务器共享服务器512mb RAM,页面加载时间可能需要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

逻辑是密钥存储在数据库中,每个用户都有自己的密钥 我想知道这是在没有大量加载的情况下进行SaaS的最佳实践

1 个答案:

答案 0 :(得分:4)

Stripe内置了速率限制功能,可以防止您一次性提取太多数据。

我们最近为我们的客户建立了一个系统(我们使用Stripe Connect,因此在客户和企业之间充当“中间人”,需要付费),这需要我们显示以前的发票。我们提出的唯一真正的方法是同步数据并保留本地副本。

这花费了一周的时间来浏览我们所有的旧数据,但现在可以随时运行,可以通过队列事件处理拉条带数据。

我的建议是设置一个队列,将所有发票数据下拉到您自己的数据库,然后您可以在那里进行格式化和显示,而不会出现明显的加载延迟。将它与查询缓存和索引相结合,你应该有一个非常快速的设置,服务器开销很低。

作为旁注,我还建议您考虑使用比共享主机更好的托管选项,因为您在尝试使用如此有限的环境执行诸如队列和日程安排等问题时会遇到很多问题。与Laravel Forge相结合的简单DigitalOcean或Linode盒子使Laravel特定的部署和管理从长远来看变得更加容易。