أداء بطيء عند تحميل 537 سجل
عند تحميل الصفحة: 4.34 ثانية
عند ترقيم الصفحات: 3.98 ثانية
"pageLength": 10
هل هناك أي احتمال لتقييد عدد الصفوف في كل صفحة مثل 10 من الاستعلام مقارنة باستخدام ترقيم الصفحات لجدول البيانات ، فسيتم تحميل العشرة الأخرى ... مثل ترقيم الصفحات المدمج في Laravel
ملاحظة: حتى إذا تم تعطيل ترقيم الصفحات ، فلا يزال وقت التحميل 4.34 ثانية
Controller
public function membresData()
{
$membres = Membre::
join('equipes', 'equipes.id', '=', 'membres.equipe_id')
->join('laboratoires', 'laboratoires.id', '=', 'equipes.laboratoire_id')
->join('etablissements as e1', 'e1.id', '=', 'laboratoires.etablissement_id')
->leftjoin('etablissements as e2', 'e2.id', '=', 'membres.etablissement_id')
->leftjoin('profils', 'profils.id', '=', 'membres.profil_id')
->leftjoin('typemembres', 'typemembres.id', '=', 'membres.typemembre_id')
->select ('membres.id','equipes.axe_recherche','laboratoires.libelle','laboratoires.periode_accreditation_dd','laboratoires.periode_accreditation_df','e1.abbreviation as etablab','membres.nom', 'membres.prenom', 'membres.cv', 'membres.sujet', 'e2.abbreviation as etabmem', 'profils.typeprofil', 'membres.cin', 'membres.email','typemembres.typemembre')
->orderBy('axe_recherche', 'asc')
->get();
if(request()->ajax()){
return Datatables::of($membres)
->addColumn('name',
'{{$nom}} {{$prenom}}'
)
->addColumn('cv', function ($membre) {
if ($membre->cv != null){
$url=url("uploadedCvMembre/$membre->etablab/$membre->cv");
return '<div data-provide="photoswipe">
<img class="avatar avatar-sm cursor-pointer" src="'.$url.'" alt="Curriculum vitae de : '.$membre->prenom.' '.$membre->nom.'" data-provide="tooltip" data-original-title="Curriculum vitae" data-tooltip-color="primary" aria-describedby="tooltip946475">
</div> ';
}
})
->addColumn('laboratoire',
'« {{$etablab}} » {{ $libelle }} <small>{{ \Carbon\Carbon::parse($periode_accreditation_dd)->format("Y") }} - {{ \Carbon\Carbon::parse($periode_accreditation_df)->format("Y") }}</small>'
)
->addColumn('action',
'<nav class="nav gap-1 fs-16">
<a class="nav-link disabled hover-warning" data-provide="tooltip" data-tooltip-color="warning" data-original-title="Modifier" href="{{route("membre.edit",$id)}}"><i class="ti-pencil"></i></a>
<form method="POST" action="{{ action("MembreController@destroy", ["id" => $id]) }}" class="delete_form">
<strong i="16">@csrf</strong>
@method("DELETE")
<a class="nav-link disabled hover-danger delete-btn" data-provide="tooltip" data-tooltip-color="danger" data-original-title="Supprimer" href="#"><i class="ti-trash"></i></a>
</form>
</nav>'
)
->rawColumns(['cv','laboratoire','action'])
->make(true);
}else{
abort('404');
}
Js
app.ready(function(){
$("#dtable").dataTable().fnDestroy();
$('#dtable').DataTable({
"columnDefs": [
{ "visible": false, "targets": [0,1] },
{ "orderable": false, "targets": [-1] }
],
"order": [[ 1, 'asc' ]],
processing: true,
serverSide: true,
ajax: '{!! route('membres') !!}',
deferRender: true,
columns: [
{ data: 'laboratoire', name: 'laboratoire' },
{ data: 'axe_recherche', name: 'axe_recherche' },
{ data: 'name', name: 'name' },
{ data: 'cv', name: 'cv', orderable: false, searchable: false },
{ data: 'sujet', name: 'sujet' },
{ data: 'etabmem', name: 'etabmem', orderable: false, searchable: false },
{ data: 'typeprofil', name: 'typeprofil' },
{ data: 'cin', name: 'cin' },
{ data: 'email', name: 'email' },
{ data: 'typemembre', name: 'typemembre' },
{ data: 'action', name: 'action', orderable: false, searchable: false}
],
"drawCallback": function ( settings ) {
$('[data-provide~="tooltip"]').each(function(){var b="";$(this).hasDataAttr("tooltip-color")&&(b=" tooltip-"+$(this).data("tooltip-color")),$(this).tooltip({container:"body",trigger:"hover",template:'<div class="tooltip'+b+'" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'})});
var api = this.api();
var rows = api.rows( {page:'current'} ).nodes();
var last=null;
api.column(0, {page:'current'} ).data().each( function ( group, i ) {
if ( last !== group ) {
$(rows).eq( i ).before(
'<tr class="group bl-3 br-3 border-primary bg-light text-center" ><td class="fw-500" colspan="9">'+group+'</td></tr>'
);
last = group;
}
} );
api.column(1, {page:'current'} ).data().each( function ( group, i ) {
if ( last !== group ) {
$(rows).eq( i ).before(
'<tr class="group bl-3 border-warning bg-light" ><td class="fw-500" colspan="9">Equipe : '+group+'</td></tr>'
);
last = group;
}
} );
}
});
});
استخدم الاستعلام بدلاً من التجميع بإزالة get()
مصدر بياناتك.
>orderBy('axe_recherche', 'asc')
->get(); // remove this line.
yajra شكرا لك حل المشكلة
مرحباً ، هل يمكنك توضيح سبب كون الاستعلام أسرع بكثير من التجميع؟
لأنه يؤدي باقي الوظائف في الاستعلام بدلاً من الحصول على كل نتيجة وبياناتها الفرعية ومحاولة أداء الوظائف على تلك الأقل كفاءة.
وقت الاستجابة بطيء
تحميل الصفحة: 13.40 ثانية
ترقيم الصفحات: 9 ث
مقتطف الرمز
إقراض الوظيفة العامة_return_log_server_side ()
{
$ alluser = Session :: get ('alluser')؛
$ reference = $ this-> database-> getReference ('lending_return_log') -> getSnapshot () -> getValue () ؛
مرجع $ = array_reverse (مرجع $) ؛
بيانات دولار = [] ؛
اسم $ = "" ؛
البريد الإلكتروني $ = "" ؛
foreach (مرجع $ كـ $ lending_return_log) {
// dd ($ lending_return_log ['uid']) ؛
foreach ($ alluser كـ $ key => $ value) {
إذا ($ key == $ lending_return_log ['uid']) {
اسم $ = قيمة دولار ['اسم المستخدم'] ؛
$ email = قيمة $ ['email'] ؛
}
}
$ nestedData ['user_info'] = " ". "
". $ email."
". lending_return_log $ ['lending_log_id'] ؛
$ nestedData ['time_and_trx_id'] = \ Carbon \ Carbon :: parse ($ lending_return_log ['time']) -> تنسيق ('F j، Y، g: i a'). "
". lending_return_log $ ['trxid']." "؛
$ nestedData ['back_amount'] = " " .number_format ($ lending_return_log ['amount_back_nob']، 8). "NOB "؛
$ nestedData ['close_balance'] = " " .number_format ($ lending_return_log ['final_balance_nob']، 8). "NOB "؛
$ nestedData ['nob_price'] = $ lending_return_log ['nob_price_at']. "$"؛
$ nestedData ['urr_return '] = " " .number_format ($ lending_return_log [' return_of_cur ']، 8). "". $ lending_return_log [' cur_type ']. " "؛
$data[] = $nestedData;
}
// $reference = collect($reference);
$finalData = Datatables::of($data)->rawColumns(['user_info', 'time_and_trx_id', 'back_amount', 'closing_balance', 'nob_price', 'curr_return'])->make(true);
return $finalData;
}
(وظيفة() {
$ ('# table'). DataTable ({
المعالجة: صحيح ،
جانب الخادم: صحيح ،
أياكس: '{{url (' project-log-serveride ')}}'،
الأعمدة: [
{data: 'user_info' ، الاسم: 'user_info'} ،
{data: 'time_and_trx_id' ، الاسم: 'time_and_trx_id'} ،
{data: 'back_amount'، الاسم: 'back_amount'}،
{data: 'clos_balance'، name: 'clos_balance'}،
{data: 'nob_price'، الاسم: 'nob_price'}،
{data:'urr_return '، name:'urr_return'}،
]
}) ؛
}) ؛
إصدارات الحزمة
Laravel 5.7
PHP: 7.2
بيانات Laravel: 8.13.7
قاعدة البيانات: NoSql DB (Firebase)
هل يمكنك إرضاء ما هو الخطأ في هذا؟
شكر
تحقق من الفهرسة الخاصة بك
مراقب:
$ trade1 = Tradecum3 :: حيث ('CODE'، Auth :: user () -> ucc_code) -> حيث ('SCPOPT'، '! ='، 'EX') -> حدد ('UNIQUEID'، 'CODE' ، 'TRDATE' ، 'BS' ، 'SCPOPT كـ INSTTYPE' ، 'SCPCODE' ، 'SCPNAME' ، 'DUEDATE' ، 'STRIKERATE' ، 'MKTRATE' ، 'QTY' ، DB :: raw ('ABS (MKTRATE * QTY ) كـ MKTTOTAL ')) ؛
$trade2 = Tradecum2::where('CODE', Auth::user()->ucc_code)->where('SCPOPT', '!=', 'EX')->select('UNIQUEID', 'CODE', 'TRDATE', 'BS', 'SCPOPT as INSTTYPE', 'SCPCODE', 'SCPNAME', 'DUEDATE', 'STRIKERATE', 'MKTRATE', 'QTY', DB::raw('ABS(MKTRATE * QTY) as MKTTOTAL'));
$trade = Tradecum1::where('CODE', Auth::user()->ucc_code)->where('SCPOPT', '=', 'EQ')->select('UNIQUEID', 'CODE', 'TRDATE', 'BS', 'SCPOPT as INSTTYPE', 'SCPCODE', 'SCPNAME', 'DUEDATE', 'STRIKERATE', 'MKTRATE', 'QTY', DB::raw('ABS(MKTRATE * QTY) as MKTTOTAL'))->union($trade1)->union($trade2);
return DataTables::of($trade)
->addColumn('INSTNAME', function ($trade) {
return $trade->SCPNAME."(". $trade->SCPCODE.")";
})
->editColumn('INSTTYPE',function($trade){
if($trade->INSTTYPE == "CE")
return "Call Opt";
else if ($trade->INSTTYPE == "PE")
return "Put Opt";
else if ($trade->INSTTYPE == "CF")
return "Futures(EQ)";
else if ($trade->INSTTYPE == "IF")
return "Futures(INDEX)";
else
return $trade->INSTTYPE;
})
->rawColumns(['INSTNAME'])
->make(true);
رأي:
$ ('# recentTradeTableAll'). DataTable ({
المعالجة: صحيح ،
جانب الخادم: صحيح ،
تدمير: صحيح ،
أياكس: {
url: "{{route ('datatable.trades')}}"،
اكتب: "POST" ،
الرؤوس: {
'X-CSRF-TOKEN': $ ('meta [name = "csrf-token"]'). attr ('content')
} ،
البيانات: الوظيفة (د) {
d.instrumentType = $("input[name='instrumentType']:checked").val();
d.transaction_type = $("input[name='transaction_type']:checked").val();
}
},
columns: [{
data: 'TRDATE',
name: 'TRDATE'
},
{
data: 'BS',
name: 'BS'
},
{
data: 'INSTNAME',
name: 'INSTNAME'
},
{
data: 'STRIKERATE',
name: 'STRIKERATE'
},
{
data: 'INSTTYPE',
name: 'INSTTYPE'
},
{
data: 'DUEDATE',
name: 'DUEDATE'
},
{
data: 'MKTRATE',
name: 'MKTRATE'
},
{
data: 'QTY',
name: 'QTY'
},
{
data: 'MKTTOTAL',
name: 'MKTTOTAL'
}
]
});
get () يقوم بتحميل كافة البيانات ولا يعمل pageLength .. ما سبق يتم تحميل كافة السجلات.
استخدم الاستعلام بدلاً من التجميع بإزالة
get()
مصدر بياناتك.>orderBy('axe_recherche', 'asc') ->get(); // remove this line.
هذا جعل استفساري ينتقل من 20 ثانية إلى أقل من 2. شكرًا لك!
التعليق الأكثر فائدة
استخدم الاستعلام بدلاً من التجميع بإزالة
get()
مصدر بياناتك.