
웹 애플리케이션에서 대규모 데이터세트로 작업할 때 페이지 매김은 성능과 사용자 경험에 매우 중요합니다. 데이터 테이블에 일반적으로 사용되는 표준 오프셋 기반 페이지 매김은 대규모 데이터 세트에는 비효율적일 수 있습니다.
커서 기반 페이지 매김은 특히 실시간 업데이트나 대규모 데이터 로드를 처리할 때 더욱 성능이 좋은 대안을 제공합니다. 이 기사에서는 jQuery DataTable에서 커서 기반 페이지 매김을 구현하는 방법을 안내합니다.
jQuery DataTable에서 커서 기반 페이지 매김을 구현하는 단계
1.환경 설정
페이지 매기기 논리를 살펴보기 전에 다음 사항이 있는지 확인하세요.
나. jQuery
ii. DataTables 플러그인
iii. 커서 기반 페이지 매김을 지원하는 백엔드 API(또는 데이터베이스)
2.백엔드 API 구성
커서 기반 페이지 매김은 필요한 데이터를 반환하기 위해 백엔드에 크게 의존합니다. 다음을 포함하여 JSON 응답을 반환하는 REST API로 작업한다고 가정해 보겠습니다.
데이터: 레코드 배열
커서: 데이터세트의 현재 위치를 나타내는 ID 또는 타임스탬프와 같은 고유 식별자입니다.
다음은 서버에서 페이지를 매긴 응답의 예입니다.
{
"데이터": [
{"id": 101, "name": "John Doe", "email": "
[email protected]"},
{"id": 102, "name": "Jane Smith", "email": "
[email protected]"}
],
"페이지 매김": {
"next_cursor": "eyJpZCI6MTgsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
"prev_cursor": "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6ZmFsc2V9"
}
}
{
"data": [
{"id": 101, "name": "John Doe", "email": "[email protected]"},
{"id": 102, "name": "Jane Smith", "email": "[email protected]"}
],
"pagination": {
"next_cursor": "eyJpZCI6MTgsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
"prev_cursor": "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6ZmFsc2V9"
}
}
3.jQuery DataTable 초기화
DataTable은 jQuery를 사용하여 초기화되고 백엔드 API와 연결됩니다. 기본 구조는 다음과 같습니다.
var ajaxurl = "your-ajax-url";
var oTable = jQuery("#product_list_tbl").DataTable({
preDrawCallback: 함수(설정) {
var dt = jQuery("#product_list_tbl").DataTable();
var 설정 = dt.settings();
if (설정[0].jqXHR) {
설정[0].jqXHR.abort();
}
},
페이징 유형: '간단',
페이지 길이: 9,
서버메소드: "게시",
아약스: {
URL: ajaxurl "?action=search_ids",
데이터: 함수 (d) {
d.search_id = jQuery("#search_id").val();
// 다른 매개변수
}
},
});
{
"data": [
{"id": 101, "name": "John Doe", "email": "[email protected]"},
{"id": 102, "name": "Jane Smith", "email": "[email protected]"}
],
"pagination": {
"next_cursor": "eyJpZCI6MTgsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
"prev_cursor": "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6ZmFsc2V9"
}
}
4.페이지 매김 컨트롤 사용자 정의
var ajaxurl = "your-ajax-url";
var oTable = jQuery("#product_list_tbl").DataTable({
preDrawCallback: 함수(설정) {
var dt = jQuery("#product_list_tbl").DataTable();
var 설정 = dt.settings();
if (설정[0].jqXHR) {
설정[0].jqXHR.abort();
}
},
페이징 유형: '간단',
페이지 길이: 9,
서버메소드: "게시",
아약스: {
URL: ajaxurl "?action=search_ids",
데이터: 함수 (d) {
d.cursor = jQuery("#product_list_tbl").data('current-cursor') || '';
d.search_id = jQuery("#search_id").val();
// 다른 매개변수
}
},
drawCallback: 함수(json) {
const 페이지 매김 = json.json.pagination;
if (pagination.next_cursor) {
jQuery(문서).find('.paginate_button.next').removeClass('disabled');
jQuery(document).find('.paginate_button.next').attr('data-cursor', json.json.pagination.next_cursor ?? '' );
} 또 다른 {
jQuery(문서).find('.paginate_button.next').addClass('disabled');
}
if (pagination.prev_cursor) {
jQuery(문서).find('.paginate_button.previous').removeClass('disabled');
jQuery(document).find('.paginate_button.previous').attr('data-cursor', json.json.pagination.prev_cursor ?? '' );
} 또 다른 {
jQuery(문서).find('.paginate_button.previous').addClass('disabled');
}
},
});
// 페이지 매기기 버튼에 대한 사용자 정의 클릭 핸들러
jQuery(document).on('click', '#product_list_tbl_paginate .paginate_button', function(e) {
e.preventDefault();
e.stopPropagation(); //이벤트가 버블링되는 것을 방지
// 실제로 '다음' 또는 '이전' 버튼인 경우에만 진행합니다.
if (!jQuery(this).hasClass('next') && !jQuery(this).hasClass('previous')) {
반품;
}
var 커서 = jQuery(this).attr('data-cursor');
// 테이블 요소에 직접 커서를 설정합니다.
jQuery("#product_list_tbl").data('현재-커서', 커서);
// 새 커서로 테이블을 다시 로드합니다.
oTable.ajax.reload();
});
// 페이지 매김을 위한 기본 DataTables 클릭 핸들러를 비활성화합니다.
jQuery(document).off('click.DT', '#product_list_tbl_paginate .paginate_button');
{
"data": [
{"id": 101, "name": "John Doe", "email": "[email protected]"},
{"id": 102, "name": "Jane Smith", "email": "[email protected]"}
],
"pagination": {
"next_cursor": "eyJpZCI6MTgsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
"prev_cursor": "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6ZmFsc2V9"
}
}
5.API 및 프런트엔드 동기화 처리
사용자가 다음 또는 이전 버튼을 클릭할 때마다 커서가 업데이트되어 백엔드로 전송됩니다. 백엔드는 현재 커서 위치부터 시작하여 데이터베이스에서 레코드를 가져오고 적절한 데이터 세트를 DataTable에 반환합니다.
요점: 여기를 클릭하세요
결론
커서 기반 페이지 매김은 대규모 데이터 세트 또는 실시간 애플리케이션으로 작업할 때 실용적이고 효율적인 접근 방식입니다. jQuery DataTable에 커서 기반 페이지 매김을 구현하면 성능이 향상되고 사용자 경험이 향상되며 정확한 데이터 처리가 보장됩니다. 이 기술은 빠르고 확장 가능하며 안정적인 데이터 관리를 요구하는 최신 애플리케이션에 특히 유용합니다.
이 가이드가 귀하의 프로젝트에서 커서 기반 페이지 매김을 구현하는 데 도움이 되기를 바랍니다. 즐거운 코딩하세요!