最佳实践PHP表单操作

时间:2010-04-10 10:02:58

标签: php forms refresh

您好我已经构建了一个新脚本(从头开始而不是CMS),我已经做了很多工作来减少内存使用量和页面显示所需的时间(缓存HTML等)

但有一件事我不确定。举一个带有评论部分的文章的简单例子。

如果评论表单发布到另一个页面然后重定向回文章页面,我将不会遇到人们点击刷新并重新发送信息的问题。

但是,如果我这样做,我必须加载我的脚本两次使用两倍的内存,它需要两倍的时间,而我仍然只显示一次页面。

以下是我的加载日志中的示例。文章的第一次加载来自缓存,第二次加载评论后发布页面。


示例1

在0.018667中使用650856字节内存的

0查询 - domain.com/article/1/my_article.html

在0.075825中使用1325723字节内存的9个查询 - domain.com/article/1/my_article/newcomment.html

在0.029449中使用650856字节的内存进行

0查询 - domain.com/article/1/my_article.html

示例2

在0.023526中使用650856字节内存的

0查询 - domain.com/article/1/my_article.html

在0.060032中使用1659096字节内存的9个查询 - domain.com/article/1/my_article.html


显然时间波动所以你无法真正地比较它。但正如你可以看到的第一种方法,我使用更多内存,加载时间更长。

但第一种方法可以避免刷新问题。

有没有人对最佳方法有任何建议,或者有其他方法可以避免额外的负载(尽管很小但我仍然想避免它),同时也避免了刷新问题?

3 个答案:

答案 0 :(得分:0)

优化工作总是值得称赞,但在这种特定情况下,我发现在几秒内保存一些查询和一些RAM没有任何好处。绝对可以使用示例1(或者从编程,维护和用户体验的角度来看最好)。

我不知道你的服务器设置和所有那些因此判断运行时间和内存消耗总是主观的,但你似乎做得很好。看看Wordpress,其中普通脚本实例(至少在后端,没有测量前端)的重量在6到12 MB之间。不要担心太多关于优化。

答案 1 :(得分:0)

我认为你的问题比想象的更真实。车轮增加了汽车整体重量的重量。拆下轮子是否明智?我不这么认为。根据{{​​3}},您应该进行重定向。所以,如果你这样做,你别无选择。

另一种可能的解决方案是使用AJAX发送评论,就像SO一样。这样可以节省宝贵的重装费用:)

答案 2 :(得分:0)

使用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}
    )}
); 
});