Asked Jan 21st, 5:55 AM 230 0 3
  • 230 0 3
0

Tại sao website viết bằng laravel có thời gian TTFB khá cao trên 2 giây

Share
  • 230 0 3

Mình lấy dữ liệu qua ajax phương thức GET. Kiểm tra trên F12 của chrome thì thời gian TTFB khá cao: 2.5 s.-> Như vậy xác định nguyên nhân do server. Tuy nhiên khi kiểm tra debuger thì thời gian query dữ liệu trên server chỉ 4.65ms. Vậy cả nhà giải đáp giúp mình TTFB cao do đâu ạ. Bình thường TTFB chỉ 80-90ms chứ nhỉ? Dưới đây là code của mình. Ajax

$(document).ready(function() {
    $(".btn-search-order").click(function() {
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $.ajax({
            type: 'GET',
            url: '/search/month=' + $("#search_month option:selected").val()+'/status='+ $("#search_status option:selected").val() +'/item_name='+ $("#myInput").val(),
            dataType: 'json',
            success: function(data) {
                console.log(data);
            }
        });
    });
});

Route

<?php

use Illuminate\Support\Facades\Route;
Route::get('/history', [
	'as' => 'Nhat-Ky-su-dung',
	'uses' => '[email protected]',
	'middleware' => 'auth']);
Route::get('/report',[
	'uses' => '[email protected]',
	'middleware' => 'auth'])->name('GetReport');
Route::get('/user', [
	'as' => 'Khach-hang',
	'uses' => '[email protected]',
	'middleware' => 'auth']);
Route::get('/role',[
   'middleware' => 'role:superadmin',
   'uses' => '[email protected]',
]);
Route::get('/', [ 'uses' => '[email protected]', 'as' => 'orders.index','middleware' => 'auth']); 
Route::get('/order', [ 'uses' => '[email protected]', 'as' => 'orders.index','middleware' => 'auth']); 
Route::group(['prefix' => 'order', ], function () { 
    Route::get('/{id}', [ 'uses' => '[email protected]', 'as' => 'orders.show',]); 
    Route::post('', [ 'uses' => '[email protected]', 'as' => 'orders.store',]); 
    Route::put('/{id}', [ 'uses' => '[email protected]', 'as' => 'orders.update',]); 
    Route::delete('/{id}', [ 'uses' => '[email protected]', 'as' => 'orders.destroy',]);  
});
Route::get('/search/month={month}/status={status}/item_name={item_name}',[ 'uses' => '[email protected]_order', 'as' => 'orders.search_order',]);
Route::get('/payments', [ 'uses' => '[email protected]', 'as' => 'payments.index','middleware' => 'auth']); 
Route::group(['prefix' => 'payments', ], function () { 
    Route::get('/{id}', [ 'uses' => '[email protected]', 'as' => 'payments.show',]); 
    Route::post('', [ 'uses' => '[email protected]', 'as' => 'payments.store',]); 
    Route::put('/{id}', [ 'uses' => '[email protected]', 'as' => 'payments.update',]); 
    Route::delete('/{id}', [ 'uses' => '[email protected]', 'as' => 'payments.destroy',]); 
});
Route::get('/exchange-rates', [ 'uses' => '[email protected]', 'as' => 'ExchangeRates.index','middleware' => 'auth']); 
Route::group(['prefix' => 'exchange-rates', ], function () { 
    Route::get('/{id}', [ 'uses' => '[email protected]', 'as' => 'ExchangeRates.show',]); 
    Route::post('', [ 'uses' => '[email protected]', 'as' => 'ExchangeRates.store',]); 
    Route::put('/{id}', [ 'uses' => '[email protected]', 'as' => 'ExchangeRates.update',]); 
    Route::delete('/{id}', [ 'uses' => '[email protected]', 'as' => 'ExchangeRates.destroy',]); 
});
Auth::routes();

Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Orders;
use App\User;
use App\order_historys;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;

class OrdersController extends Controller
{
    public function index(Request $request)
    {
        if(Auth::user()->type==1){
            $orders = DB::table('Orders')
                ->join('Users','Orders.user_id','=','Users.id')
                ->select('Orders.*','Users.name')
                ->orderby('created_at','desc')
                ->get();
            return view('Admin.Orders.Order_index')->with('orders',$orders);
        }
        else{
            $orders = DB::table('Orders')
            ->join('Users','Orders.user_id','=','Users.id')
            ->select('Orders.*','Users.name')
            ->where('user_id', '=', Auth::user()->id)
            ->orderby('created_at','desc')
            ->get();
            return view('Admin.Orders.Order_index_user')->with('orders',$orders);
        }
    }

    public function store(Request $request)
    {
        $validator = Validator::make($request->input(), array(
            'item_name' => 'required',
        ));

        if ($validator->fails()) {
            return response()->json([
                'error'    => true,
                'messages' => $validator->errors(),
            ], 422);
        }
        $orders = new orders();
        if(Auth::user()->type!=1){
            $orders->user_id = Auth::user()->id;
        }
        else{
            $orders->user_id = 1;
        }
        $orders->status = 0;
        $orders->item_name = $request->get('item_name');
        $orders->quantity = $request->get('quantity');
        $orders->price = $request->get('price');
        $orders->link_order = $request->get('link_order');
        $orders->memo = $request->get('memo');
        $orders->total_amount = $request->get('price')*$request->get('quantity');
        $orders->amount_oc = $request->get('price')*$request->get('quantity')*3450;
        $orders->save();

        // $order_historys = new order_historys();
        // $order_historys->order_id = 

        return response()->json([
            'error' => false,
            'orders'  => $orders,
        ], 200);
    }

    public function show($id)
    {
        // $orders = Orders::find($id);
        // $orders = DB::table('orders')
        // ->where('id','=',$id)
        // ->get();
        return response()->json([
            'error' => false,
            'orders'  => $orders,
        ], 200);
    }

    public function update(Request $request, $id)
    {
        $validator = Validator::make($request->input(), array(
            'item_name' => 'required',
        ));
        $status = orders::find($id)->status;
        if ($validator->fails()) {
            return response()->json([
                'error'    => true,
                'messages' => $validator->errors(),
            ], 422);
        }
        $orders = orders::find($id);
        $orders->status = $request->get('status');
        $orders->bill = $request->get('bill');
        $orders->item_name = $request->get('item_name');
        $orders->link_order = $request->get('link_order');
        $orders->kg = $request->get('kg');
        $orders->quantity = $request->get('quantity');
        $orders->price = $request->get('price');
        $orders->total_amount = $orders->quantity*$orders->price;
        $orders->amount_oc = $orders->quantity*$orders->price*3450;
        $orders->memo = $request->get('memo');
        $orders->save();
        return response()->json([
            'error' => false,
            'orders'  => $orders,   
        ], 200);
    }

    public function destroy($id)
    {
        $orders = Orders::destroy($id);

        return response()->json([
            'error' => false,
            'orders'  => $orders,
        ], 200);
    }
    public function search_order($month, $status, $item_name)
    {
        $orders = DB::table('Orders')
        ->whereMonth('created_at', '=', $month)
        ->where('status','=',$status)
        ->orderby('created_at','desc')
        ->get();
        return response()->json([
            'error' => false,
            'orders'  => '$orders',
        ], 200);
    }   
}

3 ANSWERS


Answered Jan 21st, 5:58 AM
Accepted
0

do logic của bạn nữa, thời gian query là một chuyện, nhưng mà logic trong hàm đó của bạn phức tạp, nhiều vòng for, phải lọc từ một array quá lớn nhiều lần,... Sẽ đều dẫn tới việc thời gian response lâu

Share
Avatar tây nhóc @Nhoztay
Jan 21st, 6:02 AM

Trong controller em viết đơn giản lắm. Em chỉ 1 câu query theo id và return về dạng json thôi ạ

0
| Reply
Share
Avatar Dương Mạnh Hoàng @duong.manh.hoang
Jan 21st, 6:11 AM

@Nhoztay còn logic nào xung quoanh k bạn, vì nếu chạy trên local thì chắc chắn sẽ không bị ảnh hưởng bởi đường truyền mạng, chênh lệch giữa thời gian query và response sẽ chỉ tính bằng ms thôi chứ chênh cả vài giây có vẻ hơi lạ

0
| Reply
Share
Avatar tây nhóc @Nhoztay
Jan 21st, 2:33 PM

@duong.manh.hoang Em có up code ajax, router, controller. Anh xem qua giúp em với ạ

0
| Reply
Share
Avatar Lê Vĩnh Thiện @le.vinh.thien
Jan 30th, 2:16 PM

@Nhoztay Kiểm tra dữ liệu $orders có nhiều ko? có thể khi json encode có vđ khiến nó xử lý lâu.

0
| Reply
Share
Answered Jan 22nd, 1:37 AM
0
  • Dùng curl/ postman để test Ajax xem như thế nào (không cần thông qua trình duyệt), nếu Ajax nhanh mà khi chạy ở trình duyệt chậm thì có thể là do nguyên nhân sau: HTTP 1/1 giới hạn 6 request lên server cùng lúc khi ở browser, nếu trước khi gọi ajax search mà bạn , bạn đã request gọi img, css, js, hoặc các ajax khác thì request thứ 7 sẽ phải chờ.
Share
Avatar Phạm Huy @phhuy38
Jan 26th, 10:55 AM

Còn do server nữa bạn ơi.

0
| Reply
Share
Answered Jan 28th, 8:34 AM
0

Tốc độ trung bình ổn định là đc, cái vấn đề First content này mình thử nhiều version rồi ko có cải thiện đc. Nó là kiểu sống chung với lũ rồi.

Share
Viblo
Let's register a Viblo Account to get more interesting posts.