Wp_table_list和ob_start()内存限制

时间:2013-04-24 作者:emeraldjava

我有一个扩展WP\\u Table\\u List并呈现表的类。请参见events results

在prepare\\u items()函数中,我查询数据库

function prepare_items($race)
{
    $columns = $this->get_columns();
    $hidden = array();
    $this->_column_headers = array($columns, $hidden, $this->get_sortable_columns());

    $orderby = (!empty($_REQUEST[\'orderby\'])) ? $_REQUEST[\'orderby\'] : \'position+0\'; //If no sort, default to title
    $order = (!empty($_REQUEST[\'order\'])) ? $_REQUEST[\'order\'] : \'asc\'; //If no order, default to asc
    if($orderby!=\'position+0\')
        $order .= \', position+0\';

    global $wpdb;
    $query = \'
        SELECT wp_bhaa_raceresult.*,wp_users.display_name,
        wp_users.user_nicename,gender.meta_value as gender,wp_posts.id as cid,wp_posts.post_title as cname
        FROM \'.$wpdb->prefix .\'bhaa_raceresult 
        left join wp_users on wp_users.id=wp_bhaa_raceresult.runner 
        left join wp_usermeta gender on (gender.user_id=wp_users.id and gender.meta_key="bhaa_runner_gender")
        left join wp_usermeta company on (company.user_id=wp_users.id and company.meta_key="bhaa_runner_company")
        left join wp_posts on (wp_posts.post_type="house" and company.meta_value=wp_posts.id)
        where race=\'.$race.\' and wp_bhaa_raceresult.class="RAN" ORDER BY \'.$orderby.\' \'. $order;
    $querydata = $wpdb->get_results($query,ARRAY_A);
    $this->items = $querydata;
}
我使用outputbuffer通过

function renderTable($race)
{   
    error_log("render table ".$race);
    ob_start();
    $this->prepare_items($race);
    $this->display();
    return ob_get_clean();
}
在我们最近的事件中,我们有500个结果,这似乎是输出缓冲区的内存问题。我想知道是否有更好的方法可以将表html代码刷新到缓冲区中,这样就不会导致内存不足问题。我的内存限制设置为

 define(\'WP_MEMORY_LIMIT\', \'128M\');
完整的类代码可以在

https://github.com/emeraldjava/bhaawp/blob/master/table/raceresulttable.class.php
编辑

在构建表的每一行时,我添加了对memory\\u get\\u usage()的调用

function column_default( $item, $column_name ) {
    error_log(\'column_default \'.$item[\'position\'].\' \'.memory_get_usage());
结果是

[24-Apr-2013 15:14:12 UTC] column_default 489 48477784
[24-Apr-2013 15:14:12 UTC] column_default 489 48477784
[24-Apr-2013 15:14:12 UTC] column_default 489 48477832
[24-Apr-2013 15:14:12 UTC] column_default 489 48477816
[24-Apr-2013 15:14:12 UTC] column_default 489 48477832
[24-Apr-2013 15:14:12 UTC] column_default 489 48477832
这表明我低于内存限制?

编辑2

我决定实现“display\\u rows()”方法,并在生成表的每一行后刷新html内容

function display_rows() {
    parent::display_rows();
    ob_flush();
}
这个解决方案允许生成整个表,但我无法用模板控制输出。

1 个回复
SO网友:Ralf912

结果多久变化一次?我认为结果是最终的,没有经常改变(或从未改变)。也许使用文件缓存比使用输出缓冲更好。

将结果写入文件,并将哈希或日期作为指示符附加到文件名。如果结果已更新或更改,请删除该文件并在中重新创建它prepare_items()

结束

相关推荐

Travel Blog Plugins

今年晚些时候,我将使用Wordpress创建一个关于我旅行的博客。我希望该博客具有以下功能我的帖子将被地理定位一张包含帖子位置的地图,可以单击地图上的各个点到达帖子</我正在寻找最好/最合适的插件。谢谢,艾尔。