データベース呼び出しによってページの読み込みが大幅に遅くなるという問題が発生しています。選挙データから複数のグラフを作成しています。テーブルには約100万行が含まれており、getCharts()
メソッド内の各メソッドでこのデータを複数回クエリする必要があります。
私は これを使用して 戻りデータをJavaScriptに渡します。
これらのグラフは、データポイントをクリックすると再入力されます。したがって、ポイント、つまり( 'democrat)をクリックすると、ページが再読み込みされ、これらのメソッドが再度呼び出されます。
私が求めているのは、ネイティブPHPでこのようなことを実行できるかどうかです。サーバーはlinodeでPHP 5.2を実行しています。
foreach(function in getChartsMethod){
Start a child thread to process the function.
}
join the threads.
reload the page.
public function getCharts(){
$this->get_cast_chart();
$this->get_party_chart();
$this->get_gender_chart();
$this->get_age_chart();
$this->get_race_chart();
$this->get_ballot_chart();
$this->get_county_chart();
$this->get_precinct_chart();
$this->get_congressional_district_chart();
$this->get_senate_district_chart();
$this->get_house_district_chart();
return view('elections.index');
}
サンプルメソッド
public function get_party_chart(){
$query = DB::table($this->tableName)
->select('party', DB::raw('count(*) as numVotes'))
->groupBy('party')
->orderBy('numVotes', 'ASC');
if ($this->filterParameters != null){
$query = $query->where(key($this->filterParameters), $this->operator, current($this->filterParameters));
}
$chartData = $query->get();
$chartData = $this->prepare_data_for_chart($chartData, 'party', 'numVotes');
JavaScript::put(['partyChart' => $chartData]);
}
マルチスレッドはPHPで可能です。これは以前にStackoverflowで説明されています: PHPアプリケーション でマルチスレッドを使用するにはどうすればよいですか?
ただし、ここでマルチスレッドがどれだけ役立つかはわかりません。私たちが話しているデータの量、チャートでどのような精度を求めていますか?いくつのチャートが表示されていますか?解決策の多くはコンテキストから生まれます。
私の場合、バックグラウンドがあります スケジュール 「膨大な」量のデータをフロントエンドでより有用で使用可能なものに前処理します。ここでも、有用/使用可能は完全にコンテキストに依存します。実際のページリクエストがある場合は、実際の「ライブ」データではなく、処理されたデータを渡す必要があります。
繰り返しますが、これはアプリケーションのコンテキストに完全に依存します。おそらく、分単位のデータが必要ですが、必要ないかもしれません。
クリスは正しいです-それはすべてあなたのアプリケーションに依存します、しかしあなたがアプリケーションが使えなくなるところまで来ているなら、あなたはredisまたはmemcachedであなたの結果をキャッシュすることを検討するべきです。