Laravel 中的多线程
Multi-Threading in Laravel
我 运行 遇到了一个问题,我的数据库调用显着减慢了页面加载速度。我正在从选举数据中填充多个图表,我的 table 包含大约 100 万行,我必须在 getCharts()
方法中的每个方法中多次查询此数据。
我 using this 将 return 数据传递给 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 中是可能的,之前在 Whosebug 上讨论过:How can one use multi threading in PHP applications
不过,我不知道多线程对您有多大帮助。我们在谈论多少数据,您在图表中寻找什么样的准确性?显示了多少图表?许多解决方案将来自上下文。
如果是我,我会在后台 schedule 将 "huge" 数据量预处理为前端更多 useful/usable 的数据。同样 useful/usable 完全取决于上下文。当有实际的页面请求时,您只需要传递处理后的数据,而不是实际的 "live" 数据。
再一次,这将完全取决于您的应用程序的上下文。也许您需要即时数据,也许不需要。
Chris 是对的 - 这完全取决于您的应用程序,但如果您到了应用程序不可用的地步,您应该考虑在 redis 或 memcached 中兑现您的结果。
我 运行 遇到了一个问题,我的数据库调用显着减慢了页面加载速度。我正在从选举数据中填充多个图表,我的 table 包含大约 100 万行,我必须在 getCharts()
方法中的每个方法中多次查询此数据。
我 using this 将 return 数据传递给 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 中是可能的,之前在 Whosebug 上讨论过:How can one use multi threading in PHP applications
不过,我不知道多线程对您有多大帮助。我们在谈论多少数据,您在图表中寻找什么样的准确性?显示了多少图表?许多解决方案将来自上下文。
如果是我,我会在后台 schedule 将 "huge" 数据量预处理为前端更多 useful/usable 的数据。同样 useful/usable 完全取决于上下文。当有实际的页面请求时,您只需要传递处理后的数据,而不是实际的 "live" 数据。
再一次,这将完全取决于您的应用程序的上下文。也许您需要即时数据,也许不需要。
Chris 是对的 - 这完全取决于您的应用程序,但如果您到了应用程序不可用的地步,您应该考虑在 redis 或 memcached 中兑现您的结果。