2つのWebサイトからの2つの別個の異なるAPIを使用しています(サイト1=>私のアプリ=>サイト2)。一方のサイトのAPIからデータを取得(取得)し、もう一方のサイトにデータを送信(投稿)します。AKA「クラックを埋める」(常に送信サイトのデータをソースとミラーリングしたままにする)を同期するレイヤーと、非複製のレイヤー(SITE1のデータセットにSITE2に重複するエントリがないことを確認する)があります。 )。
ユーザーが単純なフォームのPOSTボタンを使用して「同期」を誘導したとき。潜在的に、SITE1からの何千ものエントリをSITE2に取り込む必要があります。これを行う簡単な低レベルの方法は、SITE 1からデータの配列を取得することであり、そのループで、データを送信してSITE2に送信します。大規模な作業を行う場合、この種のループはほとんどの場合失敗するか、ページが終了すると数分間ハングして終了します。
これは、それを行う「ローレベル/ローテク」の方法の例です。この例の各部分は非常に時間がかかります。ユーザーが停止できる1ページ/1スクリプトで発生するすべての操作。ページは白く、空白で、あまりユーザーフレンドリーではありません。
// Get all of the data from site one
$siteOneDataNuggets = get_siteOne_data();
//Loop through all of site one's data
foreach($siteOneDataNuggets as $siteOneDataNugget){
//Post it to site two
post_siteTwo_data($siteOneDataNugget);
}
このようなプロセスに時間がかかる場合は、ある種のロード画面/バーを表示したいと思います。このようなものもどのように実装されますか。
私は、上記の状況に対処するためのコーディング哲学または標準的な方法を探しています。アイデアと理論は私が探しているものであり、必ずしもコード例ではありません。
私自身の先入観のある選択肢。
$siteOneDataNugget
これを行う別の方法は、ローカライズされた「API」として機能するページを作成することです。各ページには、1つのページではなく1000ページにロジックを分散する独自のインスタンスがあります。ほとんどの場合、ローディングバー/プレゼンテーション層にajaxフィードを使用して行われます。
経過報告
私は代替案を深く掘り下げていません。PHP CURLから始めて、ロードに数時間かかることがわかったとき(4分のタイムアウトがトリガーされました) 、非同期のcurl呼び出しを使用するJaisenMathaiによるこのブログ投稿で説明されているEpiCurlに遭遇しました。これには、私がまだ克服していない独自の制限があります。