Tại sao website viết bằng laravel có thời gian TTFB khá cao trên 2 giây
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
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
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 ạ
@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ạ
@duong.manh.hoang Em có up code ajax, router, controller. Anh xem qua giúp em với ạ
@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.
- 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ờ.
Còn do server nữa bạn ơi.
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.