PHP文件是否在每次AJAX调用时实例化?

时间:2009-07-22 11:49:04

标签: php ajax

我只是想知道PHP在后台的表现如何。

假设我有一个PHP,它创建一个数组并用名称填充它。

$names = Array("Anna", "Jackson" .... "Owen");

然后我有一个输入字段,它会将每个按键上的值发送给PHP,以检查包含该值的名称。

每次通话都会创建阵列吗?我也在循环之前对数组进行排序,因此输出将按字母顺序排列。这会占用AJAX调用的时间吗?

如果答案是肯定的,有没有办法解决这个问题,那么数组是否已准备好在每次通话时循环播放?

5 个答案:

答案 0 :(得分:6)

AJAX请求和“普通”http请求之间没有区别。所以是的,将为每个请求创建一个新的php实例。如果解析脚本所花费的时间是个问题,您可以使用APC之类的内容 如果这些数组是在运行时创建的,那么这个问题就是一个问题,您可以在memcache

之类的请求中存储和共享请求之间的值。

答案 1 :(得分:2)

无论您使用什么方法创建数组,如果它在代码中,如果您将其从数据库,文本文件或任何其他来源中拉出来,当Web服务器获取http请求时(无论是是不是Ajax)它将开始执行PHP脚本,在内存中创建它的空间,然后创建数组。 PHP脚本只有一个入口点,当http rquest指向它时,它就是它的第一行。 (或者当包含另一个脚本时,它是相同的)

答案 2 :(得分:1)

据我所知,每次都需要创建数组,因为AJAX会在输入输入字段的每个按键上发出新的服务器请求。如果您创建脚本,则每个服务器请求都将创建该数组。

更好的方法是使用数据库来存储名称。

答案 3 :(得分:1)

是的,每次运行PHP脚本时都会创建和销毁它。

如果这是一个问题,你可以看看在某个地方(例如在会话或数据库中)保存这些数据,但我会问你是否真的会导致你这么多的性能问题,你需要这样做吗?

答案 4 :(得分:1)

(这不是你问题的直接答案,但如果你担心表演会有所帮助)

你这样说:

  

然后我有一个输入字段   发送每个按键的值   PHP

在这种情况下,一旦按下一个键就不会将请求发送到服务器是很常见的事情:你通常要等几毫秒(介于100毫秒到150毫秒之间,我会说),看看如果该区间内没有其他按键:

  • 如果用户键入多个键,他通常比您等待的时间更快,因此,您只发送最后一个按键的请求,而不是每个按键
    • 如果用户输入4个字母,则只执行1个请求,而不是4个;这对您服务器的健康状况非常有益: - )
  • 说到用户的时间:等待100毫秒加上去服务器的时间,让脚本运行,从服务器返回几乎与没有先等待100毫秒相同;所以,对用户来说并不坏

作为旁注:如果您的数据监听不是太大(20个名称肯定没问题; 100个名称可能会好; 1000可能太多),您可以将其直接存储为Javascript数组,而不是一个Ajax请求:这是最快的方式(没有客户端 - 服务器调用),它根本不会加载你的服务器。