国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php性能優(yōu)化之php語言級的性能優(yōu)化一

2020-03-22 19:27:12
字體:
供稿:網(wǎng)友
  • 對于這個問題首先我們要知道影響php的性能的原因是什么?也就是

    1 什么情況下會出現(xiàn)php性能問題?

    1php語法使用不當(包括某些業(yè)務(wù)可以使用php 本身自帶的函數(shù)來處理)

    2使用php語言做了它不擅長的事

    3用php語言鏈接的服務(wù)器不給力(當然如果是localhost也就是你本地配置比較差哈,建議換本吧,哈哈)

    4php自身的短板 (PHP 自身就做不了)

    5我們也不知道的問題 (囧)

    2 php 性能問題簡介之php的性能問題的解決方向

    從困難度由淺到深分別為:

    1 Php 語言級的性能優(yōu)化

    2 Php 周邊問題的性能優(yōu)化 (比如說mysql nginx|apache)

    3 Php 語言資深分析,優(yōu)化(ps 主要指的是底層的c代碼)

    下面針對php語言級的性能優(yōu)化做實例討論,對標題里面說的內(nèi)容進行一個測試,接下來要書寫兩個文件 bad.php, goods.php

    我們要測試的是合并兩個數(shù)組的操作(測試工具 apache ab test)

    bad.php

    思路:

    先將數(shù)組1逐個加入到目標數(shù)組中;

    之后,遍歷數(shù)組2,對比數(shù)組2的元素是否在數(shù)組1中出現(xiàn),如果沒有則插入到目標數(shù)組,否則忽略掉

    <?php//準備兩個內(nèi)容隨機的數(shù)組$arr1 = $arr2 = $arr_merged = array();//接下來隨機給兩個數(shù)組賦值for ( $i=0; $i<rand(1000,2000); $i++) {	$arr1[] = rand();}for ( $i=0; $i<rand(1000,2000); $i++) {	$arr2[] = rand();}//開始循環(huán)比較foreach ( $arr1 as $v ) {	$arr_merged[]  = $v;}foreach ( $arr2 as $v ) {	if(!in_array($v, $arr_merged)){		$arr_merged[]  = $v;	}}var_dump($arr_merged);

    goods.php

    思路:

    隨機生成兩個數(shù)組,在打亂順序

    之后,使用array_merge 合并

    <?php//準備兩個內(nèi)容隨機的數(shù)組$arr1 = $arr2 = range(1000, 2000);$arr_merged = array();//接下來隨機給兩個數(shù)組賦值shuffle($arr1);shuffle($arr2);$arr_merged = array_merge($arr1, $arr2);var_dump($arr_merged);

    3 使用 ab 測試兩個php腳本的速度:(ps:驚人的時刻開始了)

    bad.php

    goods.php

    對于這兩個測試,我們明顯的看出這的差的不是一點半點啊,在執(zhí)行bad.php 的時候我明顯的感覺電腦的風扇翁的一下,你懂得!

    bad.php 每秒響應(yīng)174個請求, 每個請求處理572ms

    goods.php 每秒響應(yīng)4050個請求, 每個請求處理24ms

    ps: 如果還要小伙伴在使用bad的寫法,趕快改掉它,小心不要你的領(lǐng)導知道哦!


    4 究其原因

    對于這個結(jié)果我也很吃驚,但是事實就在眼前,沒辦法啊,那么到底為什么會有這樣的效果呢,咱們繼續(xù)一探究竟:

    *.php(php代碼) -----Scanner(zend引擎逐行掃描變?yōu)閦end可以識別的語法)----> exprs

    -----parser(解析為opcode)-----> opcodes ------exec(執(zhí)行最后輸出)-------> output

    可以知道 一個php文件執(zhí)行zend需要先掃描,然后解析為opcode 在執(zhí)行輸出,問題就出在這里,當我們使用php自身的函數(shù)的時候其實他就屬于zend 引擎,所以zend 解析起來就比較順手,速度那叫個快(goods.php), 但是當執(zhí)行bad.php 的時候就會比較慢,因為讀別人寫的代碼肯定沒有讀自己寫的代碼快大家說對吧,所以還是使用原創(chuàng),不要自己造輪子比較好啊!

    多說一點,這也就是為什么現(xiàn)在好些Php擴展(比如 apc)都來緩存opcode 因為這樣就少了掃描與解析的環(huán)節(jié),那肯定是快了!

    5 總結(jié)

    優(yōu)化點:少寫代碼,多用php自身提供的能力

    性能問題:

    自己寫的代碼冗余較多,可讀性不好,并且性能低

    為什么性能低?

    php代碼需要編譯解析為底層語言, 這一過程每次請求都會 處理一遍,開銷大。

    好方法:

    多使用php內(nèi)置變量,常量, 函數(shù)(spl 可以帶給您好像好用的功能)

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 从江县| 昌吉市| 湟中县| 株洲县| 霍山县| 沁源县| 九江市| 贡嘎县| 江西省| 淮南市| 鄂伦春自治旗| 温宿县| 温州市| 米易县| 宁阳县| 北碚区| 星座| 洪泽县| 鄄城县| 襄城县| 城口县| 宁都县| 鲁山县| 宣武区| 玉环县| 德江县| 晋城| 荆门市| 永清县| 平度市| 吉木萨尔县| 灵丘县| 三亚市| 衢州市| 沽源县| 鸡东县| 张家口市| 石屏县| 凤凰县| 凤台县| 泾阳县|