2012-03-22 25 views
3

ブラウザからPHPスクリプトを複数回実行する方法を探しています。ここにシナリオがあります:PHPスクリプトを複数回実行する

私は、100メガバイトから2ギガヘルツの範囲にある一連の大きなファイルからmySQLテーブルを構築しています。平均して、約150,000レコードがテーブルにあります。

私は今、PHPスクリプトのAJAX呼び出しを行うjavascript関数を使用しています。成功すると、この関数はタイムアウトを設定してAJAX呼び出しを起動し、2番目の100を実行します。

私が考えているのは、関数をもう一度実行する前に関数を閉じることです。

これはうまくいきません。機能全体は機能しますが、パフォーマンス面では非常に遅いです。

私は一度に100レコードを実行していないときに、PHPだけのJavaScriptを使用していないときに、タイムアウトする前にテーブルに約15,000レコードを取得できました。今は同じ数のレコードを処理するのに約10分かかります。

私が知っているのは、実行中のJavaScriptがクレイジーなメモリとパフォーマンスを奪っていて、誰かがブラウザから何度もPHPスクリプトを実行する方法を知っているのだろうかと思っています。現在のところ、クロンは選択肢ではありません。

+0

大きな問題はJavascriptかもしれません。 –

+0

ようこそスタックオーバーフロー! –

+0

AJAXコールには膨大なオーバーヘッドがあります。バックグラウンドのPHPプロセスを起動してメインページの読み込みでスクリプトを実行することはできません。また、AJAXプロセスを使用して表示する必要がある場合は更新をポーリングします。そうでない場合は、バックグラウンド処理で十分です。 – Orbling

答えて

-1

あなたはGearman

+0

ジョブが1分で実行されると見なすことができると想定しています。 :) –

1

そのは/ジョブキューを作業毎分あなたのスクリプトを実行するcronジョブを設定します複数回?関数が時々失敗するか、タイムアウトになるという問題がある場合は、スクリプト内で例外をキャッチできますか?あるいは、あなたは外的な鉱夫の使用を本当に必要とする避けられない完全に致命的なエラーがありますか?

0

は、あなただけのPHPスクリプト自体が機能を繰り返さ持っていませんでし探求する必要があるようで、(非同期)と呼ばれる

+0

実行時間が今の最大の問題です。それは、私が構築しているデータベースが、スクリプトが30秒で作成するには大きすぎることがあるようなものです。そのため、一度に100レコードを作成する必要があります。 –

0

私は同様の状況に遭遇しました...私の解決策は、ajaxキューを使用することでした。基本的には一連のajax呼び出しをキューに送り、順番にそれらを実行し、前回がサーバーから正常に戻った後に次のものを開始します。

タイムアウトを設定すると、サーバーが最後に完了する前に次のajax呼び出しが行われる状況になる可能性があります。これがパフォーマンス上の問題の原因です。私はJavaScriptのタイムアウトが自分自身のためだけにリソースを浪費しているのではない。

Googleの "Ajax Queue"は便利なコードであり、jQueryであることができます。

+0

これはおそらくそれがうまくいくソリューションだと思われます。助けてくれてありがとう! –

関連する問題