iT邦幫忙

0

C# JSP PHP 減少程式碼的tab、換行等符號 對於系統速度影響多大?

各位好:
一般為了閱讀上便利,習慣會在常用的流程上換行\n或是加上tab鍵,
以讓版面清爽。
例如:

if($pos)
{
   echo "hello 我在echo前端有使用tab排版喔!";
   echo "hello 我在echo前端有使用tab排版喔!";
}

跟以下無縮排方式

if($pos){echo "hello 我在echo前端無使用tab排版喔!";
echo "hello 我在echo前端無使用tab排版喔!";}

當然一般程式不會這麼少行,
PHP是直譯式語言,
會一行一行去讀取判斷,
應該也會針對一些特殊字,像是註解"//"、tab、空格、換行等符號進行判斷,

然而程式碼一旦多了起來、讀取的流量也變大、越多人讀取,

舉例來說,像是google,
前端的HTML 幾乎會塞成1行~不做換行~可減少流量
但是後端的做法就不得而知。

是否這些判斷也會對後端機器效能產生一定的影響,
有沒有相關資料是在探討這些的呢?

不過,這邊當然不是說要把每段程式都塞到一行,這樣程式設計師修改也很累人.

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

12
wiseguy
iT邦超人 1 級 ‧ 2013-03-27 17:48:10
最佳解答

如果是直譯式程式,註解跟縮排一定是會影響程式效率的。
但 C# JSP PHP 這些都不是《純直譯式》程式,而是先編譯成中間碼,再執行。
所以就要考慮到這個中間碼是否有去掉註解跟縮排了。假如會去掉,那麼會影響效率的,就只剩執行前的編譯動作(C#, JSP),或是第一次執行的自動編譯(PHP)了。

我沒反編譯過 C# 與 JSP 的 class,不知道它們是否能還原回縮排與註解,但 PHP 被 Zend_Encoder 編過之後,是可以反編譯還原縮排與註解的,可見並沒有做去除。因此如果想要加快 PHP 的速度,可以用 php -w test.php > test.striped.php 來把你的 php程式中的註解跟縮排通通去掉,串成一行。醬子就會加快速度了。如果有看過 google 站台的 js 檔,就會發現它們都是去掉註解跟縮排的。不但執行快,傳送也快。

player iT邦大師 1 級 ‧ 2013-03-27 18:26:39 檢舉

C# , VB.NET , Java
如果沒用到混淆器
都可以反轉回Code

player iT邦大師 1 級 ‧ 2013-03-27 18:41:35 檢舉

php -w test.php > test.striped.php

我沒想過可以這樣用耶, 不過還是謝了您的範例

wiseguy iT邦超人 1 級 ‧ 2013-03-28 08:35:50 檢舉

看來只要有《混淆器》問世的程式語言,應該都是不會把縮排跟註解去掉的。嘆氣

10
外獅佬
iT邦大師 1 級 ‧ 2013-03-27 11:56:31

HTML & JavaScript檔案比較有差
因為輸出檔案會因為空格、Tab、斷行符號減少而縮小
Server Script...應該沒差吧...
會有差的應該是這樣....

<pre class="c" name="code">
<?php
   echo "<h1>Hello \n";
   echo "world</h1>";
?>


<?php
echo "<h1>Hello ";
echo "world</h1>";
?>
[/code]
雖然,輸出的結果看起來一樣,但是,在實際的HTML裡頭,應該可以看到上面的案例多了一個斷行符號,也就是輸出的HTML會多了一個byte的資料,server到client端的資料流量,自然也變多了

看更多先前的回應...收起先前的回應...
isthome iT邦新手 4 級 ‧ 2013-03-27 13:56:29 檢舉

加了一個"\n"
可以讓"瀏覽原始碼"的時候看到HTML原始碼會自動換行,類似檢視"<br>"的結果
不過正常時候很少看到有人會加上\n
除非是在除錯 等情況下吧~
畢竟這是給瀏覽器讀取就好~

例如跑HTML<tr>表格區塊迴圈時,可加上\n以方便除錯

&lt;pre class="c" name="code">
echo "&lt;table>\n";
while(10){
echo "&lt;tr>&lt;td>xxx&lt;/td>&lt;/tr>\n"
}
echo "&lt;/table>";

如此輸出HMTL碼時,就可以看出粒粒分明~
這樣才不會每個</tr>都跟下一個<tr>以及內部文字都糾結再一行,如果欄位值再多的話,有錯誤時真的不好抓是哪邊HMTL有錯了~~

外獅佬 iT邦大師 1 級 ‧ 2013-03-27 14:25:22 檢舉

其實,可以去拿jquery這類的程式碼來看看...
所謂compact或mini版本,都是把那些多餘的符號拿掉...
為的就是縮短程式檔案本身,以加快檔案傳輸的速度。
\n並不等於<br />
兩者的用途是不同的。
\n是為了html原始碼的編排,換句話說,方便程式人員或美工人員檢視html用。
<br />是為了讓html上顯示換行的效果。

ccutmis iT邦高手 2 級 ‧ 2013-03-27 15:23:47 檢舉

還有這樣的效率

&lt;pre class="c" name="code">
&lt;?php
   echo '&lt;h1>Hello \n';
   echo 'world&lt;/h1>';
?>

會比

&lt;pre class="c" name="code">
&lt;?php
   echo "&lt;h1>Hello \n";
   echo "world&lt;/h1>";
?>

來的好~以PHP來說。

wiseguy iT邦超人 1 級 ‧ 2013-03-27 17:33:05 檢舉

單引號比雙引號快,但也要考慮到是不是真的要輸出 \n 喔。
單引號跟雙引號裡的 \n 效果是不一樣的。

外獅佬 iT邦大師 1 級 ‧ 2013-03-27 17:51:27 檢舉

大師都來了~~開心

player iT邦大師 1 級 ‧ 2013-03-27 18:25:08 檢舉

在 PHP 裡
用單引號包起來的字串, 不會再對裡頭的跳脫字元做處理, 而直接輸出
用雙引號包起來的字串, 則會處理跳脫字元

如果你有要帶變數內容到字串, 請用雙引號, 不然用單引號應該會比較快一點

我要發表回答

立即登入回答