質問

Webアプリケーションの入力に基づいて、さまざまなファイルタイプ(Excel、PDF、PNG)のいくつかのレポートを生成する必要があります。アプリケーションは、Apache WebServerのPHPで記述されています。

ATMは、ユーザーがレポートセクションにアクセスすると、データベースに新しいデータが送信されているかどうかをチェックするイベントをトリガーし、その情報に基づいて、新しいレポートファイルが生成されます。これにより、ユーザーはファイルが生成されるまで(3〜10秒)待つようになります。これは、まったく適切なアプローチではないので、アドバイスが必要です。

役に立ちましたか?

解決

もちろん、それは本当にあなたのアプリケーションとあなたのシステムに依存しますが、通常、私がしていることは、PHPスクリプトを実行して定期的にレポートを生成するCronジョブを持っていることです。出力は、ファイルシステムまたはデータベースに保存できます。このように、私のレポートは(ユーザーがそれらをダウンロードしようとするたびに)1回のみ生成され、必要なときに生成されます(スクリプトがあなたが持っている変更基準に基づいてレポートを生成する必要があるかどうかを確認できます。定期的に新しいレポートを生成するために設定するだけです)。本当にシンプルに保つには、現在のWebページをWgetまたはCurlで電話して、Webサーバーに新しいページを作成して、保存されたレポートをダウンロードしてください。

このアプローチの唯一の問題は、ユーザーが「Stale」レポートをダウンロードする可能性があることです(データは変更されましたが、レポートは更新されていません)。これが本当に問題である場合、別のアプローチは、変更されたデータをチェックし、必要に応じてレポートを生成するバックグラウンドでPHPスクリプトを実行し続けることです。

別のアプローチは、ユーザーがそれらをダウンロードしようとしたときにレポートを生成し続けることができるが、結果をキャッシュできることです。再び独自のアプリケーション固有の基準を使用して、キャッシュされたレポートが即時ダウンロードに十分であるかどうかを確認するか、新しいレポートを生成してキャッシュします。これを定期的に新しいレポートを生成することで最初のアプローチと組み合わせることもできますが、ユーザーが古くなっているレポートをすぐに新しいレポートを生成しようとした場合(ユーザーは3〜10秒待たせます)。

最終的には、システムとアプリケーションに依存します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top