回显大量 HTML 数据需要很长时间 PHP

Posted

技术标签:

【中文标题】回显大量 HTML 数据需要很长时间 PHP【英文标题】:Echoing large amount of HTML datas takes much time PHP 【发布时间】:2017-06-24 20:52:15 【问题描述】:

我有 15k 的 JSON 产品需要用 php 处理,如果我 var_dump 数组我没有问题。 如果我将 JSON 数据减少到 1000-1500,则需要 1/2 秒,而由两个执行一些 jquery 操作的按钮组成的用户界面需要几秒钟。 问题很明显,当我传递所有数据(15k)时,显示 html 页面需要 40/50 秒,如果我单击按钮它们不起作用。

这就是我所做的: 从外部 URL 获取 JSON,(没问题)。 使用 AJAX(POST) 将 JSON 传递给 PHP,(没问题)。 在 PHP 文件中获取字符串,在数组中编码字符串并处理每个数据,在 data_processing 没问题后,我将数据回显为

<? 
   echo'<div class="myclass" id="myid">';
   echo'<input type="hidden" value="somedatas">';
   echo'<input type="text" name="'.$json[$_POST["SOMEDATA"]].'" value="somedatas">";
   ....
?>

有没有更好的方法来做到这一点?我还尝试将display:none 设置为主 div,但没有任何更改。

更新 我忘记了通过,php echo 被转回 ajax 请求并附加到 div

这是我在单击确认按钮后用于一一处理数据的脚本

        echo'<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function()
    $("#close_tab_prw").click(function()
         document.getElementById("prd_prw_tab").innerHTML = ""; //reset div
         $("#prd_prw").css("display","none");
       $("#container_others").css("opacity","1");
); 
     $("#update_all_items").click(function()
        var prd_number = $("input[name=prd_max_number]").val();
        for(var i = 0; i < prd_number; i++)
            var string_ok = "#confirm_form_prd_";
            string_ok = string_ok.concat(i);
            var dataString = $(string_ok).serialize();
             $.ajax( 
        type: "POST",
        url: "';echo $dir; echo'",
        data: dataString,
        success: function(data) 
            console.log(data);
            $("#prd_prw_tab").html(data);
        
            );
        
    );
     $("#disable_img").click(function()
        $(".img_check").prop("checked", false);
    );
     $("#allow_img").click(function()
        $(".img_check").prop("checked", true);
    );
     $("#disable_desc").click(function()
        $(".n_desc_chk").prop("checked", false);
    );
     $("#allow_desc").click(function()
        $(".n_desc_chk").prop("checked", true);
    );


    );

</script>';

这是我用来展示产品的主要功能:

$(document).ready(function()
 $("#get_json_btn").click(function()


        document.getElementById("unique_json_return").innerHTML = ""; //reset div

        if(document.getElementById('url_json').value != "") 
            $.getJSON(document.getElementById('url_json').value , function(result)
            $.each(result, function(i, field)
                $("#unique_json_return").append(JSON.stringify(result));
            )
        )
        .fail(function()  alert('getJSON request failed, see tips '); )
        
       else 
            alert("No Url insrted, please, insert your JSON url");
         
    );
 $("#update_products").click(function()
      new_height = "";
    $( window ).resize(function() 
        $("#prd_prw").css("height", $(window).height()-(20*$(document).height()/100));
    );
      new_height = $(window).height()-(20*$(document).height()/100);
      $("#prd_prw").css("height", new_height);
     $("#prd_prw").css("display","block");
       $("#container_others").css("opacity","0.3");

    var entire_json = document.getElementById('unique_json_return').innerText;
    var one = document.getElementsByName('one')[0].value;
    var two = document.getElementsByName('two')[0].value;
    ...
    var ten = document.getElementsByName('ten')[0].value;


    if(entire_json == "") 
        alert("Invalid or Empty JSON response");
    
    else
                $.ajax(
   url: '<?echo $dir; ?>',
   data: entire_json : entire_json, one:one, two:two, three:three,...ten:ten
    ,
   type: 'POST',
   success: function(data) 
   document.getElementById("unique_json_return").innerHTML = ""; //reset div
    $("#prd_prw_tab").append(data);

       
);
    
);
);

【问题讨论】:

您不需要将 html 显式回显到页面。 this question has some good information 你的回声没有用。添加您正在解释的代码。我们比您的话更了解代码。这可能是 javascript 解析器问题(使用低性能 PC),也可能是 PHP 的错误编码。我们不知道。 这是一个非常大的代码.. @MarcosPérezGude 在不完全理解您的问题的情况下,考虑对结果集进行分页。见***.com/questions/3705318/… @AndreaLoda *** 的规则说你需要附上一个最小的、完整的和可验证的例子,而不是整个代码。查看更多:How to ask || MCVE 【参考方案1】:

您需要多久解析一次这 15k 产品?

如果只是偶尔执行,仅在后端执行,没有最终用户会经历 50 秒的等待,我会容忍它,直到您可以将其拆分为单独的服务(可能不是 PHP)。

如果这是在最终用户交互之后发生的事情,我会重新审视整个设计,并确保没有任何单一的用户操作会导致解析 15k 个对象的全部内容。

【讨论】:

怎么样?你能举个例子吗? 如果你能告诉我更多关于你想要达到的目标的细节,我会很高兴。这 15k 个对象是什么,为什么它们都需要一次处理,需要多久处理一次,这项任务的最终目标是什么? 我正在发送 15k 个对象,其中包含一些对象的详细信息,我正在使用 AJAX 从 URL 中获取 JSON 格式,然后我将它们单击带有另一个 AJAX 请求的按钮(如上面更新的那样)传递给 php文件,处理它们,逐个分析每个数据并打印它们,我需要立即处理它们,因为当数据(在处理结束时)传递回成功函数时,ajax 打印它们,用户可以修改他们使用 然后用一个按钮处理另一个 ajax 请求到另一个 PHP 函数,该函数一个一个地处理每个项目并存储它们。 嗯,为什么每次都需要一次处理 15k?你不能将它们转储到数据库中,然后针对它运行查询吗?如果由于来自该 URL 的 15k 记录响应可能会发生变化而无法做到这一点,那么是否没有更具体的方式从该源查询数据?每次都需要提取所有数据,然后处理其中的子部分,这似乎是一个设计缺陷。只抓住你需要的东西。 整个问题是执行,但我认为你的具体问题是javascript。我在主要的 cmets 上说过。

以上是关于回显大量 HTML 数据需要很长时间 PHP的主要内容,如果未能解决你的问题,请参考以下文章

删除大量记录需要很长时间

长时间 AJAX 请求后未找到 404

Opencart 注册需要很长时间

PHP页面需要很长时间才能加载

需要 PHP 逐行处理的 CSV 需要很长时间(或超时)才能进入 SQL 数据库

MYSQL 对 4000 万条记录表和 128GB 内存的专用服务器进行大量更新需要很长时间