关于DomDocument效率的问题

时间:2011-06-12 05:00:14

标签: php mysql insert performance domdocument

注意:这是我正在做的一项练习。

我有一个php程序,它使用DomDocument修改html文档;通过ID插入,删除或编辑元素。程序完成后,输出文档供用户查看。

包含插入值的SQL表仅被排序/用于提供应该在新元素之前的元素。例如根据指定的列值,它找到新元素之前的元素,并在其后插入新元素。

基本上我要问的是这种方法与将所有元素存储在数据库中然后每次重新创建(各种)html文件相比有多高效。

附带问题:我想保存每个元素的“历史记录”。我应该为每个特定元素(例如a234历史)制作一个新表格,还是有更好的方法来解决这个问题?

编辑:

代码段:

警告;意大利面条代码。

    if ($sortby=='newest')
        $query2=mysql_query("SELECT comnum FROM comments WHERE replynum='$x' AND newest <  '$new' ORDER BY newest DESC LIMIT 1");
    else
       $query2=mysql_query("SELECT comnum FROM comments WHERE replynum='$x' AND popularity <  '$random' ORDER BY popularity DESC LIMIT 1");
    $query1= mysql_fetch_object($query2);
    $query=$query1->comnum;
    echo $query;
    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->loadHTML(file_get_contents($sortby.".html"));
    $ap=$doc->createElement('span', "<p class='comm'><b>".$_POST['poster']."</b><span class='reply'> Popularity: ".$random." Post Number:".$data."<a href='javascript:reply(".$data.")'>Reply</a></span><br/>".$_POST['comments']."</p><div class='comm1' id='".$data."'></div>");
    $ap->setAttribute('id',$data.'a');
    if ($query!=false) {
       $query.='a';
       $doc->getElementById($x)->insertBefore($ap, $doc->getElementById($query));
        echo $x;
    }
    else {
         $doc->getElementById($x)->appendChild($ap);
        }
    mysql_close($don);
    $we= $doc->saveHTML();
    $we = preg_replace("/<!DOCTYPE [^>]+>/",'',$we);
    $we = str_replace('<html><body>', '', $we);
    $we = str_replace('</body></html>', '', $we);
    file_put_contents($sortby.".html",htmlspecialchars_decode($we));
    if ($_POST['order']==$sortby)
        echo htmlspecialchars_decode($we);

表格结构:

字段类型
comnum int(255)
username varchar(255)
评论文本
replynum int(255)
人气int(255)
最新的int(255)

没有指定编码。

2 个答案:

答案 0 :(得分:0)

如果我理解正确的话,你基本上是在管理HTML文档的缓存,这些文档在数据库信息被更改时会被更改。 这样做的目的是尝试实现文档已经存在于用户,并且不需要为它们重新创建。

如果上面写的是正确的,那么它是否是一种有效的方法取决于数据的读写比率。 如果每次更新都有1000次访问,那么您的方法可能比为每次访问创建文档更有效。

要了解您需要实现的读/写的确切比率才能被认为是有效的,您必须运行测试。

答案 1 :(得分:0)

作为替代方法,您还可以提供静态缓存的html,并将脚本本地化与JSViews / JSRender / Static结合使用,以使用restful api提供变量。