我想问你是否知道如何提高PHP整洁功能的性能?
目前正是这样使用它:
while($ds = mysql_fetch_assoc($qry))
{
$tidy = tidy_parse_string($ds['description']);
$html = tidy_parse_string($tidy, array('show-body-only'=>true, 'indent'=>true));
$sql = "UPDATE tbl_*** SET description = '".mysql_real_escape_string($html)."' WHERE id = '".mysql_real_escape_string($ds2['id_artikel'])."'";
sql4query($sql);
$allerr = $allerr + tidy_error_count($tidy);
$allwar = $allwar + tidy_warning_count($tidy);
$msg .= $ds['id'].":\n".$tidy->errorBuffer."\n\n\n";
}
但它太慢了,拥有超过1000万个数据集。
答案 0 :(得分:1)
正如其他评论已经说过的那样,可能没有合理的方法让整洁的扩展更快地完成其工作。
问题是,我需要清理一次这些记录。新的将通过插入数据库进行清理。
所以我们谈论了多少“旧”记录 - 数千,数万,......?
如果你无法完成“一气呵成”(cronjob,没有执行时间限制,在维护阶段“过夜”运行) - 那么另一种方法是单独完成每个记录,一次 - 当它是“需要”第一次。
向表中添加一列still_needs_to_be_cleaned
或其他内容,并为所有现有记录设置为true / 1。插入新记录时,只需将其设置为false / 0。
现在,当请求记录时(由网站的访问者或其他人),你检查标志still_needs_to_be_cleaned
是否仍然设置为true - 如果是,你让整齐的运行在该单个记录上,然后在数据库中更新它 - 在执行此操作时将still_needs_to_be_cleaned
设置为false。
如果记录已将still_needs_to_be_cleaned
设置为false - 则不需要整理操作且无需更新,您可以立即继续输出该记录。
是的,这对于第一个请求某个记录的用户来说意味着很小的延迟 - 但很可能,如果有的话,几乎不会引起注意。
如果您愿意,您甚至可以不时检查有多少记录仍然将still_needs_to_be_cleaned
标志设置为true。如果没有剩下,你可以再次删除那个额外的逻辑。