摘要:先上大神文章里面提到了字符串用比用連接要好。原因先不說,先來看以下兩句逗號比更節(jié)省時間結(jié)果是什么我只能說的結(jié)果是,所以結(jié)果是和至于為啥快,可以簡單理解,用是先拼接在,雖然逗號個數(shù)代表的調(diào)用次數(shù)可以這么理解暫時。但是拼接的速度要小于的速度。
先上大神文章54chen
里面提到了echo 字符串用,比用.連接要好。原因先不說,先來看以下兩句
結(jié)果是什么?
1+5=6?
1+5=6?
——————
6?
2?
——————
6.6?
6.6?
——————
我只能說echo "5+1=" . 1+5;的結(jié)果是10,所以結(jié)果是6和2.php echo manual
至于為啥快,可以簡單理解,用.是先拼接在echo,雖然逗號個數(shù)代表echo的調(diào)用次數(shù)(可以這么理解暫時)。
但是拼接的速度要小于echo的速度。
如果深入理解,VLD如下圖。是@tywei大神的圖上面比下面多了個CONCAT,下面比上面多了個echo。
如果想知道更多詳細信息,點擊查看這個重磅炸彈=======更新分割線===================2016-05-27
今天在看java的時候,發(fā)現(xiàn)java的string對象很嚴謹,小例子如下public class HelloWorld { public static void main(String[] args) { String s1 = "imooc"; String s2 = "imooc"; String s3="I love "+s1; //定義字符串s3,保存“I love”和s1拼接后的內(nèi)容 // 比較字符串s1和s2 // imooc為常量字符串,多次出現(xiàn)時會被編譯器優(yōu)化,只創(chuàng)建一個對象 System.out.println("s1和s2內(nèi)存地址相同嗎?" + (s1 == s2)); //比較字符串s1和s3 System.out.println("s1和s3內(nèi)存地址相同嗎?" + (s2==s3) ); String s4 = "I love " + s1; //比較字符串s4和s3 // s1是變量,s4在運行時才知道具體值,所以s3和s4是不同的對象 System.out.println("s3和s4內(nèi)存地址相同嗎?" + (s4 == s3)); } }以上的結(jié)果為
s1和s2內(nèi)存地址相同嗎?true
s1和s3內(nèi)存地址相同嗎?false
s3和s4內(nèi)存地址相同嗎?false
暫不討論內(nèi)存地址這個概念(其實我不大懂),我就想起了php中是不是也是這樣。
類似例子就不貼了,php肯定是全等的。。但是我又想到了怎么看php中內(nèi)存具體怎么調(diào)用,想到了c下的gdb。但是php還是解析不了。那先看看opcode,然后就有這篇補上的文章了。我們先安裝個vld擴展,先聲明我環(huán)境為14.04 LTS PHP 5.5.9-1ubuntu4.16 (cli)
pecl下載vldtar zxvf解壓
進入到解壓好目錄
phpize ./configure make && make install(注意操作要在root下,要不會報perssion錯誤)
root@tb:/home/tb/Downloads/vld-0.13.0# ls /usr/lib/php5/20121212/ json.so memcached.so mysql.so pdo_mysql.so readline.so vld.so mcrypt.so mysqli.so opcache.so pdo.so redis.so xhprof.so這樣就裝好了。
====修改fpm下的配置文件
vim /etc/php5/fpm/php.ini增加一行vld的,如下所示
[redis] extension =redis.so [xhprof] extension=xhprof.so [vld] extension=vld.so xhprof.output_dir=/var/log/xhprof [memcache] extension =memcached.so重啟fpm
service php5-fpm stop service php5-fpm start可以看到web中的phpinfo有了vld的選項。
vld support enabled為啥說是web中呢,因為我們一般調(diào)試在cli端
所以需要修改下cli的php.ini文件執(zhí)行php -m |grep vld
root@tb:/usr/share/nginx/html/vldtest# php -m |grep vld vld就說明cli下的vld也可以用了。
然后我們在具體目錄建兩個php文件,內(nèi)容如下
root@tb:/usr/share/nginx/html/vldtest# cat 1.php root@tb:/usr/share/nginx/html/vldtest# cat 2.php root@tb:/usr/share/nginx/html/vldtest#然后分別執(zhí)行
php -dvld.active=1 1.php root@tb:/usr/share/nginx/html/vldtest# php -dvld.active=1 1.php Finding entry points Branch analysis from position: 0 Jump found. Position 1 = -2 filename: /usr/share/nginx/html/vldtest/1.php function name: (null) number of ops: 4 compiled vars: none line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 2 0 E > CONCAT ~0 "hello", "+" 1 CONCAT ~1 ~0, "world" 2 ECHO ~1 3 3 > RETURN 1 branch: # 0; line: 2- 3; sop: 0; eop: 3; out1: -2 path #1: 0, hello world
php -dvld.active=1 2.php root@tb:/usr/share/nginx/html/vldtest# php -dvld.active=1 2.php Finding entry points Branch analysis from position: 0 Jump found. Position 1 = -2 filename: /usr/share/nginx/html/vldtest/2.php function name: (null) number of ops: 4 compiled vars: none line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 2 0 E > ECHO "hello" 1 ECHO "+" 2 ECHO "world" 3 3 > RETURN 1 branch: # 0; line: 2- 3; sop: 0; eop: 3; out1: -2 path #1: 0, hello world
下面簡單記錄下參數(shù)意義:
-dvld.active 是否再執(zhí)行時激活vld,默認為0.所以我們都使用-dvld.active=1啟用
-dvld.skip_prepend 是否跳過php.ini配置文件中auto_prepend_file指定的文件,默認為0,就是禁用。
就是不跳過
-dvld.execute 是否執(zhí)行php腳本,默認為1,所以上面都顯示了helloworld
-dvld.save_paths 指定是否輸出文件
再膜拜下大神關(guān)于vld的文章另外感興趣的同學(xué)關(guān)于擴展可以執(zhí)行下 php --re vld【redis,memcache】
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21457.html
摘要:點號正則中,有一個特殊的特殊的元字符,點號,它可以匹配任意字符,除了換行符。表各種量詞的轉(zhuǎn)義量詞轉(zhuǎn)義形式除此之外,元字符點也需要加反斜線來進行轉(zhuǎn)義。 ??我們知道,在正則表達式中,可以使用[0-9]或d來匹配單個數(shù)字字符,但是,如果需要驗證一個更復(fù)雜的字符串呢,比如大陸地區(qū)的郵政編碼。??不過郵政編碼并沒有特別規(guī)定,只有由6個數(shù)字組成的字符串而已, 如246512,根據(jù)[0-9]或d,...
摘要:由于協(xié)議中沒有定義任何狀態(tài)碼,所以除非在某些試驗條件下,服務(wù)器禁止向此類客戶端發(fā)送響應(yīng)。表示要完成請求,需要進一步操作。 最近在廣州找工作,大四狗,讀著三本前兩年剛升二本的學(xué)校,文科生,好像一切條件都非常不利,但我還是毅然選擇這條路——拍黃片,人不能固步自封,還是要拓展一下自己的知識面,不能只學(xué)php而不拓展視野,還是要學(xué)學(xué)python、java、前端這些面試得有點心塞,各種因為學(xué)歷被...
摘要:換一臺電腦就要重新安裝。并且還需要適配不同的系統(tǒng)。提交大小幾乎沒有限制。即協(xié)議主要由請求和響應(yīng)組成。相反則為同步按照程序的順序,依次往下執(zhí)行,必須等上一程序執(zhí)行完成之后才能執(zhí)行下一程序,阻礙程序的執(zhí)行。 Ajax 服務(wù)器 類型 按照服務(wù)類型:文件服務(wù)器,數(shù)據(jù)庫服務(wù)器,郵件服務(wù)器,Web服務(wù)器 按照操作系統(tǒng):Linux服務(wù)器,Windows服務(wù)器 按照應(yīng)用軟件:Apache服務(wù)器,Ng...
摘要:數(shù)組的大小是不固定的,可以像這樣隨意添加。再看一張圖,這次多添加幾個元素,再給數(shù)組添加一個屬性注意看右側(cè)對象的元素索引不知道你有沒有發(fā)現(xiàn)。數(shù)組范圍和索引轉(zhuǎn)換那里是參考的,其他地方都是自己的理解和看法。 從題目說起,之所以是不完全,是因為有些東西比如數(shù)組的方法怎么用這個我都不打算講,因為那個看一下都會,下面講的都是我覺得重要的,只關(guān)于數(shù)組對象本身。另外,由于我的Javascript實戰(zhàn)經(jīng)...
摘要:直接強制結(jié)束程序。在用掛起程序時,當(dāng)想要結(jié)束這個程序,最好用。能夠模擬在控制臺結(jié)束程序的功能。 向 host 文件快速添加新網(wǎng)址配置 echo 127.0.0.1 your.domian.com | sudo tee -a /etc/hosts NGINX 配置 #nginx禁止訪問.點號開頭的文件 location ~* /.* { deny all; } #nginx 禁止訪問.s...
閱讀 3457·2021-11-17 17:00
閱讀 3818·2021-08-09 13:46
閱讀 2866·2019-08-30 15:54
閱讀 627·2019-08-30 13:54
閱讀 2945·2019-08-29 17:13
閱讀 3219·2019-08-29 14:00
閱讀 2975·2019-08-29 11:11
閱讀 1379·2019-08-26 10:15