在单个页面加载中传输(相当)大量数据

时间:2011-04-13 10:06:00

标签: php database session codeigniter

我有一个应用程序,它根据赛狗历史记录生成一系列统计数据。然后使用该数组生成一个表,然后将其输出到浏览器。我目前正在创建一个函数,它将根据这些统计信息生成Excel下载。但是,此excel下载仅在原始处理完成后才可用。让我解释一下。

  1. 用户点击竞赛名称
  2. 然后处理该种族的数据并显示在表格中。
  3. 表格下方是excel下载的链接。
  4. 然而,这是我被卡住的地方。 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_excel”方法中再次处理数据似乎是浪费大量资源。

    因此,我需要一种方法,在点击链接时将 $ stats 转移到excel方法,以防止必须再现它。我能想到的唯一方法如下。

    • 使用会话闪存将$ stats转移到excel方法
      • 变量可能最终对于会话变量来说太大了。此外,如果由于某种原因刷新了excel方法,则该变量将丢失。
    • 使用普通会话变量将$ stats转移到excel方法
      • 如上所述,变量可能最终对于会话变量来说太大了。这样做的好处是它不会在页面刷新时丢失,但我不确定如何破坏旧的会话变量,特别是如果用户在很短的时间内处理了很多种族。 < / LI>
    • 将$ 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
            )
    )
    

    很高兴听到你的想法。

1 个答案:

答案 0 :(得分:0)

您可以使用数据依赖文件名将serialize数组sys_get_temp_dir()放入{{3}}的文件中。剩下的唯一问题是清理旧文件。

如您所说,将其放入数据库也是可能的,如果您跟踪创建时间,删除旧数据比在文件系统上更容易。