PHP 개발자이자 스타트업 팀의 기술 개발자로서 개발 프레임워크를 선택하는 것은 매우 어려운 일입니다.
ThinkPHP를 사용하면 교육 기관을 막 졸업한 개발자를 채용하여 시작할 수 있지만 성능과 포스트 코드를 분리하는 것은 골치 아픈 일입니다. 그러나 많은 전문가들이 이미 길을 닦았으므로 많은 타사 기능을 직접 작성할 필요는 없습니다.
Laravel을 사용하면 Legend가 작성하기 매우 편하고 확장성이 충분하지만 학습 비용이 다소 높기 때문에 후배 개발자에게 프레임워크를 익히는 데 반달을 줄 수는 없습니다. 게다가 업계 관계자들은 라라벨의 성능이 그다지 좋지 않고, 문서가 특별히 풍부하지도 않다고 폭로했다고 한다.
Yii의 경우 구문이 좀 번거롭고, 프론트엔드와 백엔드 코드 분리도 조금 번거롭지만, 성능이 아주 좋고, 이미 국내 대기업에서 많이 사용하고 있는 것 같습니다. 예상치 못한 일이 발생하면 신속하게 전문가를 찾아 질문에 답할 수 있습니다.
간단한 성능 평가를 하는 것이 좋습니다. 성능이 뛰어난 것을 선택하면 틀릴 수 없습니다.
성능 테스트
테스트 시간: 2016년 5월 6일
테스트 도구: siege(MAC 시스템의 ab에는 항상 pr_socket_recv: Connection Reset by Peer(54) 오류가 있으므로 siege를 선택했습니다.)
테스트 머신: MacPro Core i5 프로세서/8GB 메모리/256GB SSD 플래시 메모리
테스트 환경: Apache PHP5.6
프레임워크 버전: ThinkPHP 3.2.3 Laravel 5.2 Yii2.0.5
테스트 원칙: 각 테스트 주기는 5회이며 중간 데이터를 가져옵니다
추가 참고 사항: 모든 프로젝트는 하위 디렉토리
결과 설명
Transactions: 2119 hits 处理请求总数量 Availability: 96.85 % 可用性 Elapsed time: 9.74 secs 运行时间 Data transferred: 1.31 MB 数据传输量 Response time: 0.60 secs 响应时间 Transaction rate: 217.56 trans/sec 每秒处理效率 Throughput: 0.13 MB/sec 每秒处理数据 Concurrency: 130.28 并发 Successful transactions: 2162 成功的请求 Failed transactions: 69 失败的请求 Longest transaction: 2.85 最长的单个请求 Shortest transaction: 0.01 最短的单个请求
테스트 시작
컨트롤러를 추가하고 컨트롤러에서 HelloWorld를 10,000번 입력
동시성 50회 반복 10회:
가장 먼저 우리를 찾아온 것은 ThinkPHP였는데 괜찮아 보였습니다
Transactions: 500 hits Availability: 100.00 % Elapsed time: 2.81 secs Data transferred: 52.45 MB Response time: 0.26 secs Transaction rate: 177.94 trans/sec Throughput: 18.67 MB/sec Concurrency: 47.10 Successful transactions: 500 Failed transactions: 0 Longest transaction: 0.48 Shortest transaction: 0.03
그럼 라라블은 뭐 좀 실망이네요
Transactions: 500 hits Availability: 100.00 % Elapsed time: 13.33 secs Data transferred: 52.45 MB Response time: 1.27 secs Transaction rate: 37.51 trans/sec Throughput: 3.93 MB/sec Concurrency: 47.55 Successful transactions: 500 Failed transactions: 0 Longest transaction: 3.64 Shortest transaction: 0.07
결승전을 앞두고 비교적 긍정적이었던 이이이
Transactions: 500 hits Availability: 100.00 % Elapsed time: 4.84 secs Data transferred: 52.45 MB Response time: 0.46 secs Transaction rate: 103.31 trans/sec Throughput: 10.84 MB/sec Concurrency: 47.65 Successful transactions: 500 Failed transactions: 0 Longest transaction: 0.88 Shortest transaction: 0.04
동시성 200 루프 10회:
첫 번째는 ThinkPHP입니다
Transactions: 1977 hits Availability: 98.85 % Elapsed time: 10.03 secs Data transferred: 207.40 MB Response time: 0.95 secs Transaction rate: 197.11 trans/sec Throughput: 20.68 MB/sec Concurrency: 187.68 Successful transactions: 1977 Failed transactions: 23 Longest transaction: 1.22 Shortest transaction: 0.02
그럼 라라벨
Transactions: 1890 hits Availability: 94.50 % Elapsed time: 51.85 secs Data transferred: 198.27 MB Response time: 4.88 secs Transaction rate: 36.45 trans/sec Throughput: 3.82 MB/sec Concurrency: 178.00 Successful transactions: 1890 Failed transactions: 110 Longest transaction: 26.01 Shortest transaction: 0.07
드디어 이이
Transactions: 1996 hits Availability: 99.80 % Elapsed time: 18.95 secs Data transferred: 209.39 MB Response time: 1.79 secs Transaction rate: 105.33 trans/sec Throughput: 11.05 MB/sec Concurrency: 188.57 Successful transactions: 1996 Failed transactions: 4 Longest transaction: 3.29 Shortest transaction: 0.10
의외로 최적화가 없으면 ThinkPHP가 가장 빨랐고 Yii는 약간 더 빨랐으며 Laravel은 불안정한 속도로 테스트를 마쳤습니다. 결과는 다소 예상치 못한 결과이지만 위 테스트는 개발 환경만을 나타냅니다. 아래에서는 프레임워크를 최적화하여 온라인 환경을 시뮬레이션합니다.
최적화 프레임워크
ThinkPHP:
APP_DEBUG改为false
라라벨:
APP_DEBUG改为false php artisan route:cache php artisan optimize php artisan config:cache composer dumpautoload -o
이:
YII_DEBUG가 false로 변경되었습니다
작곡가 dumpautoload -o
동시성 200 루프 10회:
ThinkPHP
Transactions: 1655 hits Availability: 82.75 % Elapsed time: 8.21 secs Data transferred: 173.62 MB Response time: 0.69 secs Transaction rate: 201.58 trans/sec Throughput: 21.15 MB/sec Concurrency: 139.29 Successful transactions: 1655 Failed transactions: 345 Longest transaction: 7.83 Shortest transaction: 0.00
라라벨:
Transactions: 1520 hits Availability: 76.00 % Elapsed time: 34.95 secs Data transferred: 159.45 MB Response time: 3.15 secs Transaction rate: 43.49 trans/sec Throughput: 4.56 MB/sec Concurrency: 136.84 Successful transactions: 1520 Failed transactions: 480 Longest transaction: 19.18 Shortest transaction: 0.00
이:
Transactions: 1704 hits Availability: 85.20 % Elapsed time: 15.16 secs Data transferred: 178.76 MB Response time: 1.46 secs Transaction rate: 112.40 trans/sec Throughput: 11.79 MB/sec Concurrency: 164.21 Successful transactions: 1704 Failed transactions: 296 Longest transaction: 9.04 Shortest transaction: 0.00
이상한 점은 프레임워크가 디버깅 모드를 끄면 실패가 더 많다는 것입니다. 그러나 간단한 최적화 이후 Laravel의 성능이 크게 향상되었음은 분명하지만, 여전히 다른 두 프레임워크에 비하면 낮은 수준입니다.
결론
시험을 치르는 동안 저는 우울함을 느꼈고, 제 세계관이 무너질 정도로 무너졌다는 느낌을 받았습니다.
ThinkPHP의 성능은 Yii보다 2배, Laravel보다 거의 4배 높습니다
Yii의 성능은 상대적으로 평범하지만 테스트에서는 다른 두 프레임워크보다 요청 실패가 적은 것이 분명합니다
Laravel은 여전히 우아하지만 성능이 걱정됩니다. 네티즌의 말로 설명하는 것이 좋습니다. 배우는 사람은 살고, 사용하는 사람은 죽습니다
드디어
제 프로젝트는 자체 구축 프레임워크를 사용하여 개발하게 되었습니다. Composer의 힘으로 개발 과정이 매우 순조롭게 진행되었습니다. 마지막으로 200개의 동시 주기를 10번 실행하는 자체 구축 프레임워크의 데이터를 첨부했습니다. 프레임워크는 오픈 소스이지만 업데이트가 매우 복잡합니다. github에서 PPPHP를 검색하고 나와 함께 프레임워크를 구축해 보세요.
Transactions: 1672 hits Availability: 83.60 % Elapsed time: 6.18 secs Data transferred: 175.40 MB Response time: 0.57 secs Transaction rate: 270.55 trans/sec Throughput: 28.38 MB/sec Concurrency: 153.16 Successful transactions: 1672 Failed transactions: 328 Longest transaction: 4.57 Shortest transaction: 0.01