我制作了一个PHP应用程序,执行约需0.0070秒。现在,我添加了一个大约2000个值的哈希表数组。突然,执行的时间已经达到了约0.0700秒。几乎是以前价值的10倍。
我尝试评论我在里面搜索哈希表数组的部分(但是数组仍然是左边定义的)。不过,执行时间仍然约为0.0500秒。
数组类似于:
$subjectinfo = array(
'TPT753' => 'Industrial Training',
'TPT801' => 'High Polymeric Engineering',
'TPT802' => 'Corrosion Engineering',
'TPT803' => 'Decorative ,Industrial And High Performance Coatings',
'TPT851' => 'Project');
有没有办法优化这部分?
我无法使用数据库,因为我在谷歌应用程序引擎上运行此应用程序仍然不支持PHP的JDO数据库。
来自应用的更多代码:
function getsubjectinfo($name)
{
$subjectinfo = array(
'TPT753' => 'Industrial Training',
'TPT801' => 'High Polymeric Engineering',
'TPT802' => 'Corrosion Engineering',
'TPT803' => 'Decorative ,Industrial And High Performance Coatings',
'TPT851' => 'Project');
$name = str_replace("-", "", $name);
$name = str_replace(" ", "", $name);
if (isset($subjectinfo["$name"]))
return "(".$subjectinfo["$name"].")";
else
return "";
}
然后我在应用程序中使用以下语句2-3次:
echo $key." ".$this->getsubjectinfo($key)
答案 0 :(得分:1)
function getsubjectinfo($name)
{
$subjectinfo = array(
'TPT753' => 'Industrial Training',
'TPT801' => 'High Polymeric Engineering',
'TPT802' => 'Corrosion Engineering',
'TPT803' => 'Decorative ,Industrial And High Performance Coatings',
'TPT851' => 'Project');
// ..
}
这样就可以在每次调用函数时创建数组。考虑在这里使用静态变量
function getsubjectinfo($name)
{
static $subjectinfo = array(
'TPT753' => 'Industrial Training',
'TPT801' => 'High Polymeric Engineering',
'TPT802' => 'Corrosion Engineering',
'TPT803' => 'Decorative ,Industrial And High Performance Coatings',
'TPT851' => 'Project');
// ..
}
作为旁注:你也可以使用SQLite-Database:)
更新:OOP方法
class MyClass {
public static $subjectnames = array(
'TPT753' => 'Industrial Training',
'TPT801' => 'High Polymeric Engineering',
'TPT802' => 'Corrosion Engineering',
'TPT803' => 'Decorative ,Industrial And High Performance Coatings',
'TPT851' => 'Project');
public function getsubjectinfo($name) {
$name = str_replace("-", "", $name);
$name = str_replace(" ", "", $name);
if (isset(self::$subjectnames["$name"]))
return "(".self::$subjectnames["$name"].")";
else
return "";
}
}
答案 1 :(得分:0)
您可以尝试将整数用作表格中的键。
“但是所有的钥匙都不一定有TPT,它们可能是TOE362,AGS612等。我已按升序排序,但不知道它是否有帮助。”
将原始字符串哈希化为数字数据,并将该输出用作哈希键。是的,每次访问涉及一个恒定时间惩罚(对于额外的哈希),但如果你的最终数据集足够大,我怀疑这可能胜过让PHP直接使用字符串键。
如果所有其他方法都失败了,请在C中编写性能敏感代码并将其编译为PHP扩展。不,更好的是,用C编写整个应用程序。更好的是,使用直接的机器代码来处理所有事情。或者用您想要的逻辑连接面包板!参考:http://xkcd.com/378/
答案 2 :(得分:0)
每天课程学习 - 在类构造函数中定义大型数组可以加快速度。
我将代码修改为:
class myclass
{
var $subjectnames = array();
function myclass()
{
$this->subjectnames = array(
'TPT753' => 'Industrial Training',
'TPT801' => 'High Polymeric Engineering',
'TPT802' => 'Corrosion Engineering',
'TPT803' => 'Decorative ,Industrial And High Performance Coatings',
'TPT851' => 'Project');
}
function getsubjectinfo($name)
{
//$subjectinfo = array();
$name = str_replace("-", "", $name);
$name = str_replace(" ", "", $name);
if (isset($this->subjectnames["$name"]))
return "(".$this->subjectnames["$name"].")";
else
return "";
}
}
答案 3 :(得分:0)
我曾经读过你可以通过serialize / unserialize来优化这样的静态数组配置。
在源代码中注入数组的序列化版本。它将是一个字符串。
使用unserialize(..)动态构建数组。
Urban legend说它可能会节省一些解析时间。
您可以尝试的另一件事是使用对象属性而不是数组键。
$ obj-> TRV3463可能比数组访问更快。