摘要:總結了框架與架構的區別。站在框架之外,看框架,看框架的共同特征與功用。由于框架所帶來的問題,以性能可擴展問題,相對嚴重,所以分析性能的改造方向,總結了六大點。包括框架介紹,的使用,以及。
六、各項實踐,性能評測
下面進入性能評測,評測我們相對就比較快速一些。直接用ab命令,來測試上面的所提及的一些改進。
以下評測,所有測試頁面,均為:http://hjvote.app.ucai.cn/index.php 命令行為:
ab -c 20 -n 1000 http://hjvote.app.ucai.cn/index.php
6.1 、冷啟動
1、冷啟動,比如我新啟動的php-fpm,關掉opcache,關掉xhprof
Concurrency Level: 20 Time taken for tests: 4.981 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 478000 bytes HTML transferred: 109000 bytes Requests per second: 200.78 [#/sec] (mean) Time per request: 99.612 [ms] (mean) Time per request: 4.981 [ms] (mean, across all concurrent requests) Transfer rate: 93.72 [Kbytes/sec] received
6.2、第二次
2、第二次,條件同上。
Concurrency Level: 20 Time taken for tests: 4.537 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 478000 bytes HTML transferred: 109000 bytes Requests per second: 220.42 [#/sec] (mean) Time per request: 90.736 [ms] (mean) Time per request: 4.537 [ms] (mean, across all concurrent requests) Transfer rate: 102.89 [Kbytes/sec] received **6.3、打開opcache第一次** Concurrency Level: 20 Time taken for tests: 1.591 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 478000 bytes HTML transferred: 109000 bytes Requests per second: 628.67 [#/sec] (mean) Time per request: 31.813 [ms] (mean) Time per request: 1.591 [ms] (mean, across all concurrent requests) Transfer rate: 293.46 [Kbytes/sec] received
6.4、第二次,條件同上
Concurrency Level: 20 Time taken for tests: 1.254 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 478000 bytes HTML transferred: 109000 bytes Requests per second: 797.70 [#/sec] (mean) Time per request: 25.072 [ms] (mean) Time per request: 1.254 [ms] (mean, across all concurrent requests) Transfer rate: 372.36 [Kbytes/sec] received
6.5、對比再打開xhprof
Concurrency Level: 20 Time taken for tests: 1.254 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 478000 bytes HTML transferred: 109000 bytes Requests per second: 797.44 [#/sec] (mean) Time per request: 25.080 [ms] (mean) Time per request: 1.254 [ms] (mean, across all concurrent requests) Transfer rate: 372.24 [Kbytes/sec] received
6.6、打開XHprof,關掉Opcache
對于這個簡單的頁面,沒有明顯惡化,我們去掉Opcache,打開xhprof
Concurrency Level: 20 Time taken for tests: 12.103 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 595000 bytes HTML transferred: 226000 bytes Requests per second: 82.62 [#/sec] (mean) Time per request: 242.065 [ms] (mean) Time per request: 12.103 [ms] (mean, across all concurrent requests) Transfer rate: 48.01 [Kbytes/sec] received
6.7、第二次、條件同上
Concurrency Level: 20 Time taken for tests: 9.298 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 595000 bytes HTML transferred: 226000 bytes Requests per second: 107.55 [#/sec] (mean) Time per request: 185.952 [ms] (mean) Time per request: 9.298 [ms] (mean, across all concurrent requests) Transfer rate: 62.50 [Kbytes/sec] received
在沒有opcache的情況下,XHProf的加入,導致用戶急劇變慢。
6.8、關掉xhprof HHVM第一次
Concurrency Level: 20 Time taken for tests: 1.142 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 521000 bytes HTML transferred: 109000 bytes Requests per second: 875.84 [#/sec] (mean) Time per request: 22.835 [ms] (mean) Time per request: 1.142 [ms] (mean, across all concurrent requests) Transfer rate: 445.62 [Kbytes/sec] received
6.9、 第二次,條件同上
Concurrency Level: 20 Time taken for tests: 0.852 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 521000 bytes HTML transferred: 109000 bytes Requests per second: 1173.42 [#/sec] (mean) Time per request: 17.044 [ms] (mean) Time per request: 0.852 [ms] (mean, across all concurrent requests) Transfer rate: 597.03 [Kbytes/sec] received 什么感覺?這種數字的差距是不是可以用震撼來形容?通過評測對比,我們對于opcache、hhvm和一般php-fpm性能心里也就有數了。同時也發現,在頁面上開啟XHProf,會導致網頁性能急劇下降,所以不要在生產環境對多人開啟XHProf。或者會帶來非常不好的用戶體驗。
七、自有框架的設計
好的,看完了性能評測,我們來過了一下如果設計一個自有的框架需要哪些元素,或者說需要哪些內容。
1、首先對目錄結構進行一個劃分,確定目錄層次結構
–app 命令行應用
–data 存放數據上傳
–lib 庫函數
–template 模板
–conf 各種配置
–doc 文檔,SQL
–log 日志
–test 測試代碼
–ctemplate 編譯后的模板
–htdocs Web主目錄
大家能看到,htdocs 同其他目錄,比如 doc、app目錄為什么要并列?這是安全性的考慮,想一想,否則的話,你的表定義被人下走了。你的后臺程序,可能會被用戶執行。
2、其次來看一下類的層次結構。
下圖是應用程序各個類的分層。
最基層的應用程序類,其實就是一個骨架。包括了getParam(取得參數,無論命令行,還是Web訪問,都需要有參數分析)。checkParam(參數檢測)、checkAuth(權限檢測,比如是否是需要登錄的一個頁面)、outputPage等這些方法,全是空方話,但是由一個run方法串起來。如下:
public function run() { $this->getPara(); $this->checkPara(); $this->checkAuth(); $this->main(); $this->outputPage(); $this->exitApp(); }
應用程序基類DCore_BaseApp.php的子類又分為三個,一個負責命令行程序的處理DCore_ConsoleApp.php,另外一個負責像移動應用、開放平臺Api之類的數據處理DCore_ApiApp.php ,而第三個,則是DCore_WebApp.php, 我們所在瀏覽器上所訪問的應用,由這個應用程序類派生出來頁面類。而DCore_AdminApp.php,是管理后臺應用程序類的基類。因為后端一般有不一樣的權限認證機制。這樣也是為了把前后臺的應用程序類區分得更加清楚。
這樣可以看到,整體結構非常清晰。
好,那最后我們再來看一下,需要編寫哪些類庫。
在我們的框架中,編寫了這些。
?1、常用工具函數庫
實現字符串的常用操作封裝,比如中文取字串,繁簡轉換、編碼轉換
?2、模板引擎
可以簡化為包含PHP,在我們自己開發的這個框架中,支持了模板編譯,其實模板編譯很簡單,就是將一些特定的語法,換成PHP代碼,然后還是包含PHP
?3、路由控制,靜態化
用戶可以將路徑改成搜索引擎更友好的路徑,程序也能解析正確。
?4、后端數據請求控制
用于對后端一些公用操作的封裝,比如數據庫,比如Memcached,這樣的封裝帶來的好處是,如果一旦發生升級或者替換的時候,修改的代碼相對最少。比如你不用到處去改mysql_query,只需要修改當前這個庫文件即可以了。
八、總結
好的,今天的課程就到這里。總結一下,我們講了如下幾點:
1、5月課程尤其是5月份框架課程的總結。總結了框架與架構的區別。
2、站在PHP框架之外,看框架,看框架的共同特征與功用。
3、以PHP框架為例,講框架所不能解決或者帶來的問題。
4、由于框架所帶來的問題,以性能、可擴展問題,相對嚴重,所以分析PHP性能 的改造方向,總結了六大點。
5、分別演示了這六大點的改進實踐。包括Yaf、Phalcon框架介紹,zephir的使用,以及HHVM。
6、匯總六大點的改進,并做了相關的性能評測。能看到,使用不同的技術差別巨大,所以我們要在穩定可靠的情況下,盡可能采用最好的技術。
7、最后講解了開發一個自有框架,一般都是一個什么樣的思路。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20785.html
摘要:中國互聯網絡信息中心發布的中國互聯網絡發展狀況統計報告顯示,截至年月,我國網民規模達億人,微信月活億支付寶月活億百度月活億另一方面,中國手機占智能手機整體的比例超過,月活約億。在年末正式發布了面向未來的跨端的。 開源中國專訪:Chameleon原理首發,其它跨多端統一框架都是假的? 原創: 嘉賓-張楠 開源中國 以往我們說某一功能跨多端,往往是指在諸如 PC、移動等不同類型的設備之...
閱讀 2569·2021-11-23 09:51
閱讀 2481·2021-09-30 09:48
閱讀 1076·2021-09-10 10:51
閱讀 2213·2021-08-12 13:22
閱讀 3568·2021-08-11 10:24
閱讀 2166·2019-08-30 15:55
閱讀 646·2019-08-30 14:05
閱讀 3211·2019-08-30 13:03