4

データベース呼び出しによってページの読み込みが大幅に遅くなるという問題が発生しています。選挙データから複数のグラフを生成しています。テーブルには約 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]);

    }
4

2 に答える 2

5

以前 Stackoverflow で議論された PHP ではマルチスレッドが可能です: How can one use multi threading in PHP applications

ただし、ここでマルチスレッドがどの程度役立つかはわかりません。どのくらいのデータを話しているのですか?チャートでどのような精度を求めていますか? いくつのグラフが表示されていますか? 解決策の多くはコンテキストから得られます。

私だったら、「膨大な」量のデータをフロントエンドでより便利/使いやすいものに前処理するバックグラウンドスケジュールを設定します。ここでも、有用/使用可能は完全にコンテキストに依存します。実際のページ リクエストがある場合は、実際の「ライブ」データではなく、処理されたデータを渡すだけで済みます。

繰り返しますが、これはアプリケーションのコンテキストに完全に依存します。分刻みのデータが必要な場合もあれば、そうでない場合もあります。

于 2016-04-25T02:07:57.330 に答える