何百ものAPIを使用してレポートを生成する必要がある状況があります。ここでは、APIが別のものに依存する場合があります。Railsで何百もの順次APIを扱う方法
railsサービスを介して処理される独立したAPIをバックグラウンドジョブとして移動する予定です。しかし、APIレスポンスを待ってからページを生成する必要があります。
私はそれを行うための最善の方法を教えてください
何百ものAPIを使用してレポートを生成する必要がある状況があります。ここでは、APIが別のものに依存する場合があります。Railsで何百もの順次APIを扱う方法
railsサービスを介して処理される独立したAPIをバックグラウンドジョブとして移動する予定です。しかし、APIレスポンスを待ってからページを生成する必要があります。
私はそれを行うための最善の方法を教えてください
wicked_pdfがラッパー以外の何ものでもありません(読み込み時間を短縮する必要があります)。オペレーティングシステムのコマンドとしてwkhtmltopdf
を実行するのは本質的にはsystem()
呼び出しです。実行するたびに、次の作業を行う必要があります。1.新しいシェルプロセスを環境でforkします。2. wkhtmltopdf
をそのシェルで実行します。3.出力をスラップしてRailsに再提示します。これは必然的に同期的かつひどく非効率的であることを意味する。
このようなオーバーヘッドを避けて、prawn
gemを使用して直接PDFを生成する方がよいでしょう。実際にそれを行う必要がある場合、Railsはスレッドセーフであるため、concurrent-ruby
gemのfutures
を使用して同時リクエストを実行し、すべて完了するまでブロックします。
非同期にします。 AJAX経由でページの各セクションを読み込みます。いくつかのAPIが応答するのに*長い時間がかかる場合は、ポーリングやウェブソケットを使用するかもしれません。可能であればキャッシュを実装する。詳細情報がなくても(**これまでに試したことはありますか?**)、これは誰でもあなたに与えることができる唯一の答えです。 –
私はあなたがここでやっていることもちょっと混乱しています。あなたは "ローディング時間を減らす"と言いますが、これはバックグラウンドジョブを介して起こっているPDF生成ですか? 「PDFをより速く生成させるにはどうすればいいですか」と尋ねるだけですか?それに答えるには、私たちは**あなたのコードを見なければなりません! –
これを試してくださいhttps://coderwall.com/p/5cafjw/1600-faster-app-requests-with-rails-on-heroku –