Лучшая практика PHP Form Action - PullRequest
1 голос
/ 10 апреля 2010

Привет! Я создал новый скрипт (с нуля, а не CMS) и проделал большую работу по сокращению использования памяти и времени, необходимого для отображения страницы (кеширование HTML и т. Д.)

Есть одна вещь, в которой я не уверен, хотя. Возьмите простой пример статьи с разделом комментариев.

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

Однако, если я делаю это таким образом, мне приходится загружать свой сценарий в два раза, используя вдвое больше памяти, и это занимает вдвое больше времени, пока я все еще отображаю страницу только один раз.

Вот пример из моего журнала загрузки. Первая загрузка статьи из кеша, вторая перестраивает страницу после публикации комментария.


Пример 1

0 запросов с использованием 650856 байт памяти в 0.018667 - domain.com/article/1/my_article.html

9 запросов с использованием 1325723 байтов памяти в 0.075825 - domain.com/article/1/my_article/newcomment.html

0 запросов с использованием 650856 байт памяти в 0.029449 - domain.com/article/1/my_article.html

Пример 2

0 запросов с использованием 650856 байт памяти в 0,023526 - domain.com/article/1/my_article.html

9 запросов с использованием 1659096 байт памяти в 0.060032 - domain.com/article/1/my_article.html


Очевидно, что время колеблется, поэтому вы не можете это сравнить. Но, как видно из первого метода, я использую больше памяти, и загрузка занимает больше времени.

НО первый метод позволяет избежать проблемы обновления.

Есть ли у кого-нибудь предложения по поводу наилучшего подхода или альтернативных способов избежать дополнительной нагрузки (допустимо минимальной, но я бы все же хотел ее избежать), в то же время избегая проблемы обновления?

Ответы [ 3 ]

0 голосов
/ 10 апреля 2010

Я считаю вашу проблему более воображаемой, чем реальной. Колеса добавляют вес к общему весу автомобиля. Было бы разумно снять колеса? Я так не думаю. Согласно стандарту вы должны сделать перенаправление. Так что, если вы сделаете это таким образом, у вас нет другого выбора.

Другое возможное решение - использовать AJAX для отправки комментария, как это делает SO. Это спасло бы вас от этой драгоценной перезагрузки:)

0 голосов
/ 10 апреля 2010

Используйте AJAX! Проверьте форму любовных писем в нижнем колонтитуле здесь: http://www.flatmaterooms.co.uk

HTML

<form id="feedback" method="post" action="#">
    <fieldset>
        <h3>Have comments? Feedback? <span id="feedback_status"></span></h3>
    <textarea name="feedback_body" id="feedback_body" class="placeholder" rows="10" cols="50">Send us your comment...</textarea>

    <div id="feedback_submit">
        <button type="submit">Send &rarr;</button>

        <div id="feedback_optional">
            <label for="feedback_email">Your email address (optional)</label>
            <input type="text" name="feedback_email" id="feedback_email" />
        </div>

        <input type="hidden" name="feedback_url" id="feedback_url" value="<?=$_SERVER['REQUEST_URI']?>" />
    </div>
    </fieldset>
</form>

JQuery

$(document).ready(function(){   function feedback() {
    var a = $("#feedback_body").val();
    if(a) {
        $("#feedback_status").show();
        $("#feedback_status").html("Sending...");
        $("#feedback_submit button").attr("disabled", "disabled").addClass("disabled").removeClass("default").blur();
        $.ajax( {
            type : "POST", url : "/feedback.php", data : {
                feedback_body  : a,
                feedback_email : $("#feedback_email").val(),
                feedback_url   : $("#feedback_url").val(),
                feedback_save  : true
            }
            , error : function(b, d, c) {
               $("#feedback_status").html("Whoops!")}
            , success : function(b, c) {
               $("#feedback_status").html("Success! Thanks.")}
            }
    )}
}

$(function() {
    var b = $("#feedback_body");
    var a = b.val();
    b.click(function() {
        if($(this).val() == a) {
           $(this).removeClass("placeholder").val("");
           $("#feedback_submit").show()}
        }
    );
    $("form#feedback").submit(function() {
       feedback(); return false}
    )}
); 
});
0 голосов
/ 10 апреля 2010

Усилия по оптимизации всегда заслуживают похвалы, но в этом конкретном случае я вижу нулевую выгоду в сохранении нескольких запросов и некоторого объема ОЗУ в течение нескольких секунд. Обязательно перейдите к примеру 1 (или к тому, что лучше с точки зрения программирования, обслуживания и взаимодействия с пользователем).

Я не знаю о настройке вашего сервера и обо всем этом, поэтому оценка времени выполнения и потребления памяти всегда субъективна, но, похоже, у вас все хорошо. Посмотрите на Wordpress, где средний экземпляр скрипта (по крайней мере в бэкэнде, не измеривший фронтенд) весит от 6 до 12 МБ. Не беспокойтесь слишком много об оптимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...