Laravel中的多线程

时间:2016-04-25 01:56:54

标签: php multithreading laravel asynchronous laravel-queue

我遇到了一个问题,我的数据库调用显着减慢了页面加载速度。我从选举数据填充多个图表,我的表包含大约100万行,我必须在getCharts()方法中的每个方法中多次查询这些数据。

using this将返回数据传递给JavaScript。

单击数据点时会重新填充这些图表。因此,如果你点击一个点('民主党人),它将重新加载页面并再次调用这些方法。

我要问的是,在本机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]);

    }

2 个答案:

答案 0 :(得分:3)

PHP中可以进行多线程处理,之前已在Stackoverflow上讨论过:How can one use multi threading in PHP applications

但是我不知道多线程会对你有多大帮助。我们在说什么数据,你在图表中寻找什么样的准确度?显示了多少张图表?很多解决方案都来自上下文。

如果是我,我会有一个背景schedule预处理"巨大的"将数据量转换为前端更有用/可用的数据。再次有用/可用完全取决于上下文。当有实际的页面请求时,您只需要传递已处理的数据,而不是实际的" live"数据。

同样,这将完全取决于您的应用程序的上下文。也许你需要一分钟的数据,也许你不需要。

答案 1 :(得分:3)

Chris是对的 - 这完全取决于您的应用程序,但是如果您已经达到应用程序不可用的程度,那么您应该考虑使用redis或memcached兑换结果。