>백엔드 개발 >PHP 튜토리얼 >배경 처리를 사용하여 페이지로드 시간 속도를 높입니다

배경 처리를 사용하여 페이지로드 시간 속도를 높입니다

Jennifer Aniston
Jennifer Aniston원래의
2025-02-08 09:26:11355검색

Using Background Processing to Speed Up Page Load Times

코어 포인트

배경 처리는 페이지 로딩 속도를 크게 향상시킵니다.

무거운 작업을 백그라운드 처리로 전송하고 주요 스레드 리소스를 릴리스하며 페이지로드에 중점을 두어 사용자 브라우징 경험을 향상시킵니다.
  • 배경 처리의 두 가지 핵심 구성 요소 : 작업 대기열 및 작업자 프로세스. 응용 프로그램은 보류중인 작업을 생성하는 반면 작업자는 처리를 위해 대기열에서 작업을 하나씩 추출합니다. 여러 작업자 프로세스는 속도를 높이기 위해 병렬로 처리 할 수 ​​있습니다. 기술 스택 선택 :
  • Beanstalkd 태스크 큐를 사용하여 작업, Symfony Console 구성 요소를 저장하여 작업자 프로세스 (콘솔 명령)를 구현하고 감독자는 작업자 프로세스를 관리합니다.
  • 이미지 라이브러리 최적화 : 첫 번째 요청에서 이미지 스케일링을 피하십시오 (초기 부하 부담이 증가 함) 대신 갤러리가 생성 된 후에는 썸네일을 비동기 적으로 렌더링합니다. 이 작업은 사용자 경험과 확장 성을 향상시키기 위해 배경으로 이동할 수 있습니다.
  • 잠재적 인 도전 및 응답 :
  • 작업이 올바른 순서로 성공적으로 완료되고 백그라운드 작업의 오류가 올바르게 처리되어 있는지 확인하십시오. 작업 대기열과 강력한 오류 처리 및 로깅 메커니즘을 사용하여 완화 할 수 있습니다.
  • 이 기사는 성능 벤치마킹 및 최적화를위한 샘플 응용 프로그램 구축 (멀티 픽처 블로그)에 관한 일련의 기사의 일부입니다. (여기에서 코드 기반을 봅니다)
  • 이전 기사에서 주문형 이미지 스케일링 기능을 추가했습니다. 처음으로 요청했을 때 나중에 사용하기 위해 이미지가 스케일링되고 캐시됩니다. 이것은 편리하지만 첫 번째로드의 오버 헤드를 증가시킵니다. 시스템은 썸네일을 동적으로 렌더링하고 이미지 렌더링이 완료되기 전에 첫 번째 사용자의 페이지 렌더링을 "차단"해야합니다. 최적화 솔루션은 갤러리를 만든 후 썸네일을 렌더링하는 것입니다. 당신은 "좋아요, 그러나 이것은 갤러리를 만든 사용자를 차단할 것입니까?" 사용자는 더 긴로드 시간에 대해 혼란스러워 지거나 이미지가 처리하기에는 너무 커지면 타임 아웃 및/또는 오류가 발생합니다. 가장 좋은 해결책은 이러한 무거운 작업을 배경으로 옮기는 것입니다.
  • 배경 작업
  • 배경 작업은 무거운 작업을 처리하는 가장 좋은 방법입니다. 우리는 즉시 사용자에게 요청을 받고 처리를 준비했음을 알릴 수 있습니다. YouTube가 비디오를 업로드하는 것도 마찬가지입니다. 업로드 후 비디오에 액세스 할 수 없습니다. 미리보기 또는 공유 전에 비디오가 완전히 처리 될 때까지 사용자는 기다려야합니다. 파일 처리 또는 생성, 이메일 보내기 또는 기타 비 임계 작업은 백그라운드에서 수행해야합니다.
백엔드 처리에서 작동하는 방법

배경 처리 방법에는 작업 대기열과 작업자 프로세스의 두 가지 주요 구성 요소가 있습니다. 응용 프로그램은 처리 해야하는 작업을 생성하는 반면 작업자는 한 번에 대기열에서 하나의 작업을 기다리는 반면, 한 번에 한 번의 작업을받습니다.

Using Background Processing to Speed Up Page Load Times 여러 작업자 프로세스 (프로세스)를 생성하여 처리 속도를 높이고 큰 작업을 작은 청크로 나누고 동시에 처리 할 수 ​​있습니다. 귀하의 요구에 따라 백엔드 처리를 구성하고 관리 할 수 ​​있지만 병렬 처리는 쉬운 작업이 아닙니다. 잠재적 인 레이스 조건에주의를 기울이고 실패한 작업을 우아하게 처리해야합니다.

우리의 기술 스택 우리는 Beanstalkd 태스크 큐를 사용하여 작업을 저장하고 Symfony 콘솔 구성 요소를 사용하여 작업자 프로세스를 콘솔 명령으로 구현하고 감독자를 사용하여 작업자 프로세스를 관리합니다.

홈스테드 개선을 사용하면 Beanstalkd 및 감독자가 설치되므로 아래 설치 지침을 건너 뛸 수 있습니다.

instalkd beanstalkd는 시간이 많이 걸리는 작업을 비동기로 실행하여 트래픽이 많은 웹 애플리케이션에서 페이지 브라우징에서 지연 시간을 줄이기 위해 원래 설계된 일반적인 인터페이스를 갖춘 빠른 ​​작업 대기열입니다. 당신은 사용 가능한 많은 클라이언트 라이브러리를 사용할 수 있습니다. 프로젝트에서 우리는 Pheanstalk를 사용하고 있습니다.

우분투 또는 데비안 서버에 beanstalkd를 설치하려면 를 실행하십시오. 공식 다운로드 페이지를 확인하여 다른 운영 체제에 Beanstalkd를 설치하는 방법을 알아보십시오.

설치 후 Beanstalkd는 데몬으로 시작하여 클라이언트가 작업을 연결하고 생성 (또는 프로세스)하기를 기다립니다.

를 실행하여 Pheanstalk를 종속성으로 설치하십시오.

큐는 일자리를 창출하고 가져 오는 데 사용되므로 한 공장 서비스에서 일자리 창출을 중앙 집중화합니다.

이제 Beanstalkd 대기열과 상호 작용하는 데 필요한 공장 서비스를 주입 할 수 있습니다. 우리는 큐 이름을 상수로 정의하고 작업을 대기열에 넣거나 작업자 프로세스에서 대기열을 모니터링 할 때 참조합니다.

감독자 설치 공식 페이지에 따르면, Supervisor는 사용자가 UNIX 운영 체제에서 많은 프로세스를 모니터링하고 제어 할 수있는 클라이언트/서버 시스템입니다. 우리는이를 사용하여 작업자 프로세스를 시작, 다시 시작, 확장 및 모니터링합니다.

를 실행하여 우분투/데비안 서버에 감독자를 설치하십시오. 설치 후 감독자는 백그라운드에서 데몬으로 실행됩니다. 감독자 프로세스를 제어하려면

를 사용하십시오

관리자를 사용하여 프로세스를 제어하려면 먼저 구성 파일을 작성하고 프로세스를 제어하는 ​​방법을 설명해야합니다. 구성은

에 저장됩니다. 작업자 프로세스 크기 조정을위한 간단한 감독자 구성은 다음과 같습니다.

우리는 감독자에게 생성 된 프로세스의 이름을 지정하는 방법, 실행할 명령으로가는 경로, 프로세스가 자동으로 시작 및 다시 시작된 프로세스 수, 원하는 프로세스 수, 출력을 기록하는 방법을 알려줍니다. 감독자 구성에 대해 자세히 알아보십시오.

배경에서 이미지를 크기 일단 인프라가 설정되면 (즉, Beanstalkd 및 Supervisor가 설치됨) 갤러리를 만든 후 백그라운드에서 이미지를 조정하기 위해 응용 프로그램을 수정할 수 있습니다. 이를 위해서는 다음과 같습니다.

이미지 서비스 로직

    를 업데이트하십시오 크기 조정 작업자 프로세스를 콘솔 명령으로 구현하십시오. 근로자 프로세스 에 대한 감독자 구성을 만듭니다 장치를 업데이트하고 장치 클래스에서 이미지를 조정하십시오.
  • ImageController
  • 업데이트 사진 서비스 로직
  • 지금까지, 우리는 첫 번째 요청에서 이미지를 크기를 조정하고 있습니다. 요청 된 이미지 파일이 존재하지 않으면 동적으로 생성됩니다.
  • 우리는 이제 크기가 크기가 크기가 크기가있는 이미지 파일이 존재하는 경우에만 요청 된 이미지 응답을 반환하기 위해
  • 를 수정합니다 (즉, 이미지가 크기 조정되었습니다).
  • 존재하지 않으면 애플리케이션은 이미지가 크기를 조정하고 있음을 나타내는 일반적인 자리 표시 자 이미지 응답을 반환합니다. 자리 표시 자 이미지 응답에는 자리 표시 자 이미지를 캐시하지 않기 때문에 크기 조정 프로세스가 완료된 직후 이미지가 렌더링되기를 원합니다.
  • 우리는 페이로드를 갤러리 ID로 라는 간단한 이벤트를 만들 것입니다. 갤러리가 성공적으로 만들어지면이 이벤트는
  • :
에서 파견됩니다.

또한 "이미지가 처리되고있는 플래시 메시지를 업데이트 할 것입니다."는 사용자가 준비되기 전에 이미지에서 일부 처리를 수행해야한다는 것을 알 수 있습니다. 우리는

이벤트 가입자를 생성 할 것입니다.이 가입자는

에 반응하고 새로 생성 된 갤러리에서 각 이미지에 대한 작업 크기 조정을 요청합니다.

이제 사용자가 갤러리를 성공적으로 생성하면 응용 프로그램이 갤러리 페이지를 렌더링하지만 일부 이미지의 축소판은 아직 준비되지 않으므로 표시되지 않습니다.

ImageController 작업자 프로세스가 크기 조정을 완료 한 후에는 전체 갤러리 페이지를 다음에 새로 고쳐야합니다.

크기 조정 작업자 프로세스를 콘솔 명령으로 구현하십시오. 작업자 프로세스는 대기열에서 채취 한 각 작업에 대해 동일한 작업을 수행하는 간단한 프로세스입니다. 작업자 프로세스의 실행은 작업자가 작업을 유지하거나 타임 아웃이 발생할 때까지

전화에서 차단됩니다.

한 명의 근로자 프로세스만이 작업을 얻고 처리 할 수 ​​있습니다. 작업에는 일반적으로 문자열 또는 직렬화 된 배열/객체와 같은 페이로드가 포함됩니다. 이 예에서는 생성 된 갤러리의 UUID가 될 것입니다.

간단한 일꾼은 다음과 같이 보입니다

<code>/etc/init.d/beanstalkd
Usage: /etc/init.d/beanstalkd {start|stop|force-stop|restart|force-reload|status}</code>
정의 된 시간 초과 후 또는 작업이 처리 된 후 작업자 프로세스가 종료 될 것임을 알 수 있습니다. 작업자 프로세스 로직을 무한 루프로 마무리하고 작업을 무기한으로 반복하게 만들 수 있지만, 이로 인해 비활성이 긴 후에 데이터베이스 연결 시간 초과와 같은 문제가 발생할 수 있으며 배포가 더 어려워집니다. 이를 방지하기 위해 단일 작업이 완료된 후 작업자 프로세스 라이프 사이클이 종료됩니다. 그런 다음 감독자는 작업자 프로세스를 새로운 프로세스로 다시 시작합니다.

view 근로자 명령의 구조를 이해하려면. 이러한 방식으로 구현 된 작업 프로세스는 Symfony Console 명령으로 수동으로 시작될 수 있습니다.

ResizeImageWorkerCommand 감독자 구성 생성 ./bin/console app:resize-image-worker

우리는 작업자 프로세스가 자동으로 시작되기를 원하므로 구성에서

지침을 설정합니다. 시간 초과 또는 성공적인 작업 처리 후 작업자 프로세스를 다시 시작해야하므로 지침도 설정합니다. 백엔드 처리의 가장 중요한 부분은 병렬 처리의 용이성입니다. 우리는 지침을 설정할 수 있으며 감독자는 5 개의 작업자 프로세스 인스턴스를 생성합니다. 그들은 작업을 기다리고 독립적으로 처리하여 시스템을 쉽게 확장 할 수 있습니다. 시스템이 발전함에 따라 프로세스 수를 늘려야 할 수도 있습니다. 여러 프로세스가 실행되므로 프로세스 이름의 구조를 정의해야하므로

지시 사항을 설정합니다.

마지막으로, 우리는 작업자 프로세스의 출력을 저장하여 문제가 발생할 때 분석하고 디버깅 할 수 있도록합니다. 우리는 autostart=true 경로를 정의 할 것입니다. autorestart=true 크기 조정 작업자 프로세스의 전체 감독자 구성은 다음과 같습니다.

디렉토리에있는 구성 파일을 작성 (또는 업데이트) 한 후 Supervisor에게 다음 명령을 실행하여 구성을 업데이트하고 업데이트하도록해야합니다.

홈스테드 개선을 사용하는 경우 (사용해야합니다!) numprocs=5를 사용하여 프로젝트의 감독자 구성을 생성 할 수 있습니다 : . process_name=%(program_name)s_%(process_num)02d 업데이트 장치

> 이미지 썸네일은 더 이상 첫 번째 요청에서 렌더링되지 않으므로 장치 클래스에 장치를로드하면 각 이미지에 대한 렌더링을 명시 적으로 요청해야합니다. stderr_logfile 이제 장치가 느려지는 느낌이 들기 때문에 사용자가 완료되기를 기다리도록 강요하는 대신 배경으로 옮겼습니다! stdout_logfile

팁과 팁

작업자 프로세스는 백그라운드에서 실행되므로 새 버전의 애플리케이션을 배포하더라도 처음 재시작하기 전에 구식 작업자 프로세스가 실행됩니다.

우리의 경우, 모든 근로자 프로세스가 업데이트 될 때까지 모든 근로자 프로세스가 작업을 완료하거나 타임 아웃 (5 분)을 완료 할 때까지 기다려야합니다. 배포 프로세스를 만들 때이를 알고 있어야합니다!

FAQ는 백그라운드 처리를 사용하여 페이지 로딩 시간을 속도를 높이기 위해 (FAQ) 페이지로드 속도를 높이는 데 배경 처리가 어떤 역할을합니까?

배경 처리는 페이지 로딩 속도를 향상시키는 데 중요한 역할을합니다. 이를 통해 특정 작업을 백그라운드에서 수행 할 수 있으므로 기본 스레드 리소스를 확보하고 페이지로드에 중점을 둡니다. 즉, 사용자는 이러한 작업이 페이지를로드하기 위해 기다릴 필요가 없으므로 더 빠르고 매끄러운 탐색 경험이 생깁니다. Symfony 프로세스 구성 요소는 백그라운드 처리에 어떻게 도움이됩니까?

Symfony 프로세스 구성 요소는 아동 프로세스에서 명령을 실행할 수있는 강력한 도구입니다. 시스템 명령을 실행하고 출력을 관리하기위한 간단한 객체 지향 API를 제공합니다. 이것은 기본 스레드를 차단하지 않고 별도의 프로세스로 작업을 실행할 수 있으므로 백그라운드 처리에 특히 유용합니다.

백엔드 처리를위한 일반적인 사용 사례는 무엇입니까? 배경 처리는 일반적으로 주 스레드와 상관없이 작업을 실행할 수있는 상황에서 일반적으로 사용됩니다. 여기에는 이메일 보내기, 사진 처리, 복잡한 계산 실행 등과 같은 작업이 포함됩니다. 이러한 작업을 백그라운드에서 실행하면 응용 프로그램의 성능을 향상시키고 더 나은 사용자 경험을 제공 할 수 있습니다.

PHP에서 백그라운드 프로세스를 실행하는 방법은 무엇입니까?

함수는 PHP에서 배경 프로세스를 실행하는 데 사용될 수 있습니다. 이 기능을 사용하면 자식 프로세스에서 명령을 실행 한 다음 명령이 완료되기를 기다리지 않고도 나머지 스크립트를 계속 실행할 수 있습니다. 간단한 예는 다음과 같습니다.

이 예에서

는 백그라운드에서 실행하려는 스크립트입니다.

Symfony Messenger 구성 요소는 무엇이며 백그라운드 처리와 어떤 관련이 있습니까?

Symfony Messenger 구성 요소는 메시지 버스 시스템으로 핸들러에게 메시지를 비동기로 발송하는 데 사용할 수 있습니다. 즉, 버스로 메시지를 보내고 메시지가 처리 될 때까지 기다리지 않고도 스크립트를 계속 실행할 수 있습니다. 메시지 처리는 별도의 프로세스에서 수행 할 수 있기 때문에 배경 처리의 형태입니다.

웹 사이트의 성능을 향상시키기 위해 백엔드 처리를 사용하는 방법은 무엇입니까? 작업을 백그라운드에 내리면 기본 스레드 자원을 확보하고 페이지로드에 중점을 둘 수 있습니다. 이는 특히 시간이 소요되거나 리소스 집약적 인 작업이있는 경우 웹 사이트의 성능을 크게 향상시킬 수 있습니다. 배경에 오프로드 할 수있는 몇 가지 일반적인 작업에는 이메일 보내기, 사진 처리 및 복잡한 계산 실행이 포함됩니다.

백엔드 처리의 잠재적 인 과제는 무엇이며 이러한 과제를 완화하는 방법은 무엇입니까?

백엔드 처리의 주요 과제 중 하나는 작업이 올바른 순서로 성공하고 완료되도록하는 것입니다. 이는 작업 큐를 사용하여 완화 할 수있어 작업이 추가 된 순서대로 작업을 실행하도록합니다. 또 다른 과제는 백그라운드 작업에서 오류를 처리하는 것입니다. 이는 강력한 오류 처리 및 로깅 메커니즘을 구현하여 해결할 수 있습니다.

배경 처리는 다른 성능 최적화 기술과 함께 사용할 수 있습니까?

예, 배경 처리는 다른 성능 최적화 기술과 함께 사용할 수 있습니다. 예를 들어 캐시를 사용하여 고가의 작업 결과를 저장 한 다음 배경 처리를 사용하여 캐시를 주기적으로 업데이트 할 수 있습니다. 이를 통해 애플리케이션 속도를 늦추지 않고 최신 데이터를 제공 할 수 있습니다.

배경 작업의 진행 상황을 모니터링하는 방법은 무엇입니까? 다양한 도구와 기술을 사용하여 백엔드 작업의 진행 상황을 모니터링 할 수 있습니다. 일반적인 접근 방식은 로깅을 사용하여 각 작업의 상태를 기록하는 것입니다. Symfony의 메신저 구성 요소와 같은 도구를 사용할 수도 있습니다.이 도구는 백엔드 작업 모니터링 및 디버깅을위한 내장 지원을 제공합니다.

배경 처리를 사용할 때 보안 예방 조치가 있습니까?

예, 백그라운드 처리를 사용할 때 몇 가지 보안 예방 조치가 있습니다. 예를 들어, 배경 작업이 민감한 정보를 누출하지 않고 주입 공격에 적용되지 않도록해야합니다. 또한 작업이 안전한 환경에서 실행되고 작업을 수행하는 데 필요한 것보다 더 많은 권한이 없도록해야합니다.

위 내용은 배경 처리를 사용하여 페이지로드 시간 속도를 높입니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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