欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

php數(shù)據(jù)計算框架 php數(shù)據(jù)結(jié)構(gòu)和算法

新手php框架要先學laravel好還是tp?

對于新手來說是學習php框架最佳的選擇是tp

站在用戶的角度思考問題,與客戶深入溝通,找到鎮(zhèn)坪網(wǎng)站設(shè)計與鎮(zhèn)坪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋鎮(zhèn)坪地區(qū)。

thinkphp,國內(nèi)的PHP框架,具有簡單,快速,兼容等優(yōu)點,。從5.0版本開始,號稱為API開發(fā)而設(shè)計的高性能框架。配置開發(fā)也是非常簡單,一般下載框架就可以直接開發(fā),開發(fā)代碼風格也符合國人思想,所以簡單,快捷,適合新手的php框架。

Laravel框架,是當今最熟練,流行和廣泛使用的開源框架之一。Laravel具有多種功能,例如模板引擎,MVC架構(gòu)支持,安全性高,開發(fā)者工具,數(shù)據(jù)庫遷移等。這些Laravel高級功能使它比其他PHP框架更好。新手為什么不強烈推薦呢?主要是Laravel框架是一個國際的框架,很多是英文,雖然有翻譯文檔,但是對于英語不好的新手來說,更是折磨。所以比較建議tp

php 框架怎么計算腳本運行時間

?php

//生命一個計算腳本運行時間的類

class Timer{

private $startTime = 0; //保存腳本開始執(zhí)行時的時間(以微秒的形式保存)

private $stopTime = 0; //保存腳本結(jié)束執(zhí)行時的時間(以微秒的形式保存)

//在腳本開始處調(diào)用獲取腳本開始時間的微秒值

function start(){

$this-startTime = microtime(true); //將獲取的時間賦值給成員屬性$startTime

}

//腳本結(jié)束處嗲用腳本結(jié)束的時間微秒值

function stop(){

$this-stopTime = microtime(true); //將獲取的時間賦給成員屬性$stopTime

}

//返回同一腳本中兩次獲取時間的差值

function spent(){

//計算后4舍5入保留4位返回

return round(($this-stopTime-$this-startTime),4);

}

}

$timer= new Timer();

$timer-start(); //在腳本文件開始執(zhí)行時調(diào)用這個方法

usleep(1000); //腳本的主題內(nèi)容,這里可以休眠一毫秒為例

$timer-stop(); //在腳本文件結(jié)束處調(diào)用這個方法

echo "執(zhí)行該腳本用時b".$timer-spent()."/b";

?

PHP的性能探討和測試

緣起

關(guān)于PHP 很多人的直觀感覺是PHP是一種靈活的腳本語言 庫類豐富 使用簡單 安全 非常適合WEB開發(fā) 但性能低下 PHP的性能是否真 的就如同大家的感覺一樣的差呢?本文就是圍繞這么一個話題來進行探討的 從源碼 應(yīng)用場景 基準性能 對比分析等幾個方面深入分析PHP之性能問題 并通 過真實的數(shù)據(jù)來說話

從原理分析PHP性能

從原理分析PHP的性能 主要從以下幾個方面 內(nèi)存管理 變量 函數(shù) 運行機制來進行分析

內(nèi)存管理

類似Nginx的內(nèi)存管理方式 PHP在內(nèi)部也是基于內(nèi)存池 并且引入內(nèi)存池的生命周期概念 在內(nèi)存池方面 PHP對PHP腳本和擴展的所有內(nèi) 存相關(guān)操作都進行了托管 對大內(nèi)存和小內(nèi)存的管理采用了不同的實現(xiàn)方式和優(yōu)化 具體可以參考以下文檔 在內(nèi)存分配和回收的生命周期內(nèi) PHP采用一次初始化申請+動態(tài)擴容+內(nèi)存標識回收機制 并且在每次請求結(jié)束后直 接對內(nèi)存池進行重新mask

變量

總所周知 PHP是一種弱變量類型的語言 所以在PHP內(nèi)部 所有的PHP變量都對應(yīng)成一種類型Zval 其中具體定義如下

圖一PHP變量

在變量方面 PHP做了大量的優(yōu)化工作 比如說Reference counting和copy on writer機制 這樣能夠保證內(nèi)存使用上的優(yōu)化 并且減少內(nèi)存拷貝次數(shù)(請參考) 在數(shù)組方面 PHP內(nèi)部采用高效的hashtable來實現(xiàn)

函數(shù)

在PHP內(nèi)部 所有的PHP函數(shù)都回轉(zhuǎn)化成內(nèi)部的一個函數(shù)指針 比如說擴展中函數(shù)

ZEND_FUNCTION?(?my_function?);//類似function?my_function(){}

在內(nèi)部展開后就會是一個函數(shù)

void?zif_my_function?(?INTERNAL_FUNCTION_PARAMETERS?);

void?zif_my_function(

int?ht

zval?*?return_value

zval?*?this_ptr

int?return_value_used

zend_executor_globals?*?executor_globals

);

從這個角度來看 PHP函數(shù)在內(nèi)部也是對應(yīng)一個函數(shù)指針

運行機制

在話說PHP性能的時候 很多人都會說“C/C++是編譯型 JAVA是半編譯型 PHP是解釋型” 也就是說PHP是先動態(tài)解析再代碼運行的 所以從這個角度來看 PHP性能必然很差

的確 從PHP腳本運行來輸出 的確是一個動態(tài)解析再代碼運行的過程 具體來說 PHP腳本的運行機制如下圖所示

圖二 PHP運行機制

PHP的運行階段也分成三個階段

Parse 語法分析階段

Compile 編譯產(chǎn)出opcode中間碼

Execute 運行 動態(tài)運行進行輸出

所以說 在PHP內(nèi)部 本身也是存在編譯的過程 并且據(jù)此產(chǎn)生了大量的opcode cache工具 比如說apc eacc xcache等等 這些opcode cache在生產(chǎn)環(huán)境基本上在標配 基于opcode cache 能到做到“PHP腳本編譯一次 多次運行”的效果 從這點上 PHP就和JAVA的半編譯機制非常類似

所以 從運行機制上來看 PHP的運行模式和JAVA是非常類似的 都是先產(chǎn)生中間碼 然后運行在不同虛擬機上

動態(tài)運行

從上面的幾個分析來看 PHP在內(nèi)存管理 變量 函數(shù) 運行機制等幾個方面都做了大量的工作 所以從原理來看 PHP 不應(yīng)該存在性能問題 性能至少也應(yīng)該和Java 比較接近

這個時候就不得不談PHP動態(tài)語言的特性所帶來的性能問題了 由于PHP是動態(tài)運行時 所以所有的變量 函數(shù) 對象調(diào)用 作用域?qū)崿F(xiàn)等等都是在 執(zhí)行階段中才確定的 這個從根本上決定了PHP性能中很難改變的一些東西 在C/C++等能夠在靜態(tài)編譯階段確定的變量 函數(shù) 在PHP中需要在動態(tài)運行 中確定 也就決定了PHP中間碼不能直接運行而需要運行在Zend Engine上

說到PHP變量的具體實現(xiàn) 又不得不說一個東西了 Hashtable Hashtable可以說在PHP靈魂之一 在PHP內(nèi)部廣泛用到 包含變量符號棧 函數(shù)符號棧等等都是基于hashtable的

以PHP變量為例來說明下PHP的動態(tài)運行特點 比如說代碼

?php

$var?=?“hello ?blog xiuwz ”;

?

該代碼的執(zhí)行結(jié)果就是在變量符號棧(是一個hashtable)中新增一個項

當要使用到該變量時候 就去變量符合棧中去查找(也就是變量調(diào)用對出了一個hash查找的過程)

同樣對于函數(shù)調(diào)用也基本上類似有一個函數(shù)符號棧(hashtable)

其實關(guān)于動態(tài)運行的變量查找特點 在PHP的運行機制中也能看出一些 PHP代碼通過解釋 編譯后的流程下圖

圖 PHP運行實例

從上圖可以看出 PHP代碼在pile之后 產(chǎn)出的了類符號表 函數(shù)符號表 和OPCODE 在真正執(zhí)行的時候 zend Engine會根據(jù)op code去對應(yīng)的符號表中進行查找 處理

從某種程度上 在這種問題的上 很難找到解決方案 因為這是由于PHP語言的動態(tài)特性所決定的 但是在國內(nèi)外也有不少的人在尋找解決方案 因為 通過這樣 能夠從根本上完全的優(yōu)化PHP 典型的列子有facebook的hiphop

結(jié)論

從上面分析來看 在基礎(chǔ)的內(nèi)存管理 變量 函數(shù) 運行機制方面 PHP本身并不會存在明顯的性能差異 但由于PHP的動態(tài)運行特性 決定了 PHP和其他的編譯型語言相比 所有的變量查找 函數(shù)運行等等都會多一些hash查找的CPU開銷和額外的內(nèi)存開銷 至于這種開銷具體有多大 可以通過后 續(xù)的基準性能和對比分析得出

因此 也可以大體看出PHP不太適合的一些場景 大量計算性任務(wù) 大數(shù)據(jù)量的運算 內(nèi)存要求很嚴格的應(yīng)用場景 如果要實現(xiàn)這些功能 也建議通過擴展的方式實現(xiàn) 然后再提供鉤子函數(shù)給PHP調(diào)用 這樣可以減低內(nèi)部計算的變量 函數(shù)等系列開銷

基準性能

對于PHP基準性能 目前缺少標準的數(shù)據(jù) 大多數(shù)同學都存在感性的認識 有人認為 QPS就是PHP的極限了 此外 對于框架的性能和框架對性能的影響很沒有響應(yīng)的權(quán)威數(shù)字

本章節(jié)的目的是給出一個基準的參考性能指標 通過數(shù)據(jù)給大家一個直觀的了解

具體的基準性能有以下幾個方面

裸PHP性能 完成基本的功能

裸框架的性能 只做最簡單的路由分發(fā) 只走通核心功能

標準模塊的基準性能 所謂標準模塊的基準性能 是指一個具有完整服務(wù)模塊功能的基準性能

環(huán)境說明

測試環(huán)境

Uname aPnux db forum test db baidu _ # SMP Wed Aug   : : CST x _ x _ x _ GNU/Pnux

Red Hat Enterprise Pnux AS release (Nahant Update )

Intel(R) Xeon(R) CPU?????????? E ? @ GHz

軟件相關(guān)

Nginx nginx version: nginx/ ? built by gcc (Red Hat )

Php (采用php fpm)

PHP (cP) (built: Mar? : : )

Copyright (c) The PHP Group

Zend Engine v Copyright (c) Zend Technologies

with eAccelerator v Copyright (c) eAccelerator by eAccelerator

bingo

PHP框架

其他說明

目標機器的部署方式 nginx php fpm php腳本

測試壓力機器和目標機器獨立部署

裸PHP性能

最簡單的PHP腳本

?php

require_once?‘ /actions/indexAction php’;

$objAction?=?new?indexAction();

$objAction init();

$objAction execute();

?

Acitons/indexAction php里面的代碼如下

?php

class?indexAction

{

pubPc?function?execute()

{

echo?‘hello ?world!’;

}

}

?

通過壓力工具測試結(jié)果如下

裸PHP框架性能

為了和 的對比 基于bingo 框架實現(xiàn)了類似的功能 代碼如下

?php

require_once?‘Bingo/Controller/Front php’;

$objFrontController?=?Bingo_Controller_Front::getInstance(array(

‘a(chǎn)ctionDir’?=?‘ /actions’

));

$objFrontController dispatch();

壓力測試結(jié)果如下

從該測試結(jié)果可以看出 框架雖然有一定的消耗 但對整體的性能來說影響是非常小的

標準PHP模塊的基準性能

所謂標準PHP模塊 是指一個PHP模塊所必須要具體的基本功能

路由分發(fā)

自動加載

LOG初始化Notice日志打印 所以的UI請求都一條標準的日志

錯誤處理

時間校正

自動計算每個階段耗時開銷

編碼識別編碼轉(zhuǎn)化

標準配置文件的解析和調(diào)用

采用bingo 的代碼自動生成工具產(chǎn)生標準的測試PHP模塊 test

測試結(jié)果如下

結(jié)論

從測試數(shù)據(jù)的結(jié)論來看 PHP本身的性能還是可以的 基準性能完全能夠達到幾千甚至上W的QPS 至于為什么在大多數(shù)的PHP模塊中表現(xiàn)不佳 其實這個時候更應(yīng)該去找出系統(tǒng)的瓶頸點 而是簡單的說OK PHP不行 那我們換C來搞吧 (下一個章節(jié) 會通過一些例子來對比 采用C來處理不見得有特 別的優(yōu)勢)

通過基準數(shù)據(jù) 可以得出以下幾個具體的結(jié)論

PHP本身性能也很不錯 簡單功能下能夠達到 QPS 極限也能過W

PHP框架本身對性能影響非常有限 尤其是在有一定業(yè)務(wù)邏輯和數(shù)據(jù)交互的情況下 幾乎可以忽略

一個標準的PHP模塊 基準性能能夠達到 QPS( cpu idle)

對比分析

lishixinzhi/Article/program/PHP/201311/21287

網(wǎng)頁標題:php數(shù)據(jù)計算框架 php數(shù)據(jù)結(jié)構(gòu)和算法
文章URL:http://www.chinadenli.net/article2/dddpsic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版自適應(yīng)網(wǎng)站GoogleApp設(shè)計全網(wǎng)營銷推廣服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管