多个会话或多维数组?

时间:2011-08-29 01:23:02

标签: php

我没有任何数据可以对此进行基准测试,所以事先我想知道。对于加载同一页面的多个用户,你会说PHP会有更好的表现吗?

一个页面上的1.100个会话,每个页面包含一个数组,每个数组都在代码末尾未设置。多维数组:一个包含100个键的数组,每个数组包含一个数组。

3 个答案:

答案 0 :(得分:3)

概述

通过阅读你的问题,我感觉你不明白会话是什么以及它们是如何工作的。

为了以防万一,我将明确说明你可能会或可能不知道的会议的一些事情。

  • 会话是基于每个用户创建的,每个用户都可以获得自己的会话密钥,并且可以在密钥持续存在的时间内专门访问该数据。
  • 会话数据存储在服务器文件系统
  • 上的文件中
  • 用户在会话cookie中存储用于访问其特定会话的密钥

需要

会话通常用于包含临时的,持久的,特定于用户的数据。 $_SESSION是一个数组,因此您可以使用多维数组或对象存储任意数量的键值对。

会话背后的想法是将所有相关数据存储在单个会话中。如果有两组数据具有独立的状态持续时间,那么您应该使用两个会话。

在幕后,会话正在执行文件IO,因此使用会话会有必要的开销。

性能

因为$_SESSION与任何其他数组没有什么不同,所以在使用单个多维数组和使用100个数组之间的代码不会有显着差异。 在用于打开/关闭会话的读写时间量方面存在显着差异。如果没有理由将数据放在单独的会话中,请使用一个会话并根据需要对数据进行别名:

$foo = $_SESSION['foo'];
//do stuff with $foo
$_SESSION['foo'] = $foo;

您在全局范围内创建的任何数组都会自动成为多维数组,因为$GLOBALS数组(不是您应该从那里访问它们)。

TL;医生

除非您有多个需要彼此分开的数据集,否则不要使用多个会话。

没有过早的优化。测试而不是猜测。

答案 1 :(得分:0)

考虑为每个用户加载100个单独的数据文件将导致必须定位和加载这些文件的开销,加上PHP中的解析开销。如果你可以加载一个更大的文件,它几乎总是比加载多个小文件更有效。

但是,当然,你必须要进行基准测试。在一个系统上可能很慢的可能是你的超快速,你在这里得到的任何答案都说“你必须这样做这一个真正的方式(tm)”将是错误的。

答案 2 :(得分:0)

这两者基本相同。 100个独立数组可能有略微更多的内存使用,而不是100个数组作为元素的数组 - 但这也取决于它是一个关联数组还是枚举数组。

但实际上,出于存储目的,内存使用是相同的。

对于特定脚本,一个是否优于另一个将取决于脚本。如果您通过foreach放置一个大型多维数组,它会复制并消耗比foreach每个成员独立或有条件的内存更多的内存。