數據切片操做

當須要操做的數據量過大,須要切片處理
場景:文件上傳,處理數據量大,php處理超時,前端等待時間過長
// 新建data.php
<?php
$page = $_POST['page'] ?? 1;
$size= $_POST['size'] ?? 100;

$totalNum = 500;
$list = "";

for($i= ($page-1) * $size; $i < $page * $size; $i++){
    $list .= $i .", "; 
}
$list = $list ."<hr />";

$status = false;

if( $page*$size <= $totalNum ){
    $status = true;
}
$page = $page + 1;
sleep(1);
// echo "<pre>";
// print_r($list);
// echo "</pre>";exit;

$res = [
    'status'=> $status,
    'page'  => $page,
    'list'  => $list,
];
echo json_encode($res);
前端遞歸調用,後端給跳出條件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h2>數據切片操做</h2>
    <button id="btn">開始執行</button>
    <p class="progress"></p>
    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
    <script>
    function getData($page=1){
        $.post("./data.php",{
            page: $page,
            size:100,
        },
        function(data){
            data = eval("("+data+")");
            if(data.status){
                // console.log( data.page );
                // console.log( data.list );
                $(".progress").append(data.list);
                getData(data.page);
            }else{
                $(".progress").append("\n"+"done");
            }
        });
    }
    $( "#btn" ).on( "click", function() {
        // console.log( $( this ).text() );
        $(".progress").text("Data: ")
        getData()
    });
        
    </script>
</body>

</html>

效果如圖

相關文章
相關標籤/搜索