跨单个页面加载传输相当大量数据

问题描述

| 我有一个应用程序可以根据赛狗的比赛历史生成一系列统计信息。然后,此数组用于生成表,然后将其输出到浏览器。我目前正在创建一个函数,该函数将基于这些统计信息生成excel下载。但是,此excel下载仅在原始处理完成后才可用。让我解释。 用户单击种族名称 然后处理该种族的数据并将其显示在表格中。 表格下方是一个excel下载链接。 但是,这就是我遇到的问题。 excel下载存在于同一控制器内的另一种方法中,例如...
function view($race_id) {
    //Process race data and place in $stats
    //Output table & excel link
}

function view_excel($race_id) {
    //Process race data <- I don\'t want it to have to process all over again!
    //Output excel sheet
}
如您所见,数据已经通过\“ view \”方法进行了处理,因此,通过\“ view_excel \”方法再次进行处理似乎浪费了大量资源。 因此,当单击链接以防止必须复制时,我需要一种将$ stats转移到excel方法方法。我能想到的唯一方法如下。 使用会话闪存将$ stats转移到excel方法 对于会话变量,该变量可能最终太大。另外,如果由于某些原因刷新了excel方法,则变量将丢失。 使用普通的会话变量将$ stats转移到excel方法 如上所述,对于会话变量,变量可能最终太大。这样的好处是它不会在页面刷新时丢失,但是我不确定如何销毁旧的会话变量,特别是如果用户在短时间内处理大量比赛时。 将$ stats存储在数据库中并以excel方法进行检索 这似乎是最可行的方法。但是,似乎只需要跨一个转移变量就可以了。另外,我将必须实施某种cron作业才能删除旧的数据库条目。 $ stats的示例:
Array
(
    [1] => Array
        (
            [fcalc7] => 
            [avgcalc7] => 
            [avgcalc3] => 86.15
            [sumpos7] => 
            [sumpos3] => 9
            [sumfin7] => 
            [sumfin3] => 8
            [total_wins] => 0
            [percent_wins] => 0
            [total_processed] => 4
            [total_races] => 5
        )

    [2] => Array
        (
            [fcalc7] => 28.58
            [avgcalc7] => 16.41
            [avgcalc3] => 28.70
            [sumpos7] => 18
            [sumpos3] => 5
            [sumfin7] => 23
            [sumfin3] => 7
            [total_wins] => 0
            [percent_wins] => 0
            [total_processed] => 7
            [total_races] => 46
        )

    [3] => Array
        (
            [fcalc7] => 28.47
            [avgcalc7] => 16.42
            [avgcalc3] => 28.78
            [sumpos7] => 28
            [sumpos3] => 11
            [sumfin7] => 21
            [sumfin3] => 10
            [total_wins] => 0
            [percent_wins] => 0
            [total_processed] => 7
            [total_races] => 63
        )
)
很高兴听到您的想法。 担     

解决方法

您可以将数组序列化为sys_get_temp_dir()中具有数据相关文件名的文件。剩下的唯一问题是清理旧文件。 如您所说,也可以将其放入数据库中,如果您跟踪创建时间,则删除旧数据比在文件系统上更容易。