2017-10-27 11 views
0

何百ものAPIを使用してレポートを生成する必要がある状況があります。ここでは、APIが別のものに依存する場合があります。Railsで何百もの順次APIを扱う方法

railsサービスを介して処理される独立したAPIをバックグラウンドジョブとして移動する予定です。しかし、APIレスポンスを待ってからページを生成する必要があります。

私はそれを行うための最善の方法を教えてください

+0

非同期にします。 AJAX経由でページの各セクションを読み込みます。いくつかのAPIが応答するのに*長い時間がかかる場合は、ポーリングやウェブソケットを使用するかもしれません。可能であればキャッシュを実装する。詳細情報がなくても(**これまでに試したことはありますか?**)、これは誰でもあなたに与えることができる唯一の答えです。 –

+0

私はあなたがここでやっていることもちょっと混乱しています。あなたは "ローディング時間を減らす"と言いますが、これはバックグラウンドジョブを介して起こっているPDF生成ですか? 「PDFをより速く生成させるにはどうすればいいですか」と尋ねるだけですか?それに答えるには、私たちは**あなたのコードを見なければなりません! –

+0

これを試してくださいhttps://coderwall.com/p/5cafjw/1600-faster-app-requests-with-rails-on-heroku –

答えて

0

wicked_pdfがラッパー以外の何ものでもありません(読み込み時間を短縮する必要があります)。オペレーティングシステムのコマンドとしてwkhtmltopdfを実行するのは本質的にはsystem()呼び出しです。実行するたびに、次の作業を行う必要があります。1.新しいシェルプロセスを環境でforkします。2. wkhtmltopdfをそのシェルで実行します。3.出力をスラップしてRailsに再提示します。これは必然的に同期的かつひどく非効率的であることを意味する。

このようなオーバーヘッドを避けて、prawn gemを使用して直接PDFを生成する方がよいでしょう。実際にそれを行う必要がある場合、Railsはスレッドセーフであるため、concurrent-ruby gemのfuturesを使用して同時リクエストを実行し、すべて完了するまでブロックします。

関連する問題