Вопрос об эффективности DomDocument - PullRequest
2 голосов
/ 12 июня 2011

Примечание. Это то, над чем я работаю в качестве упражнения.

У меня есть программа php, которая изменяет html-документ с помощью DomDocument;вставляя, удаляя или редактируя элемент по идентификатору.Когда программа закончена, она выводит документ для просмотра пользователями.

Таблица 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)
имя пользователя varchar (255)
текст комментария
replynum int (255)
популярность int (255)
newest int (255)

Не указана кодировка.

Ответы [ 2 ]

0 голосов
/ 26 августа 2012

В качестве альтернативного подхода вы также можете использовать статически кэшированный html и использовать локализацию сценариев в сочетании с JSViews / JSRender / Static для доставки ваших переменных с помощью успокоительного API.

0 голосов
/ 16 августа 2011

Если я правильно понимаю, вы в основном управляете кэшем HTML-документов, которые меняются при изменении информации базы данных. Цель этого состоит в том, чтобы попытаться добиться того, чтобы документ уже был доступен для пользователя и его не нужно было создавать заново.

Если написанное выше верно, то эффективный подход или нет, зависит от соотношения чтения и записи для ваших данных. Если на каждое обновление приходится 1000 посещений, то ваш метод, вероятно, более эффективен, чем создание документа для каждого посещения.

Чтобы узнать точное соотношение числа операций чтения / записи, которое необходимо достичь, чтобы оно считалось эффективным, вам нужно будет выполнить тесты.

...