목차
1. 架构优化
2. 关闭调试模式
3. 使用单模块
올바른 성능 최적화 단계는 아키텍처 최적화, 데이터베이스 최적화 및 코드 최적화입니다.
라우팅 규칙을 정의할 때 배열을 사용하지 말고 경로를 등록하는 방법을 사용하고 라우팅 그룹(또는 리소스 라우팅)을 더 자주 사용하십시오. 그룹 라우팅은 일치하는 경로 수를 줄여 라우팅 성능을 향상시킬 수 있습니다. 여러 도메인 이름에 대해 서로 다른 경로가 있는 경우 도메인 이름을 기반으로 하는 경로도 사용할 계획을 세워야 합니다.
正确使用模型关联
大量数据处理优化
善用数据集方法避免多次查询
6.0 配置和公共文件缓存
7.0 生成类库映射
PHP 프레임워크 ThinkPHP ThinkPHP 애플리케이션 성능을 효과적으로 향상시키도록 도와주세요!

ThinkPHP 애플리케이션 성능을 효과적으로 향상시키도록 도와주세요!

Dec 03, 2020 pm 02:41 PM
thinkphp

다음 프레임워크 튜토리얼 칼럼에서는 ThinkPHP의 애플리케이션 성능을 효과적으로 향상시키는 방법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

애플리케이션 성능에 관해서는 관련된 측면이 너무 많습니다. 서버 최적화와 프런트엔드 최적화에 관한 기사가 온라인에 너무 많기 때문에 여기서는 자세히 다루지 않겠습니다. 이 기사에서는 ThinkPHP 5.1 애플리케이션 개발(특히 배포 환경)과 관련된 몇 가지 성능 최적화 방법과 주의사항을 간략하게 소개합니다.

ThinkPHP 애플리케이션 성능을 효과적으로 향상시키도록 도와주세요!추천: "ThinkPHP 5.1 세계 최초 비디오 튜토리얼

"

5.1 应用开发中(尤其是部署环境)可能涉及的一些性能优化手段和注意事项。

推荐:《ThinkPHP 5.1全球首发视频教程

首先要强调一点:框架并不是应用性能的瓶颈,架构设计、数据库和人才是。框架在设计之初,出于通用性考虑,不会特意针对某个应用做深入优化,但提供了一些可能的手段和配置参数让你进行针对性的调优,下面就列举一些可能的优化手段,在开发的时候可以根据情况调整。

正确的性能优化步骤应该是:架构优化、数据库优化、代码优化。

1. 架构优化

架构优化涉及到技术、存储、网络、服务的选型和构架,尽量使用成熟和现代的开发架构和设计模式。前后端完全分离设计,便于前后端的独立优化,也更加便于测试工作。

如果你的应用遇到了性能瓶颈,这个时候要考虑的就是优化架构而不是优化代码本身,因为架构层面的优化效果往往是最显著的。

2. 关闭调试模式

部署环境千万不要忘记关闭调试模式,这不仅仅是出于性能考虑,更多是基于安全因素。事实上,建议通过环境变量来配置关闭调试模式,这样部署后不需要更改任何配置文件。

因为调试模式影响日志记录信息、额外的调试信息和缓存失效,关闭调试模式能够带来一定的性能提升。

3. 使用单模块

使用多模块功能会增加文件的 I/O 开销和额外的配置及检查,如非必要在规划你的应用架构的时候尽量考虑使用单一模块,然后使用控制器分级来解决控制器过多的问题。

使用单一模块的性能优势,在部署到 swoole우선, 한 가지 점을 강조합니다. 프레임워크는 애플리케이션 성능, 아키텍처 설계, 데이터베이스 및 인재의 병목 현상이 아닙니다. 설계 초기에는 다양성을 위해 프레임워크가 특정 애플리케이션에 대한 심층적인 최적화를 구체적으로 수행하지는 않지만 목표 조정을 수행할 수 있는 몇 가지 가능한 수단과 구성 매개변수를 제공합니다. 다음은 몇 가지 가능한 최적화 수단입니다. . 개발 상황에 따라 조정될 수 있습니다.

올바른 성능 최적화 단계는 아키텍처 최적화, 데이터베이스 최적화 및 코드 최적화입니다.

1. 아키텍처 최적화

아키텍처 최적화에는 기술, 스토리지, 네트워크 및 서비스의 선택과 아키텍처가 포함됩니다. 성숙하고 현대적인 개발 아키텍처와 디자인 패턴을 사용해 보세요. 프런트엔드와 백엔드가 완전히 분리되도록 설계되어 프런트엔드와 백엔드의 독립적인 최적화가 용이하고 테스트가 더 쉬워졌습니다.

애플리케이션에서 성능 병목 현상이 발생하는 경우 이때 고려해야 할 것은 코드 자체를 최적화하는 것보다 아키텍처를 최적화하는 것입니다. 아키텍처 수준의 최적화 효과가 가장 중요한 경우가 많기 때문입니다.

2. 디버깅 모드 끄기

환경을 배포할 때 디버깅 모드를 끄는 것은 성능상의 이유일 뿐만 아니라 보안상의 이유이기도 합니다. 실제로 배포 후 구성 파일을 변경할 필요가 없도록 환경 변수를 통해 디버그 모드가 꺼지도록 구성하는 것이 좋습니다.


디버깅 모드는 로깅 정보, 추가 디버깅 정보 및 캐시 무효화에 영향을 미치므로 디버깅 모드를 끄면 성능이 향상될 수 있습니다.

3. 단일 모듈 사용

다중 모듈 기능을 사용하면 파일의 I/O 오버헤드가 증가하고 추가 구성 및 확인이 필요하지 않은 경우 단일 모듈 사용을 고려해보세요. 애플리케이션 아키텍처 모듈을 계획할 때 모듈을 선택한 다음 컨트롤러 등급을 사용하여 너무 많은 컨트롤러 문제를 해결하세요.


단일 모듈을 사용하는 성능 이점은 swoole에 배포할 때 더 완벽하게 반영될 수 있습니다. 애플리케이션 파일이 서비스를 시작하면 메모리에 로드되고 관련 파일이 모듈은 다시 로드 요청마다 로드됩니다.

4. 라우팅 설계 및 최적화

라우팅 규칙을 정의할 때 배열을 사용하지 말고 경로를 등록하는 방법을 사용하고 라우팅 그룹(또는 리소스 라우팅)을 더 자주 사용하십시오. 그룹 라우팅은 일치하는 경로 수를 줄여 라우팅 성능을 향상시킬 수 있습니다. 여러 도메인 이름에 대해 서로 다른 경로가 있는 경우 도메인 이름을 기반으로 하는 경로도 사용할 계획을 세워야 합니다.

라우팅에서 현재 경로에 대한 데이터 확인 및 권한 확인과 같은 작업을 설계해 보세요. 반면에 확인 작업은 기다리지 않고 최대한 빨리 수행할 수 있습니다. 실행할 컨트롤러입니다.

그룹이 많은 경우 경로 확인 지연을 활성화합니다.

// 开启路由延迟解析
'url_lazy_route'    => true,
로그인 후 복사

동일 그룹 내 라우팅 규칙이 여러 개인 경우 라우팅 규칙을 병합하는 것이 좋습니다.


// 合并分组路由规则
'route_rule_merge'       => true,
로그인 후 복사

GET 요청 라우팅의 경우 라우팅 요청 캐시를 설정할 수 있습니다.

// 定义GET请求路由规则 并设置3600秒的缓存
Route::get('new/:id','News/read')->cache(3600);
로그인 후 복사
🎜배포 단계에서 경로 캐싱을 켤 수 있습니다. 🎜🎜
// 开启路由缓存(仅部署模式有效)
'route_check_cache'	=>	true,
로그인 후 복사
🎜5. 쿼리 최적화🎜🎜🎜우선 좋은 개발 습관을 유지하고, DB 클래스와 모델의 올바른 사용 자세를 이해하세요. 데이터베이스 자체의 성능 최적화를 위해서는 MySQL 성능 베스트 21가지를 참고하세요. 최적화 다음은 주로 데이터 쿼리와 관련된 프레임워크 최적화 전략에 관한 것입니다. 🎜🎜쿼리 캐시를 합리적으로 사용하세요🎜🎜요청당 쿼리 수를 최소화하고, 높은 실시간 성능이 요구되지 않는 데이터 쿼리에 대해서는 데이터 쿼리 캐시를 합리적으로 계획하세요(Redis 캐시 사용 권장). 🎜
Blog::where('id', 10)
    ->cache(30)
    ->find();
로그인 후 복사
🎜연관 쿼리를 사용하는 경우 캐시 방식은 메인 모델의 데이터 캐싱에만 사용할 수 있지만, 편리한 데이터 캐싱을 위해 Cache 클래스의 Remember 방식을 사용할 수 있습니다. 🎜🎜
$users = Cache::remember('users', function(){
    return User::with('profile')
        ->where('status', 1)
        ->select();},30);
로그인 후 복사
🎜쿼리 수에 너무 집착하지 마세요🎜🎜🎜쿼리 수를 최대한 줄이는 것은 성능상의 이유이지만, 쿼리를 적게 사용한다고 해서 반드시 최고의 성능을 얻을 수 있는 것은 아닙니다. 복잡한 JOIN 쿼리의 성능은 두 개의 단순 쿼리만큼 높지 않을 수 있지만 간단한 쿼리를 사용하는 것이 더 명확하고 이해하기 쉬우며 데이터 쿼리를 캐시하는 것이 더 편리합니다. 🎜
正确使用模型关联

不要总是以为模型的性能一定比Db类低,框架的ORM查询设计经过了较为合理的优化,正确使用模型一样可以有出色的性能,而且比Db查询要方便很多。

尤其是对于一些复杂的设计来说使用模型关联显得比直接用Db更加简单,例如使用关联预载入查询就可以避免N+1查询问题。

User::with(['profile','book'])->select();
로그인 후 복사

如果用Db类自己实现的话,费时费力,性能还不一定优。

大量数据处理优化

对于大量数据的处理操作,使用chunk分批处理方法。

User::chunk(100, function($users) {
    foreach ($users as $user) {
        // 处理数据
    }});
로그인 후 복사

对于内存开销比较大的应用,在做大量数据查询和处理的时候,使用cursor方法,可以利用PHP的生成器特性,减少内存占用。

$cursor = User::cursor();foreach($cursor as $user){
    // 处理数据
    }
로그인 후 복사

你会发现用户数据不论是1万还是10万级别,内存开销并没有大的变化。

涉及到对大量数据的处理,包括数据迁移、批量更新,尽量使用命令行指令运行,否则会因为超时而中断。

善用数据集方法避免多次查询

可以通过数据集的方法完成的子集或者排序操作不要再次查询,例如:

// 模型查询返回数据集对象
$users = User::select();
// 按照用户的成绩由高到低排序
$list1 = $users->order('score', 'desc');
// 筛选成绩在90分以上的用户
$list2 = $users->where('score', '>=', 90);
로그인 후 복사

字段缓存

利用下面指令在部署后生成字段缓存,可以减少每次数据表的字段查询开销。

php think optimize:schema
로그인 후 복사

更多用法可以参考官方手册的数据字段缓存。

6.0 配置和公共文件缓存

每次在应用初始化或者模块初始化的时候会有一定的I/O开销,如果已经开启OpCache的话对性能影响甚微,如果比较在意的也可以通过命令行指令生成配置缓存(包括相关的公共文件和各种定义文件)。

生成应用配置缓存:

php think optimize:config
로그인 후 복사

生成模块配置缓存:

php think optimize:config index
로그인 후 복사

注意:一旦配置或者公共文件发生变化,必须重新生成。

7.0 生成类库映射

类库映射可以提升类库的自动加载性能,使用下面的指令可以生成系统类库和应用类库的类库映射(包括extend目录下的类库)。

php think optimize:autoload
로그인 후 복사

vendor目录下的类库可以使用composer的dump-autoload指令优化加载性能。

composer dump-autoload -o
로그인 후 복사

该命令把 PSR-0 和 PSR-4 转换为一个类映射表,来提高类的加载速度。

위 내용은 ThinkPHP 애플리케이션 성능을 효과적으로 향상시키도록 도와주세요!의 상세 내용입니다. 자세한 내용은 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

thinkphp 프로젝트를 실행하는 방법 thinkphp 프로젝트를 실행하는 방법 Apr 09, 2024 pm 05:33 PM

ThinkPHP 프로젝트를 실행하려면 다음이 필요합니다: Composer를 설치하고, 프로젝트 디렉터리를 입력하고 php bin/console을 실행하고, 시작 페이지를 보려면 http://localhost:8000을 방문하세요.

thinkphp에는 여러 버전이 있습니다. thinkphp에는 여러 버전이 있습니다. Apr 09, 2024 pm 06:09 PM

ThinkPHP에는 다양한 PHP 버전용으로 설계된 여러 버전이 있습니다. 메이저 버전에는 3.2, 5.0, 5.1, 6.0이 포함되며, 마이너 버전은 버그를 수정하고 새로운 기능을 제공하는 데 사용됩니다. 최신 안정 버전은 ThinkPHP 6.0.16입니다. 버전을 선택할 때 PHP 버전, 기능 요구 사항 및 커뮤니티 지원을 고려하십시오. 최상의 성능과 지원을 위해서는 최신 안정 버전을 사용하는 것이 좋습니다.

thinkphp를 실행하는 방법 thinkphp를 실행하는 방법 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework를 로컬에서 실행하는 단계: ThinkPHP Framework를 로컬 디렉터리에 다운로드하고 압축을 풉니다. ThinkPHP 루트 디렉터리를 가리키는 가상 호스트(선택 사항)를 만듭니다. 데이터베이스 연결 매개변수를 구성합니다. 웹 서버를 시작합니다. ThinkPHP 애플리케이션을 초기화합니다. ThinkPHP 애플리케이션 URL에 접속하여 실행하세요.

thinkphp를 설치하는 방법 thinkphp를 설치하는 방법 Apr 09, 2024 pm 05:42 PM

ThinkPHP 설치 단계: PHP, Composer 및 MySQL 환경을 준비합니다. Composer를 사용하여 프로젝트를 만듭니다. ThinkPHP 프레임워크와 종속성을 설치합니다. 데이터베이스 연결을 구성합니다. 애플리케이션 코드를 생성합니다. 애플리케이션을 실행하고 http://localhost:8000을 방문하세요.

laravel과 thinkphp 중 어느 것이 더 낫나요? laravel과 thinkphp 중 어느 것이 더 낫나요? Apr 09, 2024 pm 03:18 PM

Laravel과 ThinkPHP 프레임워크의 성능 비교: ThinkPHP는 일반적으로 최적화 및 캐싱에 중점을 두고 Laravel보다 성능이 좋습니다. Laravel은 잘 작동하지만 복잡한 애플리케이션의 경우 ThinkPHP가 더 적합할 수 있습니다.

개발 제안: ThinkPHP 프레임워크를 사용하여 비동기 작업을 구현하는 방법 개발 제안: ThinkPHP 프레임워크를 사용하여 비동기 작업을 구현하는 방법 Nov 22, 2023 pm 12:01 PM

"개발 제안: ThinkPHP 프레임워크를 사용하여 비동기 작업을 구현하는 방법" 인터넷 기술의 급속한 발전으로 인해 웹 응용 프로그램은 많은 수의 동시 요청과 복잡한 비즈니스 논리를 처리하기 위한 요구 사항이 점점 더 높아졌습니다. 시스템 성능과 사용자 경험을 향상시키기 위해 개발자는 이메일 보내기, 파일 업로드 처리, 보고서 생성 등과 같이 시간이 많이 걸리는 작업을 수행하기 위해 비동기 작업을 사용하는 것을 종종 고려합니다. PHP 분야에서 널리 사용되는 개발 프레임워크인 ThinkPHP 프레임워크는 비동기 작업을 구현하는 몇 가지 편리한 방법을 제공합니다.

thinkphp 성능은 어떤가요? thinkphp 성능은 어떤가요? Apr 09, 2024 pm 05:24 PM

ThinkPHP는 캐싱 메커니즘, 코드 최적화, 병렬 처리 및 데이터베이스 최적화와 같은 장점을 갖춘 고성능 PHP 프레임워크입니다. 공식 성능 테스트에 따르면 초당 10,000개 이상의 요청을 처리할 수 있으며 JD.com, Ctrip과 같은 대규모 웹 사이트 및 엔터프라이즈 시스템에서 실제 응용 프로그램으로 널리 사용됩니다.

ThinkPHP6 백엔드 관리 시스템 개발: 백엔드 기능 구현 ThinkPHP6 백엔드 관리 시스템 개발: 백엔드 기능 구현 Aug 27, 2023 am 11:55 AM

ThinkPHP6 백엔드 관리 시스템 개발: 백엔드 기능 구현 소개: 인터넷 기술과 시장 수요의 지속적인 발전으로 인해 점점 더 많은 기업과 조직에서 비즈니스 데이터를 관리하고 운영 관리를 수행하기 위해 효율적이고 안전하며 유연한 백엔드 관리 시스템이 필요합니다. 이 기사에서는 ThinkPHP6 프레임워크를 사용하여 권한 제어, 데이터 추가, 삭제, 수정 및 쿼리와 같은 기본 기능을 포함하여 간단하지만 실용적인 백엔드 관리 시스템을 개발하는 방법을 예제를 통해 보여줍니다. 환경 준비 시작하기 전에 PHP, MySQL, Com을 설치해야 합니다.

See all articles