구현 는 컨텐츠 유형과 URL을 기반으로 응답을 자동으로 캐시 할 수있는 표준 호출을 캡슐화하여 캐시 메커니즘을 보편적으로 만듭니다.
네트워크 요청을하기 전에 세션 스토리지에서 캐시 히트 처리 및 구식 데이터 사용을 피하기 위해 만료 된 컨텐츠 관리가 포함되어 있습니다.
fetch api
-
이 시점에서 Fetch에 익숙해야합니다. 이전 XMLHTTPREQUEST API를 교체하기위한 브라우저의 새로운 기본 API입니다.
- Fetch를 사용할 수 있습니까? https://www.php.cn/link/b751ea087892ebeca363034301f45c69 웹 사이트의 메인 브라우저의 Fetch 기능에 대한 지원에 대한 데이터.
-
모든 브라우저가 완벽하게 구현되지는 않는 경우 GitHub의 Fetch PolyFill을 사용할 수 있습니다 (하루 종일 아무것도하지 않는 경우 여기에 페치 표준 사양이 있습니다). -
다운로드해야 할 리소스를 정확히 알고 있고 한 번만 다운로드하려고한다고 가정 해 봅시다. 다음과 같이 글로벌 변수를 캐시로 사용할 수 있습니다. cachedFetch
코드 펜 예fetch
이것은 캐시 된 데이터를 보유하기위한 전역 변수에만 의존합니다. 직접적인 문제는 페이지를 다시로드하거나 새 페이지로 이동하면 캐시 된 데이터가 사라집니다. -
cachedFetch
코드 펜 예 - 두 번째 문제는이 솔루션이 특정 URL 및 특정 캐시 된 데이터 스 니펫에 매우 구체적이라는 것입니다 (이 예의 주요 정보). 우리가 원하는 것은 보편적 인 URL 기반 솔루션입니다.
첫 번째 구현 - 간단하게 유지하십시오 약속을 반환하는 페치 주변의 래퍼를 만들어 봅시다. 이를 호출하는 코드는 결과가 네트워크에서 또는 로컬 캐시에서 상관없이 신경 쓰지 않을 수 있습니다.
그러니이 작업을 수행했다고 상상해보십시오
코드 펜 예이제 중복 네트워크 통화가 로컬 캐시의 혜택을받을 수 있도록 래핑하려고합니다. 단순히 CachedFetch라고 부르겠습니다. 코드는 다음과 같습니다. 처음 실행되면 네트워크를 통해 요청을 구문 분석하고 결과를 캐시에 저장해야합니다. 두 번째는 로컬 스토리지에서 직접 추출해야합니다. 단순히 Fetch 함수를 래핑하는 코드부터 시작하겠습니다. 코드 펜 예 이것은 작동하지만 물론 작동하지 않습니다. 먼저 추출 된 데이터의 저장을 구현합시다. let origin = null; fetch('https://httpbin.org/get') .then(r => r.json()) .then(information => { origin = information.origin; // 您的客户端IP }); // 需要延迟以确保fetch已完成 setTimeout(() => { console.log('您的来源是 ' + origin); }, 3000);
코드 펜 예여기에는 할 일이 많이 있습니다. Fetch가 반환 한 첫 번째 약속은 실제로 GET 요청을 계속 수행합니다. CORS (Cross-Origin 리소스 공유)에 문제가있는 경우 .text (), .json () 또는 .blob () 메소드가 작동하지 않습니다. 가장 흥미로운 특징은 첫 번째 약속으로 반응 한 응답 객체를주목해야 할 또 다른 것은 응답 유형을 신중하게 처리하는 것입니다. 상태 코드가 200
인 경우에만 응답을 저장하고 콘텐츠 유형은 Application/JSON 또는 Text/*입니다. SessionStorage는 텍스트 만 저장할 수 있기 때문입니다.fetch('https://httpbin.org/get') .then(r => r.json()) .then(info => { sessionStorage.setItem('information', JSON.stringify(info)); }); // 需要延迟以确保fetch已完成 setTimeout(() => { let info = JSON.parse(sessionStorage.getItem('information')); console.log('您的来源是 ' + info.origin); }, 3000);
다음은 그것을 사용하는 방법의 예입니다. 지금 까지이 솔루션에 대한 영리한 것은 JSON 및 두 번째 구현 - 실제 반환 캐시 히트 따라서 따라서 첫 번째 구현은 요청의 응답을 저장하는 책임입니다. 그러나 두 번째로 CachedFetch를 호출하는 경우에도 SessionStorage fetch('https://httpbin.org/get') .then(r => r.json()) .then(issues => { console.log('您的来源是 ' + info.origin); });
매우 기본적인 구현으로 시작합시다 : 실제로 작동하는 방법을 확인하려면이 코드의 코드펜을 열고 개발자 도구에서 브라우저의 "네트워크"탭을 엽니 다. 실행 버튼을 몇 번 눌러 (코드펜의 오른쪽 상단)를 누르면 네트워크를 통해 이미지 만 반복적으로 요청하는 것을 볼 수 있습니다. 이 솔루션의 영리성 중 하나는 "콜백 파스타"의 부족입니다. SessionStorage.getItem 호출은 동기식 (즉, 차단)이므로 "현지 스토리지에 있습니까?" 그리고 콘텐츠가있는 경우에만 캐시 된 결과를 반환합니다. 그렇지 않은 경우 IF 문은 일반 코드 만 계속 실행합니다.
세 번째 구현 - 만료 시간은 어떻습니까? 지금까지 우리는 SessionStorage를 사용하고 있습니다. LocalStorage와 같습니다. 새 탭을 시작할 때 SessionStorage가 지워집니다. 즉, 캐시 시간을 너무 길게 피하기 위해 "자연스러운 방법"을 활용하고 있음을 의미합니다. 대신 LocalStorage를 사용하고 무언가를 캐시하면 원격 콘텐츠가 변경된 경우에도 항상 거기에 갇히게됩니다. 더 나은 솔루션은 user
를 제어하게하는 것입니다. (이 경우 사용자는 캐시드 페치 기능을 사용하는 웹 개발자입니다). 서버 측의 Memcached 또는 Redis 스토리지와 마찬가지로 캐시를 얼마나 오래 지정하는 평생을 설정할 수 있습니다.예를 들어, 파이썬에서 (플라스크 사용) :
이제 SessionStorage 나 LocalStorage에는이 기능이 내장되어 있지 않으므로 수동으로 구현해야합니다. 저장된 시간의 타임 스탬프를 항상 기록하고 가능한 캐시 히트를 비교하여이를 수행합니다. 그러나 우리가 이것을하기 전에 어떻게 생겼습니까? 예를 들면 : 우리가 추가 할 주요 새로운 것은 응답 데이터를 저장할 때마다 저장할 때 그래서 이것은 우리의 궁극적 인 작업 솔루션입니다 : let origin = null; fetch('https://httpbin.org/get') .then(r => r.json()) .then(information => { origin = information.origin; // 您的客户端IP }); // 需要延迟以确保fetch已完成 setTimeout(() => { console.log('您的来源是 ' + origin); }, 3000);
미래의 실현 - 더 좋고, 더 화려하고, 쿨러 우리는 이러한 웹 API를 과도하게 액세스하는 것을 피할뿐만 아니라 LocalStorage가 종속 네트워크보다 훨씬 빠르다는 것입니다. LocalStorage vs. XHR : localforage vs. XHR 그렇다면 솔루션을 어떻게 더 개선합니까? 처리 바이너리 응답 여기에서 구현은 텍스트가 아닌 컨텐츠 (예 : 이미지)를 캐시하지 않지만 캐시 할 이유가 없습니다. 더 많은 코드가 필요합니다. 특히 Blob에 대한 자세한 정보를 저장할 수 있습니다. 각 응답은 기본적으로 블로브입니다. 텍스트와 json의 경우, 그것은 단지 다양한 문자열 일뿐입니다. 문자열 자체에서 추론 할 수 있으므로 유형과 크기는 중요하지 않습니다. 이진 함량의 경우 블로브를 Arraybuffer로 변환해야합니다. 호기심 많은 사람들의 경우 이미지를 지원하는 구현 확장을 보려면이 코드펜을 확인하십시오.
사용 해시 캐시 키 를 사용하십시오 또 다른 잠재적 개선은 각 URL (키로 사용)을 더 작게 해제하여 속도를위한 공간을 거래하는 것입니다. 위의 예에서는 매우 작고 간결한 URL (예 : httpbin.org/get) 만 사용하지만 URL이 매우 길면 쿼리 문자열 컨텐츠가 많고 이러한 URL이 많이 있습니다. , 그러면 그들은 많은 것을 더할 것입니다. 이 문제에 대한 해결책은 안전하고 빠른 것으로 간주되는이 영리한 알고리즘을 사용하는 것입니다.
이 마음에 들면이 코드 펜을 확인하십시오 : [https://www.php.cn/link/946af35555203afdb63e571b873e419f6]. 웹 콘솔에서 스토리지를 확인하면 557027443과 비슷한 키가 표시됩니다. 마지막 것은이 프로토 타입의 자연스러운 확장 일 수 있습니다. 캐싱의 중요성은 Ajax 요청을 가져 오는 것의 중요성은 무엇입니까? 캐싱 페치 된 Ajax 요청은 웹 애플리케이션의 성능을 향상시키는 데 중요합니다. 브라우저는 서버 응답 사본을 저장하여 동일한 요청을 다시 할 필요가 없습니다. 이렇게하면 서버의로드가 줄어들고 웹 페이지의로드 시간을 가속화하여 더 나은 사용자 경험을 제공합니다. Fetch API는 캐시와 어떻게 작동합니까? Fetch API는 HTTP 요청을 할 수있는 강력하고 유연한 방법을 제공합니다. 요청이 캐시와 상호 작용하는 방법을 지정할 수있는 내장 캐싱 메커니즘이 포함되어 있습니다. 캐시 모드를 각각 다른 수준의 캐시 제어를 갖는 각각 다른 수준의 캐시 제어를 갖는 "기본", "없음", "다시로드", "없음", "포스 캐시"또는 "만 IF 캐시"로 설정할 수 있습니다.
Fetch API의 다른 캐시 모드는 무엇이며 무엇을 의미합니까? Fetch API는 여러 캐시 모드를 제공합니다. "기본"은 표준 HTTP 캐싱 규칙을 따릅니다. "없음"은 캐시를 완전히 우회합니다. "Reload"는 캐시 된 데이터를 무시하고 새로운 요청을 보냅니다. "No-Cache"는 캐시 버전을 사용하기 전에 서버를 사용하여 데이터를 확인합니다. "Force-Cache"는 신선도에 관계없이 캐시 된 데이터를 사용합니다. "Only-IF 캐칭"은 캐시 데이터를 사용할 수있는 경우에만 사용합니다. 그렇지 않으면 실패합니다. ajax 요청에서 캐시를 구현하는 방법은 무엇입니까? AJAX 설정에서 캐시 속성을 설정하여 AJAX 요청에서 캐시를 구현할 수 있습니다. true로 설정되면 브라우저가 응답을 캐시 할 수 있습니다. 또는 Fetch API의 캐시 옵션을 사용하여 캐시의 동작을 더 잘 제어 할 수 있습니다. ajax 요청에서 캐시를 방지하는 방법은 무엇입니까? AJAX 요청의 캐싱을 방지하려면 AJAX 설정에서 캐시 속성을 False로 설정할 수 있습니다. 이렇게하면 브라우저가 캐시에 응답을 저장하지 않도록합니다. 또는 Fetch API의 "No-Store"캐싱 옵션을 사용하여 캐시를 완전히 우회 할 수 있습니다.
Ajax와 Fetch API의 캐싱의 차이점은 무엇입니까? Ajax와 Fetch API가 모두 캐싱 메커니즘을 제공하지만 Fetch API는 유연성과 제어력이 향상됩니다. Ajax의 캐시 속성은 캐시를 허용하거나 허용하지 않는 간단한 부울 값입니다. 반면, Fetch API의 캐시 옵션을 사용하면 요청이 캐시와 상호 작용하는 방법을 지정하여보다 세분화 된 제어를 제공 할 수 있습니다. 캐싱은 내 웹 애플리케이션의 성능에 어떤 영향을 미칩니 까? 캐시는 웹 응용 프로그램의 성능을 크게 향상시킬 수 있습니다. 서버 응답 사본을 저장하면 브라우저가 다시 동일한 요청을 할 필요가 없습니다. 이렇게하면 서버의로드가 줄어들고 웹 페이지의로드 시간을 속도를 높입니다. 그러나 사용자가 최신 컨텐츠를 볼 수 있도록 캐시를 올바르게 관리해야합니다.
단일 AJAX 요청의 캐시 동작을 제어 할 수 있습니까? 예, 각 요청의 AJAX 설정에서 캐시 속성을 설정하여 단일 AJAX 요청의 캐시 동작을 제어 할 수 있습니다. 이를 통해 브라우저가 응답을 캐시 해야하는지 여부를 지정할 수 있습니다.
ajax 요청의 캐시를 지우는 방법은 무엇입니까? ajax 설정에서 캐시 속성을 False로 설정하여 Ajax가 요청한 캐시를 지우십시오. 이렇게하면 브라우저가 캐시에 응답을 저장하지 않도록합니다. 또는 Fetch API의 "Reload"캐시 옵션을 사용하여 캐시 된 데이터를 무시하고 새 요청을 보낼 수 있습니다. Ajax 요청을 캐싱하기위한 모범 사례는 무엇입니까? AJAX 요청을위한 일부 모범 사례에는 다음이 포함됩니다. 다양한 캐시 모드 이해 및 사용시기, 캐시를 올바르게 관리하여 사용자가 최신 컨텐츠를 볼 수 있도록 캐시 API의 캐시 옵션을 사용하여 캐시를보다 잘 제어합니다. 캐싱 전략을 결정할 때 데이터 및 사용자 경험의 특성도 고려해야합니다.
위 내용은 캐시 페치 된 Ajax 요청이 로컬로 요청됩니다 : Fetch API를 포장합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript 문자열 교체 방법 및 FAQ에 대한 자세한 설명 이 기사는 JavaScript에서 문자열 문자를 대체하는 두 가지 방법 인 내부 JavaScript 코드와 웹 페이지의 내부 HTML을 탐색합니다. JavaScript 코드 내부의 문자열을 교체하십시오 가장 직접적인 방법은 대체 () 메소드를 사용하는 것입니다. str = str.replace ( "find", "replace"); 이 메소드는 첫 번째 일치 만 대체합니다. 모든 경기를 교체하려면 정규 표현식을 사용하고 전역 플래그 g를 추가하십시오. str = str.replace (/fi

이 튜토리얼은 사용자 정의 Google 검색 API를 블로그 또는 웹 사이트에 통합하는 방법을 보여 주며 표준 WordPress 테마 검색 기능보다보다 세련된 검색 경험을 제공합니다. 놀랍게도 쉽습니다! 검색을 Y로 제한 할 수 있습니다

그래서 여기 당신은 Ajax라는이 일에 대해 배울 준비가되어 있습니다. 그러나 정확히 무엇입니까? Ajax라는 용어는 역동적이고 대화식 웹 컨텐츠를 만드는 데 사용되는 느슨한 기술 그룹을 나타냅니다. 원래 Jesse J에 의해 만들어진 Ajax라는 용어

이 기사 시리즈는 2017 년 중반에 최신 정보와 새로운 예제로 다시 작성되었습니다. 이 JSON 예에서는 JSON 형식을 사용하여 파일에 간단한 값을 저장하는 방법을 살펴 봅니다. 키 값 쌍 표기법을 사용하여 모든 종류를 저장할 수 있습니다.

손쉬운 웹 페이지 레이아웃에 대한 jQuery 활용 : 8 에센셜 플러그인 jQuery는 웹 페이지 레이아웃을 크게 단순화합니다. 이 기사는 프로세스를 간소화하는 8 개의 강력한 JQuery 플러그인을 강조합니다. 특히 수동 웹 사이트 생성에 유용합니다.

핵심 포인트 JavaScript에서는 일반적으로 메소드를 "소유"하는 객체를 말하지만 함수가 호출되는 방식에 따라 다릅니다. 현재 객체가 없으면 글로벌 객체를 나타냅니다. 웹 브라우저에서는 창으로 표시됩니다. 함수를 호출 할 때 이것은 전역 객체를 유지하지만 객체 생성자 또는 그 메소드를 호출 할 때는 객체의 인스턴스를 나타냅니다. call (), apply () 및 bind ()와 같은 메소드를 사용 하여이 컨텍스트를 변경할 수 있습니다. 이 방법은 주어진이 값과 매개 변수를 사용하여 함수를 호출합니다. JavaScript는 훌륭한 프로그래밍 언어입니다. 몇 년 전,이 문장은있었습니다

JQuery는 훌륭한 JavaScript 프레임 워크입니다. 그러나 어떤 도서관과 마찬가지로, 때로는 진행 상황을 발견하기 위해 후드 아래로 들어가야합니다. 아마도 버그를 추적하거나 jQuery가 특정 UI를 달성하는 방법에 대해 궁금한 점이 있기 때문일 것입니다.

이 게시물은 Android, BlackBerry 및 iPhone 앱 개발을위한 유용한 치트 시트, 참조 안내서, 빠른 레시피 및 코드 스 니펫을 컴파일합니다. 개발자가 없어서는 안됩니다! 터치 제스처 참조 안내서 (PDF) Desig를위한 귀중한 자원


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

드림위버 CS6
시각적 웹 개발 도구
