서비스 직원은 환상적인 기술입니다. PWA(Progressive Web Application)라는 용어와 관련하여 이를 알 수 있으므로 일반적으로 브라우저에 표시되는 항목이 OS에 "설치"될 수 있고 기본 애플리케이션처럼 열릴 수도 있고 기본 애플리케이션처럼 제거될 수도 있습니다. 모든 면에서 기본 애플리케이션처럼 보입니다. 하지만 서비스 작업자는 그 이상을 할 수 있습니다.
접근성 및 설명은 여기를 참조하세요.
서비스 워커는 기본적으로 동일한 범위에 있는 URL에서 브라우저가 만든 모든 http 요청을 가로채는 특별한 기능을 갖춘 공유 웹 워커(별도의 기술로 존재)입니다. (원본 경로) 작업자가 등록되었습니다. 그런 다음 구성된 응답이나 캐시된 응답으로 응답하도록 지시할 수 있습니다(실제로 브라우저가 요청으로 네트워크에 접속하는 것을 방지함). 또는 요청을 정상적으로 네트워크에 전달하거나 요청을 수정(가져오기 사용)하여.
즉, 서비스 워커가 오프라인일 때 웹 페이지에 액세스하는 기능과 종종 연관되는 이유는 분명합니다. 처음으로 모든 정적 리소스를 다운로드하고 캐시할 수 있습니다(기본적으로 "설치"). 페이지) 그러면 서비스 워커는 캐시된 버전으로 동일한 요청에 응답할 수 있으며 기본적으로 기본 앱인 것처럼 "애플리케이션 리소스"를 제공할 수 있습니다. dev.to가 그 좋은 예입니다.
이미 단순화한 내용이고 캐시 무효화, 업데이트 및 기타 사항에 대한 이야기는 이 기사의 범위를 벗어나므로 이에 대해서는 다루지 않겠습니다. 제가 이야기할 것은 구성된 응답
을 제공하는 서비스 워커의 능력입니다.조롱 응답
저희 팀은 최근 "쇼케이스" 애플리케이션, 즉 기본적으로 아무 것도 하지 않지만 디자인 시스템에 따라 웹 구성 요소 UI 키트를 사용하는 방법을 보여주는 웹 애플리케이션을 구축하는 임무를 받았습니다. 그리고 코딩 가이드 라인.
이제 텍스트 응답으로 응답하는 것은 매우 간단합니다. JSON도 기본적으로 텍스트이므로 결국 서비스 워커는 다음과 같을 수 있습니다.
이 스니펫이 어떻게 개선될 수 있는지에 대해 지루하게 여기지는 않겠습니다. URL 일치는 URLPattern을 사용할 수 있습니다. 가져오기를 사용하여 정적 데이터를 로드하고 IndexedDB에 저장할 수 있습니다. 그러면 정말 미쳐버릴 것 같아요.
self.addEventListener('fetch', event => { if (event.request.url.includes('/api/hello')) { event.respondWith(new Response( JSON.stringify({ message: 'Hello!' }), { headers: { 'Content-Type': 'application/json' }} ); } else { event.respondWith(fetch(event.request)); } });그렇다면 다른 종류의 동적 반응은 어떨까요? 이미지가 마음에 드시나요?
이미지 생성: "쉬운" 방법.
동적 이미지를 생성하는 가장 쉬운 방법은 기본적으로 XML 문서인 SVG를 만드는 것입니다. 즉, 텍스트입니다. 이는 완전히 실행 가능한 작업이며 D3.js와 같은 라이브러리를 사용하여 SVG 요소와 경로를 생성할 수 있습니다. line() 및 다른 팩토리는
self.addEventListener('fetch', event => { if (event.request.url.includes('/api/hello')) { event.respondWith(new Response( JSON.stringify({ message: 'Hello!' }), { headers: { 'Content-Type': 'application/json' }} ); } else { event.respondWith(fetch(event.request)); } });
SVG를 동적으로 생성하는 것은 메인 스레드에서 작업을 수행하는 데 유용할 수 있으며 결과를 캐시할 수도 있습니다. 이는 차트와 인포그래픽에 적합하며, 충분히 "쉽게" 수행할 수 있습니다.
다른 이미지 유형 생성
더 까다로운 것은 PNG나 JPG와 같은 래스터 이미지를 생성하는 것입니다. "생성"이란 편집 도구를 사용하여 그림을 변경하거나 처음부터 새로 만드는 것을 의미합니다. 이러한 경우 일반적으로 수행하는 작업은
문제는 서비스 워커가 DOM 요소에 접근할 수 없다는 것입니다. 그럼 우리는 운이 없는 걸까요?
걱정하지 마세요, 친구들! 모든 작업자(서비스 작업자 포함)가 OffscreenCanvas 개체를 생성할 수 있기 때문입니다. 생성자에게 너비와 높이를 픽셀 단위로 지정하면 서비스 워커에서 완벽하게 미세한(눈에 보이지는 않지만) 캔버스를 얻을 수 있습니다.
import { pie, arc } from 'd3-shape'; const pieData = pie().sort(null)(data); const sectorArc = arc().outerRadius(35).innerRadius(20); const svg = '<svg viewbox="-40 -40 80 80" xmlns="http://www.w3.org/2000/svg">' + pieData.map((pie, index) => `<path d="${sectorArc(pie)}" fill="${colors[index]}"></path>` ).join('') + '</svg>'; event.respondWith(new Response( svg, { headers: { 'Content-Type': 'image/svg+xml' }} ));
궁금한 분들을 위해 말씀드리겠습니다. 예, 모든 브라우저에서 모든 컨텍스트를 사용할 수 있는 것은 아니지만 다른 유형의 컨텍스트를 얻을 수 있습니다. three.js와 같은 라이브러리를 사용하여 서비스 워커에서 3D 장면을 생성해 볼 수 있습니다(나중에 시도해 볼 것 같습니다).
이제 기본적으로... 무엇이든 할 수 있습니다. 선, 호, 경로 등을 그립니다. 캔버스의 형상도 수정합니다. DOM 캔버스 컨텍스트에 그림을 그리는 것만큼 간단하므로 이 부분은 다루지 않겠습니다.
텍스트 그리기
실제로 텍스트도 쓸 수 있습니다. 이는 다른 환경, 즉 Paint worklet에서는 그렇게 할 수 없기 때문에 중요합니다.
참고: PaintRenderingContext2D는 CanvasRenderingContext2D API의 하위 집합을 구현합니다. 특히 CanvasImageData, CanvasUserInterface, CanvasText 또는 CanvasText DrawingStyles API를 구현하지 않습니다.
그러나 서비스 워커에서는 이 모든 것이 괜찮습니다. 이는 배경 이미지를 생성할 수 있는 더 강력한(비록 성능은 떨어지지만) 환경을 갖추고 있음을 의미합니다.
텍스트 그리기는 다음과 같이 쉽습니다.
const canvas = new OffscreenCanvas(800, 600); const context = canvas.getContext('2d');
여기에서 원하는 글꼴을 사용할 수 있습니다. 하지만 산세리프, 모노스페이스 또는 시스템 UI와 같은 일반적인 표준 값은 모두 기본 글꼴로 돌아가기 때문에 작동하지 않는 것 같습니다. 기본 세리프 글꼴입니다. 하지만 평소처럼 글꼴 스택을 사용할 수 있습니다.
context.fillStyle = '#222'; context.font = '24px serif'; // (x, y) = (50, 90) will be the *bottom left* corner of the text context.fillText('Hello, world!', 50, 90);
또한 Font Loading API를 사용하여 외부 리소스에서 글꼴을 로드할 수 있습니다.
self.addEventListener('fetch', event => { if (event.request.url.includes('/api/hello')) { event.respondWith(new Response( JSON.stringify({ message: 'Hello!' }), { headers: { 'Content-Type': 'application/json' }} ); } else { event.respondWith(fetch(event.request)); } });
애플리케이션으로 다시 보내기
응답을 다시 보내는 것은 Blob이라는 약속을 반환하는 ConvertToBlob 메서드를 호출하는 것만큼 쉽습니다. 그리고 Blob을 보낸 사람에게 쉽게 다시 보낼 수 있습니다.
import { pie, arc } from 'd3-shape'; const pieData = pie().sort(null)(data); const sectorArc = arc().outerRadius(35).innerRadius(20); const svg = '<svg viewbox="-40 -40 80 80" xmlns="http://www.w3.org/2000/svg">' + pieData.map((pie, index) => `<path d="${sectorArc(pie)}" fill="${colors[index]}"></path>` ).join('') + '</svg>'; event.respondWith(new Response( svg, { headers: { 'Content-Type': 'image/svg+xml' }} ));
이 방법은 기본적으로 PNG 이미지를 생성하지만 위에 표시된 것처럼 대신 JPG 파일을 생성하도록 지시할 수도 있습니다. 'image/webp'는 또 다른 일반적인 형식이지만 Safari는 이를 지원하지 않습니다. 솔직히 말해서 새로 사용 가능하고 더욱 강력한 이미지 형식인 디코더가 해당 인코더에 반영되지 않기 때문에 여기에서의 선택은 다소 실망스럽습니다. 하지만 어쨌든 대부분의 목적에는 충분합니다.
재미있는 사실: ConvertToBlob 메소드는 OffscreenCanvas 클래스에만 적용됩니다. 대신 HTMLCanvasElements에는 비동기 작업 처리의 일반적인 Promise 시대 이전 스타일에서 콜백을 첫 번째 인수로 사용하는 toBlob이 있습니다.
템플릿 이미지 사용
이제 처음부터 그림을 만들고 싶다면 이 모든 것이 가능합니다. 하지만 빈 템플릿에서 시작하고 싶다면 어떻게 해야 할까요?
메인 스레드에서 작업한다면 2D 컨텍스트의 drawImage 메서드를 사용하여 컨텍스트에 그림을 삽입할 수 있습니다. 쉽게 사용할 수 있는 요소.
다시 한 번 문제는 DOM에 액세스할 수 없어서 강요. 우리가 할 수 있는 대신에 필요한 그림을 배경으로 가져와 Blob을 가져온 다음 drawImage가 소화할 수 있는 다른 것으로 변환합니다. 서비스 워커에서도 사용할 수 있는 전역 메서드인 createImageBitmap을 입력합니다. 프런트엔드 웹 개발의 잘 알려지지 않은 클래스 중 하나인 ImageBitmap 인스턴스에 대한 Promise를 반환합니다. 분명히 WebGL 컨텍스트에서 더 널리 사용되지만 drawImage에서는 이를 허용하는 것 같아서...
const canvas = new OffscreenCanvas(800, 600); const context = canvas.getContext('2d');
이 시점부터 계속해서 낙서와 텍스트를 그려 만족스러운 동적인 이미지를 만들어 사용자에게 다시 보낼 수 있습니다.
참고: 이 문제는 SVG를 사용하면 더 쉽게 해결할 수 있습니다.
배경 그림을 설정하는 요소입니다. 하지만 이는 생성된 이미지가 전송된 후 브라우저가 사진을 로드해야 함을 의미하는 반면, 이 기술을 사용하면 이 작업이 전에 수행됩니다. 글꼴을 선택할 때도 비슷한 내용이 적용됩니다.
모두 합치기
이러한 모든 예에서는 모듈 서비스 워커를 사용했습니다(즉, 다른 ES 모듈에서 가져오기를 사용했습니다). 아쉽게도 모듈 서비스 워커는 아직 Firefox에서 지원되지 않지만 곧 지원될 예정입니다. 그동안에는 기존 importScript를 대신 사용하도록 코드를 조정해야 할 수도 있습니다.
import 또는 importScripts를 통해 다른 스크립트를 서비스 워커로 가져올 때, 가져온 파일이 변경될 때 브라우저는 updatefound 이벤트를 발생 않습니다. 이 이벤트는 오직 서비스워커 입력 스크립트가 변경됩니다.
우리와 같이 서비스 워커가 백엔드의 존재를 조롱하는 데만 필요한 경우, 설치 이벤트가 시작될 때 self.skipWaiting()을 호출한 다음 self를 호출하여 서비스 워커의 수명 주기를 단축할 수 있습니다. 요청에 즉시 응답할 수 있도록 activate 이벤트에 클라이언트.claim()을 추가합니다(그렇지 않으면 다음 페이지 새로 고침 시에만 시작됩니다).
self.addEventListener('fetch', event => { if (event.request.url.includes('/api/hello')) { event.respondWith(new Response( JSON.stringify({ message: 'Hello!' }), { headers: { 'Content-Type': 'application/json' }} ); } else { event.respondWith(fetch(event.request)); } });
그리고 이것이 기본적으로 전부이므로... 서비스 직원들과 함께 즐거운 시간 보내세요!
위 내용은 서비스 워커를 사용한 동적 이미지 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版
시각적 웹 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

WebStorm Mac 버전
유용한 JavaScript 개발 도구
