구현 는 컨텐츠 유형과 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는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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