将PHP数组存储到会话变量中以最大化性能?

时间:2014-10-02 20:44:52

标签: php arrays session

我有一个数组,每次加载页面时都会被查询,所以我想最小化开销并将数组存储到会话变量中。到目前为止,该数组文件为15kb。我仍然需要为每个数组子键添加大约300个单词。因此文件大小可能会增加到100kb到500kb之间。只是一个猜测。

该数组用于存储页面数据,如标题,描述和发布内容。

这是数组的结构:

11个主键。

在这些主键中,子键是从1到20的任何位置。大多数都有大约3到7个。

每个子键都有自己的数组titledescriptionpost

标题和说明并不多,但post将保留约300字或更少。

数组中的值将保持不变。

下面是一个示例,其中包含2个主键和2个子键。

$pages = array(

'Administrator' => array(
    'network-administrator' => array('title' => 'title info here', 'description' => 'description info here', 'post' => '<p>post info here - about 300 words.</p>'),
    'database administrator' => array('title' => 'title info here', 'description' => 'description info here', 'post' => '<p>post info here - about 300 words.</p>'),
),

'Analyst' => array(
    'business systems analyst' => array('title' => 'title info here', 'description' => 'description info here', 'post' => '<p>post info here - about 300 words.</p>'),
    'data-analyst' => array('title' => 'title info here', 'description' => 'description info here', 'post' => '<p>post info here - about 300 words.</p>'),
),

);

我的问题分为三部分。

1)我可以将它放入会话变量中,并且仍然可以从会话数组中访问数据,就像我直接从数组本身访问它一样吗?

2)将数组放入会话以减少每次页面加载时循环数组的开销是否有任何好处?

这是我从数组中访问值的方法

$content = $pages['Administrator']['network-administrator'];

$title = $content['title'];

$description = $content['description'];

$post = $content['post'];

3)我现在可以使用与上面相同的方式访问数组值,还是像这样写?

$pages = $_SESSION[$pages];

$content = $pages['Administrator']['network-administrator'];

$title = $content['title'];

$description = $content['description'];

$post = $content['post'];

需要一些清晰度,谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

将它们放入会话会增加开销并降低性能,因为它将再次为每个用户存储。默认情况下,会话存储为文件,因此您也会引入额外的文件I / O开销,从而增加负载 - 我不知道如何将它们存储在数据库中会更好。

如果您真的想提高处理该数据的性能,它们应该在内存缓存中。 MemcacheAPC(正如Cheery已经提到的)是很好的选择。

然而,这只会在您的阵列处理真正成为瓶颈时有所帮助。根据你的描述,我真的不相信。先测量,然后再尝试优化。

答案 1 :(得分:1)

如果表值为&#34;静态&#34; (对每个用户来说并没有什么不同)将它放入会话中没有任何好处,我认为它根本不会提高性能。

虽然,这是我对你的问题的回答:

1)您将能够像现在一样访问该表,会话可以处理数组

2)它不会减少开销。会话存储在文件中,数据被序列化。

3)$pages = $_SESSION['pages']或直接$_SESSION['pages']['Administrator']