>  기사  >  PHP 프레임워크  >  Yii 프레임워크의 데이터 페이징: 데이터 표시 최적화

Yii 프레임워크의 데이터 페이징: 데이터 표시 최적화

WBOY
WBOY원래의
2023-06-21 13:51:05941검색

인터넷의 급속한 발전으로 인해 데이터는 점점 더 빠르게 증가하고 있습니다. 웹 애플리케이션에서 데이터 페이징은 사용자 경험을 향상시키는 데 필요한 도구 중 하나입니다. Yii 프레임워크에서는 데이터 페이징을 쉽게 구현할 수 있습니다. 이 글에서는 Yii 프레임워크의 데이터 페이징과 데이터 양이 많을 때 데이터 표시를 최적화하는 방법을 소개합니다.

1. Yii 프레임워크의 데이터 페이징

1.1 페이징 클래스

Yii 프레임워크에서 페이징 기능은 CPagination 클래스에 캡슐화되어 있습니다. CPagination 클래스는 다음과 같은 일반적인 메소드를 제공합니다.

  • setPageVar: 페이징 매개변수 이름을 설정합니다. 기본값은 'page'입니다.
  • getPageCount: 총 페이지 수를 가져옵니다.
  • getLimitOffset: LIMIT.. . OFFSET... 문을 가져옵니다.
  • getPages: 페이징 HTML 코드를 가져옵니다.
  • 1.2 CPagination 사용

페이지에 표시해야 하는 10,000개의 데이터가 있는 사용자 모델 User가 있다고 가정합니다. 먼저 UserController의 actionIndex 메소드에서 CPagination 개체를 인스턴스화해야 합니다.

$pagination = new CPagination(10000);

그런 다음 각 페이지의 데이터 양을 설정할 수 있습니다.

$pagination->pageSize = 20;

또는 기본값 사용:

$pagination->pageSize = Yii::app()->user->pageSize;

다음으로 현재 페이지 번호를 계산해야 합니다.

$pagination- >setCurrentPage($_GET['page']);

마지막으로 현재 페이지 번호와 각 페이지의 데이터 양을 기반으로 표시할 데이터를 가져와야 합니다.

$users = User ::model()->findAll (array(

'limit' => $pagination->getLimit(),
'offset' => $pagination->getOffset(),

));

마지막으로 페이징 HTML 코드를 얻으려면 뷰 파일에서 getPages 메서드도 사용해야 합니다.

dc6dce4a544fdca2df29d5ac0ea9906b

<?php $this->widget('CLinkPager', array(
    'pages' => $pagination,
)); ?>

16b28748ea4df4d9c2150843fecfba68

2. 데이터 표시 최적화

데이터 양이 많은 경우 기존 페이징 방식을 사용하면 페이지 로딩 속도가 느려지고 사용자 경험이 저하될 수 있습니다. 데이터 표시를 최적화하는 두 가지 방법은 다음과 같습니다.

2.1 Ajax 페이징

Ajax 페이징을 사용하면 페이지를 전환할 때마다 전체 페이지를 새로 고치는 문제를 피할 수 있습니다. 사용자가 페이징 링크를 클릭하면 업데이트가 필요한 부분만 업데이트하라는 Ajax 요청이 전송되어 페이지 새로고침 속도가 크게 향상됩니다.

$pagination = new CPagination(10000);

$pagination->pageSize = 20;

$pagination->setCurrentPage($_GET['page']);

$this->render('index' , array(

'users' => User::model()->findAll(array(
    'limit' => $pagination->getLimit(),
    'offset' => $pagination->getOffset(),
)),
'pagination' => $pagination,

));

뷰 파일에서는 yii-ajax-linkpager-widget을 사용하여 CLinkPager 컨트롤을 대체합니다. 사용자가 페이징 링크를 클릭하면 Ajax를 사용하여 데이터를 업데이트합니다.

d44d5cbb027ad62f803fefd2a6a7996a

<?php $this->renderPartial('_userlist', array('users' => $users)); ?>

16b28748ea4df4d9c2150843fecfba68

fa0d42a2f72d3537a1056757e28847bc

<?php $this->widget('ext.yii-ajax-linkpager-widget.EAjaxLinkPager', array(
    'ajaxUpdate' => 'userlist',
    'pages' => $pagination,
)); ?>

d4e6ef3935d870d31c81823c096b9b03

_controller 폴더에서 이 메소드의 페이징 요청을 처리하기 위해 actionPage 메소드를 추가해야 합니다.

public function actionPage()

{

// 处理分页请求,返回分页数据
$pagination = new CPagination(10000);
$pagination->pageSize = 20;
$pagination->setCurrentPage($_GET['page']);

$users = User::model()->findAll(array(
    'limit' => $pagination->getLimit(),
    'offset' => $pagination->getOffset(),
));

$this->renderPartial('_userlist', array('users' => $users));

}

2.2 페이징 데이터 캐시

페이징 캐시 캐시 서버에 데이터를 캐싱하면 페이징 성능이 크게 향상될 수 있습니다. 사용자가 페이징 데이터를 요청하면 먼저 캐시 서버에 캐시된 데이터가 있는지 확인하고, 캐시된 데이터가 있으면 직접 반환하고, 그렇지 않으면 데이터베이스에 쿼리하여 캐시 서버에 데이터를 저장한 후 데이터를 반환합니다.

Yii 프레임워크에서 제공하는 캐싱 메커니즘을 사용할 수 있습니다. 페이징 데이터를 캐시하려면 컨트롤러의 actionIndex 메서드에서 COutputCache를 사용하세요.

public 함수 actionIndex()

{

// 缓存时间为10分钟
$cacheId = __CLASS__.__METHOD__.md5(Yii::app()->user->id);
$cacheTime = 10*60;

if(!$this->beginCache($cacheId, array(
    'duration' => $cacheTime,
)))
{
    $pagination = new CPagination(10000);
    // ...
    $users = User::model()->findAll(array(
        'limit' => $pagination->getLimit(),
        'offset' => $pagination->getOffset(),
    ));

    $this->render('index', array(
        'users' => $users,
        'pagination' => $pagination,
    ));

    $this->endCache();
}

}

사용자가 페이징 데이터를 요청할 때 캐시 서버에 캐시된 데이터가 있으면 캐시된 데이터가 직접 반환됩니다. ; 그렇지 않으면 데이터베이스를 쿼리하고 데이터를 캐시 서버에 저장한 후 반환합니다.

요약하자면 Yii 프레임워크의 데이터 페이징 기능은 구현하기 쉽고 다양한 최적화 방법을 지원하므로 웹 애플리케이션의 사용자 경험을 크게 향상시킬 수 있습니다. 데이터의 양이 적든 많든 상관없이 데이터 페이징을 쉽게 구현할 수 있습니다.

위 내용은 Yii 프레임워크의 데이터 페이징: 데이터 표시 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.