웹 프론트엔드 JS 튜토리얼 Ajax 비새로 고침 페이징을 위한 성능 최적화 방법

Ajax 비새로 고침 페이징을 위한 성능 최적화 방법

May 25, 2018 am 11:39 AM
ajax 최적화 성능

이 글은 Ajax non-refresh paging의 성능 최적화 방법에 대한 관련 정보를 주로 소개하고 있으니 필요하신 분들은 참고하시면 됩니다.

Ajax non-refresh paging은 이미 누구에게나 친숙한 페이지일 것입니다. 웹 프런트엔드 페이지.js 메서드에서 Ajax를 통해 서버측 페이징 데이터 인터페이스를 요청하고, 데이터를 가져온 후 다음과 유사하게 페이지에 html 구조를 생성하고 사용자에게 표시합니다.

<script type=”text/javascript”>
function getPage(pageIndex){
ajax({
url:” RemoteInterface.cgi”,
method:”get”,
data:{pageIndex:pageIndex},
callback:callback
});
}
function callback(datalist){
//todo:根据返回的datalist数据创建html结构展现给用户。
}
</script>
로그인 후 복사

그 중 RemoteInterface.cgi는 서버 터미널 인터페이스입니다. 여기서는 공간이 제한되어 있으며 관련 예제 코드는 단지 의미를 명확하게 표현하기 위해 완전하지 않을 수 있습니다.

UI에는 모두에게 친숙한 다양한 스타일의 페이징 컨트롤이 있을 수 있습니다. (pageIndex) here ) 메서드를 사용하는 경우 이 getPage 메서드는 그렇게 간단하지 않을 수 있습니다.

코드 조각 1이 작성된 방식을 따른다면 사용자가 페이지를 넘기기 위해 클릭할 때마다 RemoteInterface.cgi가 한 번 요청될 것이라고 상상할 수 있습니다. 처음을 제외하고 이후에는 데이터 업데이트 가능성을 무시합니다. getPage( 1), getPage(2), getPage(3) 등에 의해 트리거되는 원격 인터페이스 요청과 네트워크를 오가는 데이터 트래픽은 실제로 반복적이고 불필요합니다. 이 데이터는 각 페이지가 처음으로 요청될 때 어떤 형태로든 페이지에 캐시될 수 있습니다. 사용자가 이전에 넘겼던 페이지를 다시 살펴보는 데 관심이 있는 경우 getPage 메소드는 먼저 로컬 캐시에 페이지가 포함되어 있는지 확인해야 합니다. 그렇다면 원격 인터페이스를 호출하는 대신 사용자에게 직접 다시 표시됩니다. 이 아이디어에 따르면 코드 조각 1을 다음과 같이 수정할 수 있습니다.

<script type=”text/javascript”>
var pageDatalist={};
function getPage(pageIndex){
if(pageDatalist[pageIndex]){ //如果本地的数据列表中包含当前请求页码的数据
showPage(pageDatalist[pageIndex])//直接展现当前数据
}
else
{
ajax({
url:” RemoteInterface.cgi”,
method:”get”,
data:{pageIndex:pageIndex},
callback:callback
});
}
}
function callback(pageIndex,datalist){
pageDatalist[pageIndex]= datalist; //缓存数据
showPage(datalist);//展现数据
}
function showPage(datalist){
//todo:根据返回的datalist数据创建html结构展现给用户。
}

</script>
로그인 후 복사

이렇게 하면 네트워크 요청의 왕복 시간이 절약되고 더 중요한 것은 귀중한 네트워크 트래픽을 절약하고 인터페이스에 대한 부담을 줄일 수 있습니다. 섬기는 사람. 네트워크 속도가 낮은 환경이나 인터페이스 서버의 운영 압력이 이미 상대적으로 높은 경우, 이러한 필요한 개선은 분명한 최적화 효과를 보여줄 수 있습니다. 야후의 유명한 34가지 규칙 중 첫 번째는 HTTP 요청 수를 최소화하는 것입니다. Ajax 비동기 요청은 의심할 여지없이 http 요청 범위 내에 있습니다. 트래픽이 적은 웹 애플리케이션이 불필요하게 느껴질 수도 있지만, 하루에 천만 명이 방문하고, 사용자가 평균 5페이지를 넘기며, 한 페이지가 반복해서 조회되는 페이지가 있다고 상상해 보세요. 그런 다음 코드 조각 1이 작성된 방식에 따라 이러한 페이지는 하루 평균 5천만 개의 데이터 요청을 트리거하고 코드 조각 2가 작성된 방식에 따라 하루 평균 최소 1천만 개의 요청을 줄일 수 있습니다. . 1회 요청되는 데이터량이 20kb라면 1,000만 * 20kb = 200,000,000kb, 즉 약 190G의 네트워크 트래픽을 절약할 수 있습니다. 이런 방식으로 절약된 자원은 상당히 상당합니다.

계속해서 더 자세히 알아보고 싶다면 코드 조각 2의 데이터 캐싱 방법에 대해 논의해 볼 가치가 있습니다. 이전에는 페이징 데이터의 적시성을 무시할 수 있다고 가정했지만 실제 애플리케이션에서는 적시성이 피할 수 없는 문제입니다. 캐싱은 의심할 바 없이 적시성 감소로 이어질 것입니다. 실제 캐싱 솔루션은 또한 애플리케이션의 적시성 요구 사항에 대한 분석과 절충에 의존해야 합니다.

일반적으로 적시성을 강조하지 않는 콘텐츠의 경우 페이지 캐싱은 허용됩니다. 첫째, 사용자가 페이지 간에 이동하고 다시 로드하는 경우 업데이트된 콘텐츠를 얻을 수 있습니다. 데이터. 또한, 사용자가 페이지를 새로 고치는 습관이 있는 경우, 특히 목록에 데이터 업데이트가 있는지 확인하고 싶을 때 페이지를 새로 고치도록 선택할 수 있습니다. 완벽함을 추구한다면 5분 등의 시간 범위를 설정하는 것도 고려해 볼 수 있습니다. 사용자가 현재 페이지에 5분 이상 머물렀다면 5분 이내에 페이지를 넘기면 먼저 페이지의 캐시를 읽고, 5분 후에 페이지를 넘기면 서버 데이터를 다시 요청하게 됩니다.

경우에 따라 데이터 업데이트 일수 등 데이터 업데이트 빈도를 예측할 수 있다면 로컬 저장소를 사용하여 일정 기간 후에 서버 데이터 요청을 트리거하는 것도 고려할 수 있습니다. 요청 수와 트래픽에 더 나은 영향을 미칠 것입니다. 물론 어떤 캐싱 방식이 적합한지는 궁극적으로 제품의 적시성 요구 사항에 따라 다르지만, 특히 방문 횟수가 많은 페이지의 경우 요청과 트래픽을 최대한 줄이는 것이 원칙입니다.

적시성 요구 사항이 높은 데이터 유형의 경우 캐싱이 전혀 부적절하지 않습니까? 물론 그렇지는 않지만 전반적인 아이디어가 바뀌어야 합니다. 일반적으로 소위 변경이란 주로 목록의 데이터가 증가, 감소 또는 변경되었지만 대부분의 데이터는 변경되지 않았음을 의미할 수 있습니다. 대부분의 경우 위에서 언급한 설정은 일정 기간 동안 캐싱에 계속 적용됩니다.

데이터의 실시간 업데이트에 가까운 요구 사항이 있는 경우 20초마다 getPage(pageIndex) 메서드를 실행하고 목록을 다시 그리는 등 타이머를 사용하는 것을 쉽게 생각할 수 있습니다. 그러나 1,000만 페이지 방문이라는 이전 가정을 생각하는 한 이는 의심할 여지 없이 매우 무서운 일이라는 것을 알게 될 것입니다. 이 방문 수와 재시도 빈도로 인해 서버는 큰 압박을 받고 있습니다. 이 상황을 어떻게 처리할지에 대해서는 Gmail, 163 Mailbox 및 Sina Mailbox가 메일링 리스트 페이지를 어떻게 처리하는지 살펴보시기 바랍니다. 이는 매우 큰 일일 방문 수, 데이터 요구 사항의 실시간 업데이트 등 이전 가정을 거의 동시에 충족합니다. 네트워크 패킷 캡처 도구로 분석해 보면 사용자가 동일한 페이지 번호에 대해 반복적으로 데이터를 요청할 때 서버에 요청을 하지 않는다는 것을 알아내는 것은 어렵지 않습니다. 메시지 업데이트 시 사용자에게 적시에 알림을 보내고 메일링 목록이 업데이트되도록 하기 위해 예약되고 반복되는 비동기 요청을 사용할 수 있지만 이 요청은 목록을 새로 고치는 대신 상태 쿼리만 수행합니다. 메시지 업데이트가 있는 상태를 얻은 경우에만 업데이트된 데이터를 얻기 위한 요청이 시작되거나, 업데이트가 발견되면 상태 쿼리 인터페이스가 업데이트된 데이터를 직접 반환합니다. 실제로 163개의 메일함의 정기적인 상태 쿼리 간격은 2분에 한 번 정도로 비교적 길게 설정되어 있습니다. 요청 수. 그러나 이러한 처리 방법은 프런트엔드만으로는 불가능할 수 있으며, 백엔드 인터페이스와 함께 구현 계획을 전체적으로 고려해야 합니다.

이제 다시 돌아가서 코드 2의 데이터 캐싱 방법을 살펴보겠습니다. 이제 더 이상 요청 수와 트래픽 절감에 대해 논의하지 않고, 살펴볼 가치가 있는 것이 있는지 알아보기 위해 프런트 엔드 구현을 살펴보겠습니다. 코드 2에 표시된 처리 방법에 따라 원래 데이터가 저장됩니다. 다시 호출할 때 showPage(datalist)는 사용자에게 표시하기 위해 데이터를 기반으로 다시 html 구조를 재구성해야 하지만 우리는 이러한 생성 과정을 수행했습니다. , 처음으로 구조를 생성할 때 구조를 직접 저장하는 것을 고려할 수 있습니까? 이렇게 하면 js의 반복 계산을 줄일 수 있으며, 특히 구조가 더 복잡할 경우 고려해 볼 가치가 있습니다. 다시 생각해 보세요, 이 구조는 이전에 페이지를 넘길 때 파괴하고 새로운 구조를 생성하는 것도 리소스를 소모합니다. 처음 생성하고 페이지를 넘길 때 파괴하지 않을 수 있습니까? . CSS 스타일을 제어하여 숨깁니다. 페이지를 반복적으로 넘기면 생성된 구조 사이에서 서로 표시하거나 숨기는 것만 제어할 수 있습니다.

마지막으로 여기서 설명하는 방법은 모든 시나리오에 적용할 수는 없지만 영감을 줄 수 있다면 적절한 시기에 한두 가지를 시도해 볼 수 있습니다. 동시에 아이디어가 확산된다면 Refresh-Free 페이징에만 적용되지 않을 수도 있습니다. 여기서 함께 논의해 봅시다.

위 내용은 모두를 위해 제가 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련글 :

firefox 기반 Ajax 이미지 업로드

Ajax 로딩 외부 페이지 팝업 레이어 효과 구현 방법

Ajax 크로스 도메인(기본 도메인 이름 동일) 양식 제출 방법

위 내용은 Ajax 비새로 고침 페이징을 위한 성능 최적화 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

다양한 Java 프레임워크의 성능 비교 다양한 Java 프레임워크의 성능 비교 Jun 05, 2024 pm 07:14 PM

다양한 Java 프레임워크의 성능 비교: REST API 요청 처리: Vert.x가 최고이며 요청 속도는 SpringBoot의 2배, Dropwizard의 3배입니다. 데이터베이스 쿼리: SpringBoot의 HibernateORM은 Vert.x 및 Dropwizard의 ORM보다 우수합니다. 캐싱 작업: Vert.x의 Hazelcast 클라이언트는 SpringBoot 및 Dropwizard의 캐싱 메커니즘보다 우수합니다. 적합한 프레임워크: 애플리케이션 요구 사항에 따라 선택하세요. Vert.x는 고성능 웹 서비스에 적합하고, SpringBoot는 데이터 집약적 애플리케이션에 적합하며, Dropwizard는 마이크로서비스 아키텍처에 적합합니다.

PHP 배열 키 값 뒤집기: 다양한 방법의 성능 비교 분석 PHP 배열 키 값 뒤집기: 다양한 방법의 성능 비교 분석 May 03, 2024 pm 09:03 PM

PHP 배열 키 값 뒤집기 방법의 성능 비교는 array_flip() 함수가 대규모 배열(100만 개 이상의 요소)에서 for 루프보다 더 나은 성능을 발휘하고 시간이 덜 걸리는 것을 보여줍니다. 키 값을 수동으로 뒤집는 for 루프 방식은 상대적으로 시간이 오래 걸립니다.

C++ 프로그램 최적화: 시간 복잡도 감소 기술 C++ 프로그램 최적화: 시간 복잡도 감소 기술 Jun 01, 2024 am 11:19 AM

시간 복잡도는 입력 크기를 기준으로 알고리즘의 실행 시간을 측정합니다. C++ 프로그램의 시간 복잡성을 줄이는 팁에는 데이터 저장 및 관리를 최적화하기 위한 적절한 컨테이너(예: 벡터, 목록) 선택이 포함됩니다. Quick Sort와 같은 효율적인 알고리즘을 활용하여 계산 시간을 단축합니다. 여러 작업을 제거하여 이중 계산을 줄입니다. 불필요한 계산을 피하려면 조건부 분기를 사용하세요. 이진 검색과 같은 더 빠른 알고리즘을 사용하여 선형 검색을 최적화합니다.

PHP 및 Ajax: 자동 완성 제안 엔진 구축 PHP 및 Ajax: 자동 완성 제안 엔진 구축 Jun 02, 2024 pm 08:39 PM

PHP 및 Ajax를 사용하여 자동 완성 제안 엔진 구축: 서버측 스크립트: Ajax 요청을 처리하고 제안을 반환합니다(autocomplete.php). 클라이언트 스크립트: Ajax 요청을 보내고 제안을 표시합니다(autocomplete.js). 실제 사례: HTML 페이지에 스크립트를 포함하고 검색 입력 요소 식별자를 지정합니다.

C++에서 멀티스레드 프로그램의 성능을 최적화하는 방법은 무엇입니까? C++에서 멀티스레드 프로그램의 성능을 최적화하는 방법은 무엇입니까? Jun 05, 2024 pm 02:04 PM

C++ 다중 스레드 성능을 최적화하기 위한 효과적인 기술에는 리소스 경합을 피하기 위해 스레드 수를 제한하는 것이 포함됩니다. 경합을 줄이려면 가벼운 뮤텍스 잠금을 사용하세요. 잠금 범위를 최적화하고 대기 시간을 최소화합니다. 동시성을 향상하려면 잠금 없는 데이터 구조를 사용하세요. 바쁜 대기를 피하고 이벤트를 통해 스레드에 리소스 가용성을 알립니다.

PHP 대 Ajax: 동적으로 로드되는 콘텐츠를 생성하기 위한 솔루션 PHP 대 Ajax: 동적으로 로드되는 콘텐츠를 생성하기 위한 솔루션 Jun 06, 2024 pm 01:12 PM

Ajax(비동기 JavaScript 및 XML)를 사용하면 페이지를 다시 로드하지 않고도 동적 콘텐츠를 추가할 수 있습니다. PHP와 Ajax를 사용하면 제품 목록을 동적으로 로드할 수 있습니다. HTML은 컨테이너 요소가 있는 페이지를 생성하고 Ajax 요청은 로드한 후 요소에 데이터를 추가합니다. JavaScript는 Ajax를 사용하여 XMLHttpRequest를 통해 서버에 요청을 보내 서버에서 JSON 형식의 제품 데이터를 얻습니다. PHP는 MySQL을 사용하여 데이터베이스에서 제품 데이터를 쿼리하고 이를 JSON 형식으로 인코딩합니다. JavaScript는 JSON 데이터를 구문 분석하여 페이지 컨테이너에 표시합니다. 버튼을 클릭하면 제품 목록을 로드하라는 Ajax 요청이 트리거됩니다.

PHP 배열을 객체로 변환하면 성능에 어떤 영향이 있나요? PHP 배열을 객체로 변환하면 성능에 어떤 영향이 있나요? Apr 30, 2024 am 08:39 AM

PHP에서 배열을 객체로 변환하면 성능에 영향을 미치며, 이는 주로 배열 크기, 복잡성, 객체 클래스와 같은 요소의 영향을 받습니다. 성능을 최적화하려면 사용자 지정 반복기 사용, 불필요한 변환 방지, 배열 일괄 변환 및 기타 기술을 고려하세요.

Java 프레임워크의 성능 비교 Java 프레임워크의 성능 비교 Jun 04, 2024 pm 03:56 PM

벤치마크에 따르면 소규모 고성능 애플리케이션의 경우 Quarkus(빠른 시작, 낮은 메모리) 또는 Micronaut(TechEmpower 우수)가 이상적인 선택입니다. SpringBoot는 대규모 풀 스택 애플리케이션에 적합하지만 시작 시간과 메모리 사용량이 약간 느립니다.

See all articles