2010-03-16 38 views

Trả lời

11

Các đơn giản nhất cũng là Apache Bench(gọi tắt là ab), được cung cấp với Apache:

  • Đó là một công cụ dòng lệnh
  • Điều đó có thể gửi nhiều yêu cầu, song song, đến và URL
  • Và báo cáo thời gian, lỗi, ...

Dường như phù hợp với loại báo cáo rất đơn giản được trình bày trên trang chiếu của bạn.
(Nó thực sự báo cáo nhiều hơn thế)


Nếu nhu cầu của bạn ar ea cắn phức tạp hơn, Siege có thể là một lựa chọn tốt.

Một điều thú vị với Siege là có thể lấy danh sách URL từ một tệp, thay vì chỉ làm việc với một tệp.


Một điều thú vị với những công cụ này là bạn không phải đo chỉ thời gian thực hiện để thực hiện một phần cụ thể của mã (như bạn sẽ sử dụng nếu microtime trực tiếp trong mã PHP của bạn), nhưng bạn đang nhận được toàn bộ thời gian đã được yêu cầu để phục vụ trang.

Ngoài ra, nó có thể đo điểm chuẩn nhiều hơn chỉ là mã PHP, vì nó hoạt động trên yêu cầu HTTP và không phải mã.

2

Bạn có thể sử dụng microtime() khi bắt đầu xử lý và ở cuối đầu ra, sau đó tính chênh lệch và chuyển đổi thành giây nếu muốn.

Điều này sẽ chỉ đo thời gian thực hiện cho phía PHP, không phải toàn bộ thời gian tải trang tại nó có vẻ là trong liên kết của bạn, nhưng nó sẽ giúp bạn so sánh hiệu suất phương thức khác nhau.

+0

... nhưng bạn cần phải ghi lại điều này ở đâu đó để nó có giá trị bất kỳ. – symcbean

+0

chắc chắn, câu hỏi là về đo lường thời gian tải trang để so sánh hiệu suất mã. Trong quy trình gỡ lỗi thuần túy, không cần phải ghi lại, chỉ hiển thị sự khác biệt của hai microtimes trong chân trang của bạn. Để đo hiệu suất toàn cầu, tôi khuyên bạn nên sử dụng công cụ bên ngoài như băng ghế dự bị apache. – Benoit

1
  1. phương pháp một: sử dụng xdebug.
  2. phương pháp hai: Đặt các báo cáo tất cả xung quanh bạn kịch bản của bạn

    $TIMER['label']=microtime(1);
    /* some code */
    $TIMER['sql1_before']=microtime(1);
    a/* some code */
    $TIMER['sql1_after']=microtime(1);
    /* some code */

và sau đó xuất nó, với mã như thế này:

echo "<table border=1><tr><td>name</td><td>so far</td><td>delta</td><td>per cent</td></tr>"; 
    reset($TIMER); 
    $start=$prev=current($TIMER); 
    $total=end($TIMER)-$start; 
    foreach($TIMER as $name => $value) { 
    $sofar=round($value-$start,3); 
    $delta=round($value-$prev,3); 
    $percent=round($delta/$total*100); 
    echo "<tr><td>$name</td><td>$sofar</td><td>$delta</td><td>$percent</td></tr>"; 
    $prev=$value; 
    } 
    echo "</table>"; 

Vì vậy, bạn sẽ nhận được báo cáo về cách mã của bạn đi. hành động này được gọi là profiling và chiếm vị trí quan trọng nhất trong quy trình tối ưu hóa.

9
$ time curl http://www.example.com/ 

Lưu ý rằng yêu cầu này bao gồm cả thời gian chờ của mạng. Nhưng điều đó có thể muốn bạn muốn?

43

Có nhiều cách để thực hiện việc này. Cá nhân tôi đã là người hâm mộ sử dụng microtime theo cách sau:

// Start of code 
$time = microtime(true); // Gets microseconds 

// Rest of code 

// End of code 
echo "Time Elapsed: ".(microtime(true) - $time)."s"; 

Điều đó sẽ mang đến cho bạn độ chính xác một phần hai giây.

Nếu bạn đang viết các tập lệnh dòng lệnh (như câu đố trên Facebook), bạn có thể sử dụng thời gian.

time php dancebattle.php ~/input.dat 
Win 

real 0m0.152s 
user 0m0.142s 
sys  0m0.012s 

Tôi quên phương pháp theo dõi thời gian tải trang (từ trình duyệt). Bạn có thể sử dụng tab NET từ Firebug (dành cho Firefox) để thực hiện điều đó. Nó sẽ cho phép bạn xem các tải tệp khác nhau (AJAX, JS, CSS, Hình ảnh, v.v.).

2

Bạn nói rằng bạn muốn đo "lần tải trang" đó là hoàn toàn khác nhau từ

  1. thời gian cần thiết để tạo ra trang (được đo bằng một bộ đếm thời gian nội bộ trong mã PHP của bạn)

  2. và tải nó xuống từ máy chủ (được đo bằng ab)

Thời gian tải trang nên bao gồm thời gian để phân tích HTML và yêu cầu tiếp theo đến máy chủ tìm nạp tất cả nội dung liên quan (tệp javascript , tệp css, hình ảnh, v.v.).

Đo lường điều này thực sự khá khó khăn. Để làm điều đó đúng cách, bạn cần đẩy tất cả phía máy khách logic - thả một cookie javascript được đặt thời gian khi người dùng nhấp vào liên kết hoặc gửi biểu mẫu, sau đó trong trang tiếp theo, sử dụng phương thức onload (kích hoạt sau khi mọi thứ đã tải) so sánh thời gian này với thời gian hiện tại. Sau đó, bạn cần một phương pháp báo cáo số liệu này trở lại máy chủ - bạn có thể sử dụng một yêu cầu Ajax hoặc lưu trữ thời gian trong một cookie khác được trình bày trong yêu cầu tiếp theo.

Lưu ý rằng các tệp do mỗi khách hàng yêu cầu sẽ phụ thuộc vào trạng thái hiện tại của bộ nhớ cache bên trình duyệt.

Nếu bạn có thể tách luồng nhấp chuột khỏi nhật ký, bạn có thể nhận được xấp xỉ tốt bằng cách kiểm tra khoảng thời gian giữa yêu cầu cho loại nội dung văn bản/html và yêu cầu liên tiếp cuối cùng đối với loại nội dung khác với văn bản/html. Nhưng số liệu thống kê của bạn sẽ bị lệch nếu người dùng tương tác với chúng tôi nhiều hơn một cửa sổ trình duyệt đồng thời.

4

Hãy thử https://github.com/fotuzlab/appgati

Nó cho phép xác định các bước trong các mã và báo cáo thời gian, sử dụng bộ nhớ, tải máy chủ vv giữa hai bước.

Cái gì như:

$appgati->Step('1'); 

    // Do some code ... 

    $appgati->Step('2'); 

    $report = $appgati->Report('1', '2'); 
    print_r($report); 

Mẫu đầu ra mảng:

Array 
(
    [Clock time in seconds] => 1.9502429962158 
    [Time taken in User Mode in seconds] => 0.632039 
    [Time taken in System Mode in seconds] => 0.024001 
    [Total time taken in Kernel in seconds] => 0.65604 
    [Memory limit in MB] => 128 
    [Memory usage in MB] => 18.237907409668 
    [Peak memory usage in MB] => 19.579357147217 
    [Average server load in last minute] => 0.47 
    [Maximum resident shared size in KB] => 44900 
    [Integral shared memory size] => 0 
    [Integral unshared data size] => 0 
    [Integral unshared stack size] => 
    [Number of page reclaims] => 12102 
    [Number of page faults] => 6 
    [Number of block input operations] => 192 
    [Number of block output operations] => 
    [Number of messages sent] => 0 
    [Number of messages received] => 0 
    [Number of signals received] => 0 
    [Number of voluntary context switches] => 606 
    [Number of involuntary context switches] => 99 
) 
+1

thú vị nhưng nó không hoạt động trên windows :-) và có thể một số người (như tôi) có một cửa sổ xung quanh ..: D – Bogdan

+0

Đáng buồn là kịch bản ngu ngốc này đã kết hôn với Unix. Yêu cầu các cửa sổ thử vận ​​may ở nơi khác :) – fotuzlab

0

Sử dụng microtime() PHP chức năng bạn sẽ biết chính xác bao nhiêu thời gian là cần thiết cho mã PHP của bạn để được thực thi. Thực hiện theo các bước bên dưới để đặt mã PHP trên trang web của bạn:

Đặt mã sau vào đầu trang PHP của bạn (nếu bạn đo thời gian cần thiết cho phần cụ thể của mã đặt ngay trước mã PHP đó phần)

<?php 
$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$start = $time; 
?> 

các mã sau đây phải được đặt ở cuối của trang web (hoặc sự kết thúc của phần mã PHP)

<?php 
$time = microtime(); 
$time = explode(' ', $time); 
$time = $time[1] + $time[0]; 
$finish = $time; 
$total_time = round(($finish - $start), 4); 
echo 'Page generated in '.$total_time.' seconds.'; 

Nếu không hoạt động sử dụng microtime (true) thay vì của microtime()

0

Đặt mã sau vào đầu trang PHP của bạn.

<?php 
$statrttime = microtime(); 
$time = explode(' ', $statrttime); 
$time = $time[1] + $time[0]; 
$start = $time; 
?> 

Mã sau phải được đặt ở cuối trang của bạn.

<?php 
$endtime = microtime(); 
$time = explode(' ', $endtime); 
$time = $time[1] + $time[0]; 
$finish = $time; 
$total_time = round(($finish - $start), 4); 
echo 'Page load in '.$total_time.' seconds.'; 
?> 

Lưu ý: Nếu bạn đo thời gian cho phần cụ thể của mã đặt phần bắt đầu này và phần mã PHP cuối cùng.

Các vấn đề liên quan