亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

PHP應用程序的性能優化及簡要的介紹

添加時間:2013-9-9 14:22:13  添加: 思海網絡 

使用PHP編程的最大好處是學習這種編程語言非常容易以及其豐富的庫。即使對需要使用的函數不是十分了解,我們也能夠猜測出如何完成一個特定的任務。
  
  盡管PHP非常簡單易學,但我們仍然需要花費一點時間來學習PHP的一些編程技巧,尤其是與性能和內存占用相關的技巧。在PHP中,有許多小技巧能夠使我們減少內存的占用,并提高應用程序的性能。在本篇文章中,我們將對PHP應用程序的分析、如何改變腳本代碼以及比較優化前后的各種參數值進行簡要的介紹。
  
  通過在程序中設置計時的程序,并反復執行這些代碼,我們可以獲得有關程序執行速度的一組數據,這些數據可以可以用來發現程序中的瓶頸,以及如何進行優化,提高應用程序的性能。
  
  也許讀者曾經聽說過PEAR庫吧。我們將使用PEAR庫創建在分析時需要使用的例子,這也是對現有的代碼進行分析的最簡單的方法,它使我們無需使用商用產品就能對代碼進行分析。
  
  我們要使用的庫的名字是PEAR::Benchmark,它對于對代碼進行分析和性能測試非常有用。這個庫提供一個名字為 Benchmark_Timer()的類,能夠記錄一個函數調用和下一個函數調用之間的時間。在對代碼的性能進行測試時,我們可以得到一個詳細的腳本執行結果,它非常簡單,如下所示:
  
  <?php
  include_once("Benchmark/Timer.php");
  $bench = new Benchmark_Timer; $bench->start();
  $bench->setMarker('Start of the '); 現在處于睡眠狀態幾分鐘
  sleep(5); $bench->stop(); // 從計時器中獲得分析信息
  print_r($bench->getProfiling());
  ?>
  
  上面代碼執行后的輸出如下所示:
  
  Array
  (
  [0] => Array
  (
  [name] => Start
  [time] => 1013214253.05751200
  [diff] => -
  [total] => 0
  )
  [1] => Array
  (
  [name] => Start of the
  [time] => 1013214253.05761100
  [diff] => 9.8943710327148E-05
  [total] => 9.8943710327148E-05
  )
  [2] => Array
  (
  [name] => Stop
  [time] => 1013214258.04920700
  [diff] => 4.9915959835052
  [total] => 4.9916949272156
  )
  )
  
  上面的數字似乎是一組雜亂無章的數字,但如果程序的規模更大,這些數字就十分地有用了。
  
  也許廣大讀者也能猜測到,數組的第一個表目是實際調用Benchmark_Timer()類的方法,例如
  
  $bench->start()、$bench->setMarker()和$bench->stop(),與這些表目有關的數字是相當簡單的,現在我們來仔細地研究這些數字:
  
  [0] => Array
  (
  [name] => Start
  [time] => 1013214253.05751200
  [diff] => -
  [total] => 0
  )
  
  time表目指的是何時對Benchmark_Timer()的start()方法調用的UNIX的timestamp,diff表目表示這次調用和上次調用之間的時間間隔,由于這里沒有上一次,因此顯示出了一個破折號,total表目指的是自測試開始到這一特定的調用之前代碼運行的總的時間。下面我們來看看下一個數組的輸出:
  
  [1] => Array
  (
  [name] => Start of the
  [time] => 1013214253.05761100
  [diff] => 9.8943710327148E-05
  [total] => 9.8943710327148E-05
  )
  
  從上面的數字我們可以看出,在調用$bench->start()之后,程序運行了9.8943710327148E-05秒(也就是
  
  0.0000989秒)后開始調用$bench->setMarker(....)。
  
  一次真實的性能測試經歷
  
  盡管上面的例子不錯,但在對于決定如何優化你的站點代碼設計方面,它真的不能算是一個好例子。下面我將用我自己作為網站技術人員的一段親身經歷來說明如何解決性能方面存在的問題。
  
  我并不大理解網站使用的代碼,因為它是根據特殊的需求,歷經多年開發而成的━━其中的一個模塊包括網站轉換代碼,另一個模塊記錄網站的使用情況,其他的模塊也各有各的作用。我和網站的主要開發者都意識到網站的代碼需要優化,但又不清楚問題出在哪兒。
  
  為了盡快地完成任務,我開始研究網站的主要腳本代碼,并在全部腳本代碼以及其包含文件中添加了一些$bench->setMarker()命令,然后分析$bench->getProfiling()的輸出,并對得到的結果大吃一驚,原來問題出在一個與獲得特定語言名字(例如en代表 english)的轉換代碼的函數調用中,該函數在每個頁面上都會被使用數百次。每次調用該函數時,腳本代碼都會對一個MySQL數據庫進行查詢,從一個數據庫表中獲得真正的語言名字。
  
  于是我們這一類的信息創建了一個緩沖系統。經過短短2天時間的工作,我們使系統的性能得到了很大的提高,第一周內頁面的瀏覽量也因此而增加了40%。當然了,這只是一個有關分析代碼能夠提高互聯網應用或互聯網網站性能的例子。
  
  性能測試函數調用
  
  在分析一個腳本或網頁(以及其包含文件)時,盡管Benchmark_Timer()特別有用,但它并不科學,因為要獲得分析的數據我們必須多次加載腳本,而且它也不是針對某個類或函數調用的。
  
  PEAR::Benchmark庫中的另一個被稱作Benchmark_Iterator的類能夠很好地解決這一個問題,它能夠針對特定的函數或類的方法,顯示其分析信息。它的用途是能夠能夠從測試中獲得一致的結果,因為我們知道,如果運行一段腳本一次,其運行時間為10秒,并不意味著它每次的運行時間總是10秒。
  
  In any case, let's see some examples:
  
  // 連接數據庫的代碼
  include_once("DB.php");
  $dsn = array(
  'phptype' => 'mysql',
  'hostspec' => 'localhost',
  'database' => 'database_name',
  'username' => 'user_name',
  'password' => 'password'
  );
  $dbh = DB::connect($dsn); function getCreatedDate($id)
  {
  global $dbh; >$stmt = "SELECT created_date FROM users WHERE id=$id";
  // 在這里使用PEAR::DB
  $created_date = $dbh->getOne($stmt);
  if ((PEAR::isError($created_date)) ||
  (empty($created_date))) {
  return false;
  } else {
  return $created_date;
  }
  }include_once 'Benchmark/Iterate.php';
  $bench = new Benchmark_Iterate; // 運行getDate函數10次
  $bench->run(10, 'getCreatedDate', 1);// 打印分析信息
  print_r($bench->get());
  ?>
  
  運行上面的代碼能夠產生與下面相似的結果:
  
  Array
  (
  [1] => 0.055413007736206
  [2] => 0.0012860298156738
  [3] => 0.0010279417037964
  [4] => 0.00093603134155273
  [5] => 0.00094103813171387
  [6] => 0.00092899799346924
  [7] => 0.0010659694671631
  [8] => 0.00096404552459717
  [9] => 0.0010690689086914
  [10] => 0.00093603134155273
  [mean] => 0.0064568161964417
  [iterations] => 10
  )
  
  上面的這些數字很好理解,mean條目表示getCreatedDate()函數10次運行的平均時間。在進行實際測試時,應該至少運行1000次,但這個例子得出的結果已經足夠說明問題了。
  

關鍵字:PHP、應用程序、編程

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站