Php 如何通过代码加速?
有没有办法加速我的代码?加载大约需要15秒。。。我真的没有办法减少我的代码。。。我只是想将这些值插入数据库,这样用户就不必每次都加载新信息。。但问题是我的cron每小时只允许1次加载。。。通过在每次加载时加载新信息,它为我提供了新信息Php 如何通过代码加速?,php,performance,cycle,Php,Performance,Cycle,有没有办法加速我的代码?加载大约需要15秒。。。我真的没有办法减少我的代码。。。我只是想将这些值插入数据库,这样用户就不必每次都加载新信息。。但问题是我的cron每小时只允许1次加载。。。通过在每次加载时加载新信息,它为我提供了新信息 $q1=mysql_query("SELECT * FROM isara"); while($r1=mysql_fetch_array($q1)){ $named=$r1['name']; $idd=$r1['id'];
$q1=mysql_query("SELECT * FROM isara");
while($r1=mysql_fetch_array($q1)){
$named=$r1['name'];
$idd=$r1['id'];
$descd=$r1['desc'];
$online=check_online($named);
$char = new Character($r1['name'],$r1['id'],$r1['desc']);
if($online == "online"){
$char->rank = $i++;
}
else{
$char->rank = 0;
}
$arr[] = $char;
}
?>
<br />
<h2 style="color:green">Online enemies</h2>
<?php
foreach ($arr as $char) {
if($char->rank>=1){
echo "<a style=\"color:green\" href=\"http://www.tibia.com/community/?subtopic=characters&name=$char->name\">";
echo $char->name." ";
echo "</a>";
echo level($char->name)."<b> ";
echo vocation($char->name)."</b> (<i>";
echo $char->desc." </i>)<br />";
}
}
?>
<br />
<h2 style="color:red">Offline enemies</h2>
<?php
foreach ($arr as $char) {
if($char->rank==0){
echo "<a style=\"color:red\" href=\"http://www.tibia.com/community/?subtopic=characters&name=$char->name\">";
echo $char->name." ";
echo "</a>";
echo level($char->name)."<b> ";
echo vocation($char->name)."</b> (<i>";
echo $char->desc." </i>)<br />";
}
}
?>
$q1=mysql\u查询(“从isara中选择*);
而($r1=mysql\u fetch\u数组($q1)){
$named=$r1['name'];
$idd=$r1['id'];
$descd=$r1['desc'];
$online=在线检查($named);
$char=新字符($r1['name']、$r1['id']、$r1['desc']);
如果($online==“online”){
$char->rank=$i++;
}
否则{
$char->rank=0;
}
$arr[]=$char;
}
?>
网上敌人
离线敌人
正如我在评论中所写,获取页面一次,而不是为数据库中的每个名称获取一次
我的评论的伪代码:
users = <get users from database>
webpage = <get webpage contents>
for (user in users)
<check if user exists in webpage>
用户=
网页=
for(用户中的用户)
正如您在评论中提到的,您正在为数据库中的每个条目调用一个网页,假设每次调用大约2秒,这将大大降低您的速度
为什么不调用该页面一次,并将其内容作为参数传递到check_online()函数中,这样您的代码看起来会像这样,从而将其速度提高很多数量级:
$content=file_get_contents("http://www.tibia.com/community/?subtopic=worlds&world=Isara",0);
$q1=mysql_query("SELECT * FROM isara");
while($r1=mysql_fetch_array($q1)){
$named=$r1['name'];
$idd=$r1['id'];
$descd=$r1['desc'];
$online=check_online($named,$content);
$char = new Character($r1['name'],$r1['id'],$r1['desc']);
if($online == "online"){
$char->rank = $i++;
}
else{
$char->rank = 0;
}
$arr[] = $char;
}
?>
<br />
<h2 style="color:green">Online enemies</h2>
<?php
foreach ($arr as $char) {
if($char->rank>=1){
echo "<a style=\"color:green\" href=\"http://www.tibia.com/community/?subtopic=characters&name=$char->name\">";
echo $char->name." ";
echo "</a>";
echo level($char->name)."<b> ";
echo vocation($char->name)."</b> (<i>";
echo $char->desc." </i>)<br />";
}
}
?>
<br />
<h2 style="color:red">Offline enemies</h2>
<?php
foreach ($arr as $char) {
if($char->rank==0){
echo "<a style=\"color:red\" href=\"http://www.tibia.com/community/?subtopic=characters&name=$char->name\">";
echo $char->name." ";
echo "</a>";
echo level($char->name)."<b> ";
echo vocation($char->name)."</b> (<i>";
echo $char->desc." </i>)<br />";
}
}
?>
您还可以执行以下操作以加快速度
您应该避免在SQL查询中使用distinct(*)关键字
有关更多信息,请阅读此检查联机方法的外观如何?
函数检查联机($name){$count=substr\u count($name,”);如果($count>0){$ex=explode(“,$name);$namez=$ex[1];$nameused=$namez;}否则{$nameused=$name;}$content=文件获取内容(“http://www.tibia.com/community/?subtopic=worlds&world=Isara",0);如果(preg_match(“/$nameused/”,$content)){$status=“online”}否则{$status=“offline”}返回$status;}
对,那么您为数据库中的每个名称获取完全相同的页面?取一次,对照多次,就行了!我觉得自己很愚蠢!谢谢它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO。
function check_online($name,$content){
$count=substr_count($name, " ");
if($count > 0){ $ex=explode(" ",$name); $namez=$ex[1]; $nameused=$namez; }
else{ $nameused=$name; }
if(preg_match("/$nameused/",$content)){ $status="online"; }
else{ $status="offline"; }
return $status;
}