在 PHP 中保存和恢复 class 作为优化技术?
Saving and restoring a class in PHP as an optimisation technique?
我在 PHP 应用程序中有一个网页可以访问专有格式的数据文件,对其进行解析,并根据用户输入生成结果。它工作完美。
但是,现在数据文件越来越大,解析时间也越来越长。用户需求也在增加。
在一切失控之前,我想稍微优化一下应用程序,但不要花太长时间。
目前,数据文件在 class 中解析,class 知道文件的所有信息。
输出只需要精确到数据文件的4小时以内。
对我来说,优化它的最快方法是每小时在 cron 事件中加载和解析文件,并将该数据保存在网页加载速度更快的地方,这意味着每小时解析一次文件在每一个要求。
最好的方法是什么?
我立刻想到 "database",但是尝试存储所有数据似乎需要做很多工作,而且文件中的任何数据都可能发生变化,所以与其尝试比较数据,我还不如尝试比较数据每小时删除 table 并重新填充,网络应用程序可能会 return 向用户提供不正确的数据。
然后我想是否可以获取 class,将其保存到磁盘,然后网络应用程序在需要时将该数据重新加载到内存中?这意味着对应用程序的修改很少(以及 cron 上的一个小脚本 运行)。
您可以序列化 class,但不推荐这样做。
当您使用 php 并且只对结果集感兴趣时,最简单的方法是使用 uapc 存储数据,它只是 key/value 存储在内存中。
示例:
function GetData() {
$cached = apc_fetch('myParsedData');
if(!empty($cached)) {
return $cached;
}
$data = file_get_contents(...);
$result = Parse($data);
apc_store('myParsedData', $result, 3600);
return $result;
}
function Parse($data) {
//do something
return $result;
}
这将存储数据 3600 秒,当数据为空时,它将从磁盘加载。
我在 PHP 应用程序中有一个网页可以访问专有格式的数据文件,对其进行解析,并根据用户输入生成结果。它工作完美。
但是,现在数据文件越来越大,解析时间也越来越长。用户需求也在增加。
在一切失控之前,我想稍微优化一下应用程序,但不要花太长时间。
目前,数据文件在 class 中解析,class 知道文件的所有信息。
输出只需要精确到数据文件的4小时以内。
对我来说,优化它的最快方法是每小时在 cron 事件中加载和解析文件,并将该数据保存在网页加载速度更快的地方,这意味着每小时解析一次文件在每一个要求。
最好的方法是什么?
我立刻想到 "database",但是尝试存储所有数据似乎需要做很多工作,而且文件中的任何数据都可能发生变化,所以与其尝试比较数据,我还不如尝试比较数据每小时删除 table 并重新填充,网络应用程序可能会 return 向用户提供不正确的数据。
然后我想是否可以获取 class,将其保存到磁盘,然后网络应用程序在需要时将该数据重新加载到内存中?这意味着对应用程序的修改很少(以及 cron 上的一个小脚本 运行)。
您可以序列化 class,但不推荐这样做。
当您使用 php 并且只对结果集感兴趣时,最简单的方法是使用 uapc 存储数据,它只是 key/value 存储在内存中。
示例:
function GetData() {
$cached = apc_fetch('myParsedData');
if(!empty($cached)) {
return $cached;
}
$data = file_get_contents(...);
$result = Parse($data);
apc_store('myParsedData', $result, 3600);
return $result;
}
function Parse($data) {
//do something
return $result;
}
这将存储数据 3600 秒,当数据为空时,它将从磁盘加载。