Yêu cầu thg 1 21, 2021 5:55 SA 242 0 3
  • 242 0 3
0

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

Chia sẻ
  • 242 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' => 'PageController@getHistory',
	'middleware' => 'auth']);
Route::get('/report',[
	'uses' => 'PageController@GetReport',
	'middleware' => 'auth'])->name('GetReport');
Route::get('/user', [
	'as' => 'Khach-hang',
	'uses' => 'PageController@getUser',
	'middleware' => 'auth']);
Route::get('/role',[
   'middleware' => 'role:superadmin',
   'uses' => 'MainController@checkRole',
]);
Route::get('/', [ 'uses' => 'OrdersController@index', 'as' => 'orders.index','middleware' => 'auth']); 
Route::get('/order', [ 'uses' => 'OrdersController@index', 'as' => 'orders.index','middleware' => 'auth']); 
Route::group(['prefix' => 'order', ], function () { 
    Route::get('/{id}', [ 'uses' => 'OrdersController@show', 'as' => 'orders.show',]); 
    Route::post('', [ 'uses' => 'OrdersController@store', 'as' => 'orders.store',]); 
    Route::put('/{id}', [ 'uses' => 'OrdersController@update', 'as' => 'orders.update',]); 
    Route::delete('/{id}', [ 'uses' => 'OrdersController@destroy', 'as' => 'orders.destroy',]);  
});
Route::get('/search/month={month}/status={status}/item_name={item_name}',[ 'uses' => 'OrdersController@search_order', 'as' => 'orders.search_order',]);
Route::get('/payments', [ 'uses' => 'PaymentsController@index', 'as' => 'payments.index','middleware' => 'auth']); 
Route::group(['prefix' => 'payments', ], function () { 
    Route::get('/{id}', [ 'uses' => 'PaymentsController@show', 'as' => 'payments.show',]); 
    Route::post('', [ 'uses' => 'PaymentsController@store', 'as' => 'payments.store',]); 
    Route::put('/{id}', [ 'uses' => 'PaymentsController@update', 'as' => 'payments.update',]); 
    Route::delete('/{id}', [ 'uses' => 'PaymentsController@destroy', 'as' => 'payments.destroy',]); 
});
Route::get('/exchange-rates', [ 'uses' => 'ExchangeRatesController@index', 'as' => 'ExchangeRates.index','middleware' => 'auth']); 
Route::group(['prefix' => 'exchange-rates', ], function () { 
    Route::get('/{id}', [ 'uses' => 'ExchangeRatesController@show', 'as' => 'ExchangeRates.show',]); 
    Route::post('', [ 'uses' => 'ExchangeRatesController@store', 'as' => 'ExchangeRates.store',]); 
    Route::put('/{id}', [ 'uses' => 'ExchangeRatesController@update', 'as' => 'ExchangeRates.update',]); 
    Route::delete('/{id}', [ 'uses' => 'ExchangeRatesController@destroy', '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 CÂU TRẢ LỜI


Đã trả lời thg 1 21, 2021 5:58 SA
Đã được chấp nhận
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

Chia sẻ
Avatar tây nhóc @Nhoztay
thg 1 21, 2021 6:02 SA

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 ạ

Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 1 21, 2021 6:11 SA

@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ạ

Avatar tây nhóc @Nhoztay
thg 1 21, 2021 2:33 CH

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

Avatar Lê Vĩnh Thiện @le.vinh.thien
thg 1 30, 2021 2:16 CH

@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.

Đã trả lời thg 1 22, 2021 1:37 SA
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ờ.
Chia sẻ
Avatar Phạm Huy @phhuy38
thg 1 26, 2021 10:55 SA

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

Đã trả lời thg 1 28, 2021 8:34 SA
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.

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí