私のデータベース呼び出しがページの読み込み速度を大幅に低下させるという問題が発生しています。私は選挙データから複数のグラフを作成しており、テーブルには約100万行が含まれており、getCharts()
メソッド内の各メソッドでこのデータを複数回クエリする必要があります。 JavaScriptに戻りデータを渡すためにLaravelのマルチスレッド
I'am using this。あなたがデータポイントをクリックすると
これらのチャートは、再人口取得します。したがって、ポイント(つまり、「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]);
}
テーブルのサイズは約100万行であり、これらのチャートはすべて投票数を示しています。おおまかに言えば、私はそれらをグループ化する方法(性別、党、年齢などによってshowVotes)だけです。このデータは、選挙日が終わるまで3ヶ月間毎日アップロード/更新され、その後は変更はありません。スケジューラを使用する際の問題は、このデータのバリエーションが多いため、バックグラウンドで多くのタスクを実行する必要があることです。すなわち、60歳をクリックすると、60年前の選挙データでページがリロードされます。 –
たとえば、「60歳」というデータをフィルタリングしている場合、データセットはそれ以上大きくならないようにしてください。また、サーバー側の正規化を行うことで、はるかに小さなデータパケットをフロントエンドに送信できます。再びその非常に難しいこの質問に答えて非常に広いと文脈に依存して – Chris
ありがとう。スケジューラとhttps://laravel.com/docs/5.1/cacheを使用してデータを先取りしてキャッシュし、データがアップロードされたときにすべてをフラッシュする方法についてどう思いますか?私は最初のページの読み込みを高速にする方法についてちょっと混乱していると思います。 –