入學php一個月第一次測試總結,入學php一個月第一次測試總結怎麼寫

本文目錄一覽:

PHP的性能探討和測試

緣起

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

從原理分析PHP性能

從原理分析PHP的性能 主要從以下幾個方面 內存管理 變數 函數 運行機制來進行分析

內存管理

類似Nginx的內存管理方式 PHP在內部也是基於內存池 並且引入內存池的生命周期概念 在內存池方面 PHP對PHP腳本和擴展的所有內 存相關操作都進行了託管 對大內存和小內存的管理採用了不同的實現方式和優化 具體可以參考以下文檔 在內存分配和回收的生命周期內 PHP採用一次初始化申請+動態擴容+內存標識回收機制 並且在每次請求結束後直 接對內存池進行重新mask

變數

總所周知 PHP是一種弱變數類型的語言 所以在PHP內部 所有的PHP變數都對應成一種類型Zval 其中具體定義如下

圖一PHP變數

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

函數

在PHP內部 所有的PHP函數都迴轉化成內部的一個函數指針 比如說擴展中函數

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

在內部展開後就會是一個函數

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函數在內部也是對應一個函數指針

運行機制

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

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

圖二 PHP運行機制

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

Parse 語法分析階段

Compile 編譯產出opcode中間碼

Execute 運行 動態運行進行輸出

所以說 在PHP內部 本身也是存在編譯的過程 並且據此產生了大量的opcode cache工具 比如說apc eacc xcache等等 這些opcode cache在生產環境基本上在標配 基於opcode cache 能到做到「PHP腳本編譯一次 多次運行」的效果 從這點上 PHP就和JAVA的半編譯機制非常類似

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

動態運行

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

這個時候就不得不談PHP動態語言的特性所帶來的性能問題了 由於PHP是動態運行時 所以所有的變數 函數 對象調用 作用域實現等等都是在 執行階段中才確定的 這個從根本上決定了PHP性能中很難改變的一些東西 在C/C++等能夠在靜態編譯階段確定的變數 函數 在PHP中需要在動態運行 中確定 也就決定了PHP中間碼不能直接運行而需要運行在Zend Engine上

說到PHP變數的具體實現 又不得不說一個東西了 Hashtable Hashtable可以說在PHP靈魂之一 在PHP內部廣泛用到 包含變數符號棧 函數符號棧等等都是基於hashtable的

以PHP變數為例來說明下PHP的動態運行特點 比如說代碼

?php

$var = 「hello  blog xiuwz 」;

?

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

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

同樣對於函數調用也基本上類似有一個函數符號棧(hashtable)

其實關於動態運行的變數查找特點 在PHP的運行機制中也能看出一些 PHP代碼通過解釋 編譯後的流程下圖

圖 PHP運行實例

從上圖可以看出 PHP代碼在pile之後 產出的了類符號表 函數符號表 和OPCODE 在真正執行的時候 zend Engine會根據op code去對應的符號表中進行查找 處理

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

結論

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

因此 也可以大體看出PHP不太適合的一些場景 大量計算性任務 大數據量的運算 內存要求很嚴格的應用場景 如果要實現這些功能 也建議通過擴展的方式實現 然後再提供鉤子函數給PHP調用 這樣可以減低內部計算的變數 函數等系列開銷

基準性能

對於PHP基準性能 目前缺少標準的數據 大多數同學都存在感性的認識 有人認為 QPS就是PHP的極限了 此外 對於框架的性能和框架對性能的影響很沒有響應的權威數字

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

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

裸PHP性能 完成基本的功能

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

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

環境說明

測試環境

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

軟體相關

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!』;

}

}

?

通過壓力工具測試結果如下

裸PHP框架性能

為了和 的對比 基於bingo 框架實現了類似的功能 代碼如下

?php

require_once 『Bingo/Controller/Front php』;

$objFrontController = Bingo_Controller_Front::getInstance(array(

『actionDir』 = 『 /actions』

));

$objFrontController dispatch();

壓力測試結果如下

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

標準PHP模塊的基準性能

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

路由分發

自動載入

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

錯誤處理

時間校正

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

編碼識別編碼轉化

標準配置文件的解析和調用

採用bingo 的代碼自動生成工具產生標準的測試PHP模塊 test

測試結果如下

結論

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

通過基準數據 可以得出以下幾個具體的結論

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

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

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

對比分析

lishixinzhi/Article/program/PHP/201311/21287

php的優點總結 php有哪些優點

PHP優點:

1.入門快,有其它語言基礎的程序員二周左右的時間就可以入門,一個月左右的時間基本上就可以開發簡單的項目了。

2.開發成本低,PHP最經典的組合就是:Linux + Apache + MySQL + PHP。非常適合開發中小型的web應用,因為上手容易,所以開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。

3.PHP是解釋性的腳本語言,寫完代碼以後即可以執行,不像c,java,c++等語言還需要去編譯執行,相對來說比較節省時間。

4.相對來說,PHP程序員的薪水的平均工資要比c,c++,java程序員的平均工資要低一些,特別是對於中小型企業來說可以節約一些成本。

5.配置及部署相對簡單一些,對比JAVA開發來說,JAVA開發的配置就複雜多了,什麼Structs、Spring、Hibernate、Tomcat等等很多地方都需要配置,甚至你在程序中每寫一個SQL語句都需要先在Hibernate中配置一下,有時重新部署一個class文件或jar文件還可能需要重啟Web伺服器(Tomcat或Resin或其它的Web伺服器)使新部署的庫文件生效。

PHP開發中主要是PHP自身的配置文件及Web伺服器的配置(如Apache或Nginx或Lighttpd等),相對於JAVA來說還是簡單一些,而且新修改了文件以後不需要重新啟動Web即可以立即生效。

6.有很多開源的框架或開源的系統可以使用,比如比較知名的開源框架有Zend Framework、CakePHP、CodeIgniter、symfony、thinkphp等,開源論壇有Discuz!、Phpwind等,開源博客WordPress,開源網店系統如Ecshop、ShopEx等,開源的SNS系統如UCHome、ThinkSNS等。

內容擴展

1. 跨平台,性能優越,跟Linux/Unix結合別跟Windows結合性能強45%,並且和很多免費的平台結合非常省錢,比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)結合,或者數據應用夠大可以考慮換 PostgreSQL或者Oracle,支持N種資料庫。(N = 10)

2. 語法簡單,如果有學習C和Perl的很容易上手,並且跟ASP有部分類似。有成熟的開發工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。

3. 目前主流技術都支持,比如WebService、Ajax、XML等等,足夠應用。

4. 有比較完整的支持,比如使用ADODB或者PEAR::DB做資料庫抽象層,用Smarty或者smart template做模板層,如果是PHP 5.1的話,還能夠使用PDO(PHP Data Object)來訪問資料庫。

5. 有很多成熟的框架,比如支持MVC的框架:phpMVC,支持類似ASP.net的事件驅動的框架:Prado,支持類似Ruby On Rails的快速開發的框架:Cake等等,足夠滿足你的應用需求。

6. PHP 5已經有成熟的面向對象體系,能夠適應基本的面向對象要求。適合開發大型項目。

7. 有成熟的社區來支持PHP的開發。

8. 目前已經很多大型應用都是使用PHP,比如淘寶網、Yahoo、163、Sina等等大型門戶,很多選用PHP來作為他們的開發語言,所以大型門戶都能夠選用它,我想足夠能夠你的使用了。

9. 有很多開源的框架或開源的系統可以使用,比如比較知名的開源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,開源論壇有Discuz!、Phpwind等,開源博客 WordPress,開源網店系統如Ecshop、ShopEx等,開源的SNS系統如UCHome、ThinkSNS等。

有沒有完整的,簡要的PHP入門總結

可以百度找,有很多。

希望我的回答可以幫到你,有什麼不懂可以追問。

php軟體開發反思總結怎麼寫

就描述一下你這個軟體是怎麼寫出來的,在開發的過程中都遇到了哪些問題,然後又都是怎麼解決這些問題的!還可以講講你這個軟體開發的難點,以及這個軟體的亮點等

php代碼優化及php相關問題總結

1,在函數中,傳遞數組時

使用

return

比使用

global

要高效

比如

function

userloginfo($usertemp){

$detail=explode(“|”,$usertemp);

return

$detail;

}

$login=userloginfo($userdb);

function

userloginfo($usertemp){

global

$detail;

$detail=explode(“|”,$usertemp);

}

userloginfo($userdb);

要高效

2,(這個代碼用於得到程序目錄對應的網址,推薦使用)

$urlarray=explode(‘/’,$HTTP_SERVER_VARS[‘REQUEST_URI’]);

$urlcount=count($urlarray);unset($urlarray[$urlcount-1]);

$ofstarurl=’http://’.$HTTP_SERVER_VARS[‘HTTP_HOST’].implode(‘/’,$urlarray);

這段代碼比

$pre_urlarray=explode(‘/’,$HTTP_SERVER_VARS[‘HTTP_REFERER’]);

$pre_url=array_pop($pre_urlarray);

要高效

3,在循環中判斷時,數值判斷使用恆等要比等於高效

$a=2;$b=2;

比如

if($a==$b)$c=$a;

if($a===$b)$c=$a;

高效

4,mysql

查詢時盡量使用where

in

少用

limit

limit查多記錄的前幾條,

速度很快,

但是查詢最面幾條就會慢

使用in

.在查詢連續性記錄,非常快,

非連續性記錄第一次運行會稍微慢一點,但是之後將比較快!

5,NT伺服器數據操作穩定性不及unix/linux

6,輸出前使用盡量使用

ob_start();

可以加快輸出速度,適用NT或nuli/linux,對unlix類伺服器

如果使用

ob_start(‘ob_gzhandler’);輸出效率將更高

7,判斷的時候盡量使用if($a==他的值)

否定的時候盡量使用if(empty($a)),因為這樣程序運行更快速

8,使用不等時

!=

效率相當

9,個人經驗得

使用

$a=”11111111111111″;

的效率和

$a=’11111111111111′;

相當.並不象書本說的相差很大

10,使用規範的SQL語句,

會有利於MySQL的解析

11,使用

if($online){

$online1=$online;

setcookie(‘online1’,$online,$cookietime,$ckpath,$ckdomain,$secure);

}

COOKIE將馬上生效

使用

if($online)

setcookie(‘online1’,$online,$cookietime,$ckpath,$ckdomain,$secure);

COOKIE需要再刷新一次才能生效

12,使用

$handle=fopen($filename,wb);

flock($handle,LOCK_SH);

$filedata=fread($handle,filesize($filename));

fclose($handle);

file($filename);

無論在速度還是穩定上都要優秀

13,截斷字元串優化函數(可避免?字元出現)

function

substrs($content,$length)

{

if(strlen($content)$length){

$num=0;

for($i=0;$i$length-3;$i++)

{

if(ord($content[$i])127)$num++;

}

$num%2==1

?

$content=substr($content,0,$length-4):$content=substr($content,0,$length-3);

$content.=’

…’;

}

return

$content;

}

比如$newarray[1]=substrs($newarray[1],25);

14,程序中屏蔽大小寫

for

($asc=65;$asc=90;$asc++)

{

//strtolower()

此函數在一些伺服器會產生亂碼!

if

(strrpos($regname,chr($asc))!==false)

{

$error=”為了避免用戶名混亂,用戶名中禁止使用大寫字母,請使用小寫字母”;

$reg_check=0;

}

}

15,不使用

file();和不使用

fget();(不穩定或速度慢)

取一數組函數

function

openfile($filename,$method=”rb”)

{

$handle=@fopen($filename,$method);

@flock($handle,LOCK_SH);

@$filedata=fread($handle,filesize($filename));

@fclose($handle);

$filedata=str_replace(“\n”,”\nofstar:”,$filedata);

$filedb=explode(“ofstar:”,$filedata);

//array_pop($filedb);

$count=count($filedb);

if($filedb[$count-1]==”){unset($filedb[$count-1]);}

return

$filedb;

}

//這個函數雖然代碼比較多,不過在速度和穩定性上優勢很大!

先寫到這

以上完全個人的一點小結,,不過正確性都經過反覆測試,如果有朋友質疑,請先測試,再討論,謝謝!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/270544.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:37
下一篇 2024-12-16 13:37

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • JDK Flux 背壓測試

    本文將從多個方面對 JDK Flux 的背壓測試進行詳細闡述。 一、Flux 背景 Flux 是 JDK 9 對響應式編程的支持。它為響應式編程提供了一種基於推拉模型的方式,以支持…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Powersploit:安全評估與滲透測試的利器

    本文將重點介紹Powersploit,並給出相關的完整的代碼示例,幫助安全人員更好地運用Powersploit進行安全評估和滲透測試。 一、Powersploit簡介 Powers…

    編程 2025-04-28
  • Python介面自動化測試

    本文將從如下多個方面對Python編寫介面自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 介面自動化測試是軟體測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • HR測試用例生成工具:hrtest的全面解析

    本文將從使用、功能、優點和代碼示例等多個方面詳細介紹HR測試用例生成工具hrtest。 一、使用 HR測試用例生成工具hrtest是一款可以自動生成測試用例的工具,省去了繁瑣的手動…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27

發表回復

登錄後才能評論