পিএইচপি স্ক্রিপ্টগুলির কার্যকর সময় নির্ধারণের সঠিক উপায়


269

আমি জানতে চাই যে পিএইচপি জন্য লুপটি কার্যকর করতে কত মিলি সেকেন্ড লাগে।

আমি জেনেরিক অ্যালগরিদমের কাঠামো জানি, তবে কীভাবে পিএইচপিতে এটি প্রয়োগ করা যায় তা ধারণা নেই:

Begin
init1 = timer(); // where timer() is the amount of milliseconds from midnight
the loop begin
some code
the loop end
total = timer() - init1;
End

আপনি যদি উত্পাদনে এটির প্রয়োজন হয় তবে আপনি মাইক্রোটাইম () স্টেটমেন্টগুলির swaths দিয়ে চারদিকে ঘুরতে পারেন, তবে এটি যদি পরীক্ষার জন্য থাকে তবে উদাহরণস্বরূপ কেবল xdebug এর প্রোফাইলার ব্যবহার করুন। কোনও অগোছালো কোডই আসল যোগ নয়।
উইককেন

উত্তর:


524

আপনি microtimeএই জন্য ফাংশন ব্যবহার করতে পারেন । ডকুমেন্টেশন থেকে :

microtime - মাইক্রোসেকেন্ড সহ বর্তমান ইউনিক্স টাইমস্ট্যাম্পটি ফিরিয়ে দিন


যদি get_as_floatসেট করা থাকে TRUE, তারপরে microtime()একটি ফ্লোট ফেরত দেয় যা বর্তমান সময়কে সেকেন্ডে উপস্থাপন করে যেহেতু ইউনিক্সের সূত্রপাতটি নিকটতম মাইক্রোসেকেন্ডে সঠিক।

ব্যবহারের উদাহরণ:

$start = microtime(true);
while (...) {

}
$time_elapsed_secs = microtime(true) - $start;

36
আপনি microtime(true)যদি ফেরতের মান দিয়ে গণনা করতে চান তবে আপনার প্রয়োজন ।
একাকী দিন

7
আমি জানি এটি waaaaaay খুব দেরীতে (প্রায় 4 বছর), তবে একটি মন্তব্য হিসাবে ... এই গণনাগুলি ( get_as_floatযেমন প্যারামিটার সহ true) ব্যবহার করা আপনাকে সেকেন্ডে ফলাফল দেবে , পিএইচপি ডকুমেন্টেশন অনুসারে।
আলেজান্দ্রো ইভান

6
@patrick এবং আমি বলেছিলাম: যদি get_as_floatহয় true, microtime()সেকেন্ড প্রতিনিধিত্বমূলক মান ...
আলেহান্দ্রো ইভান

2
যদিও এটি একটি অতি পুরানো পোস্ট, আমাদের প্রত্যাশা করা উচিত যে ফ্লোটটি ফিরে এসেছে মাইক্রোসেকেন্ডগুলিতে থাকে ... সেরা সমাধানটি এটি 1000 এর দ্বারা বার বার হয় ... উদাহরণস্বরূপ stackoverflow.com/questions/3656713/… দেখুন । ।
রাগান্বিত 84

1
এই উত্তরটি পুরানো। আজকাল স্ক্রিপ্ট এক্সিকিউশন সময় প্রতিবেদন করার সর্বোত্তম উপায় হ'ল আপনার কোডের শেষে একক লাইন: $time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; ( নীচের উত্তরে আরও তথ্য ))
ashleedawg

84

আপনি microtime(true)নিম্নলিখিত শিষ্টাচার ব্যবহার করতে পারেন :

আপনার পিএইচপি ফাইলের শুরুতে এটি রাখুন:

//place this before any script you want to calculate time
$time_start = microtime(true);

// আপনার স্ক্রিপ্ট কোড এখানে যায়

// do something

আপনার পিএইচপি ফাইলের শেষে এটি রাখুন:

// Display Script End time
$time_end = microtime(true);

//dividing with 60 will give the execution time in minutes other wise seconds
$execution_time = ($time_end - $time_start)/60;

//execution time of the script
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';

এটি আপনার ফলাফল আউটপুট হবে minutes


72

আপনি সুপারগ্লোবাল অ্যারে REQUEST_TIMEথেকে ব্যবহার করতে পারেন $_SERVERডকুমেন্টেশন থেকে :

REQUEST_TIME
অনুরোধ শুরুর টাইমস্ট্যাম্প। (পিএইচপি 5.1.0 থেকে উপলব্ধ।)

REQUEST_TIME_FLOAT
মাইক্রোসেকেন্ড যথার্থতার সাথে অনুরোধটি শুরু করার টাইমস্ট্যাম্প । (পিএইচপি 5.4.0 থেকে পাওয়া যায়।)

এইভাবে আপনার স্ক্রিপ্টের শুরুতে কোনও টাইমস্ট্যাম্প সংরক্ষণ করার দরকার নেই। আপনি সহজভাবে করতে পারেন:

<?php
// Do stuff
usleep(mt_rand(100, 10000));

// At the end of your script
$time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];

echo "Did stuff in $time seconds\n";
?>

এখানে, $timeমাইক্রোসেকেন্ডস নির্ভুলতার (যেমন 1.3411 সেকেন্ড এবং 341 মাইক্রোসেকেন্ডের জন্য) সেকেন্ডের মধ্যে স্ক্রিপ্ট শুরু হওয়ার পরে কেটে যাওয়া সময় থাকবে contain


অধিক তথ্য:

পিএইচপি ডকুমেন্টেশন : $_SERVERভেরিয়েবল এবং microtimeফাংশন


এটি জানতে সুবিধাজনক। সুতরাং আপনি ব্যবহার করতে পারেন:$start = $_SERVER["REQUEST_TIME_FLOAT"]; $myscript = microtime(true); $bootstrap = $myscript - $start; ...do stuff ...; $myscripttime = microtime(true) - $myscript;
pspahn

1
এটি ব্যবহার সম্পর্কে পুরো কথাটি হ'ল আপনি কেবল এটি করতে পারেন: $myscripttime = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];শুরুতে টাইমস্ট্যাম্প সংরক্ষণ না করে আপনার স্ক্রিপ্টের শেষে।
ইওয়াজারু

1
লিঙ্কযুক্ত ডকুমেন্টেশন অনুসারে মাইক্রোসেকেন্ডে নয়, সেকেন্ডের$time মধ্যে পার্থক্য থাকবে ।
উইম দেবলাউয়

4
@WimDeblauwe পরিষ্কার করতে, হ্যাঁ ফলাফল কয়েক সেকেন্ডে। তবে মাইক্রোসেকেন্ড যথার্থতার সাথে । যেমন 1.11 সেকেন্ড + 100 মাইক্রোসেকেন্ডের সমান।
ক্রিস হ্যারিসন

1
প্রতিক্রিয়া সময়টি
মাইক অ্যারন

27

ফাইল লোডটাইম.এফপি তৈরি করুন

<?php
class loadTime{
    private $time_start     =   0;
    private $time_end       =   0;
    private $time           =   0;
    public function __construct(){
        $this->time_start= microtime(true);
    }
    public function __destruct(){
        $this->time_end = microtime(true);
        $this->time = $this->time_end - $this->time_start;
        echo "Loaded in $this->time seconds\n";
    }
}

<?phpলেখার পরে আপনার স্ক্রিপ্টের ভিক্ষাবৃত্তির চেয়েinclude 'loadtime.php'; $loadtime=new loadTime();

পৃষ্ঠাটি যখন লোড করা হবে তখন সেখানে "এক্স সেকেন্ডে লোড করা" লেখা থাকবে


5
ঝরঝরে! তবে আপনি যদি পরিষ্কারভাবে আপনার অবজেক্টটি ধ্বংস না করেন তবে আউটপুটটি ক্লোজিং </html>ট্যাগের পরে উপস্থিত হবে যা অবৈধ
দিমিত্রি পশকভিচ

@ গন্ডো না, এটি সেকেন্ড হবে (মাইক্রোসেকেন্ডগুলি দৃশ্যের দশমিক মান হিসাবে প্রকাশিত)
ফ্রান্সেসকোএমএম



7

এখানে একটি ফাংশন যা পিএইচপি কোডের কোনও টুকরোটি কার্যকর করার সময় পাইথনের সময়কাল মডিউলটির মতো: https://gist.github.com/flaviovs/35aab0e85852e548a60a

এটি কিভাবে ব্যবহার করতে:

include('timeit.php');
const SOME_CODE = '
        strlen("foo bar");
';
$t = timeit(SOME_CODE);
print "$t[0] loops; $t[2] per loop\n";

ফলাফল:

$ php x.php 
100000 loops; 18.08us per loop

দাবি অস্বীকার: আমি এই গিস্টটির লেখক

সম্পাদনা: সময়সূচি এখন https://github.com/flaviovs/timeit এ একটি পৃথক, স্বনির্ভর প্রকল্প


5

মাইক্রোটাইম () এর সাথে আরও সুনির্দিষ্ট সময় উপলভ্য হওয়া ছাড়া আপনার সঠিক ধারণা রয়েছে ) ফাংশনের ।

লুপের অভ্যন্তরে যা রয়েছে তা যদি দ্রুত হয় তবে সম্ভবত স্পষ্টভাবে অতিবাহিত সময়টি শূন্য হবে। যদি তা হয় তবে কোডের চারপাশে আরেকটি লুপ মোড়ানো এবং বারবার কল করুন। একবারে একবার পাওয়ার জন্য পুনরাবৃত্তির সংখ্যা দ্বারা পার্থক্যটি ভাগ করে নেওয়ার বিষয়টি নিশ্চিত করুন। আমার কাছে এমন একটি প্রোফাইলযুক্ত কোড রয়েছে যার জন্য ধারাবাহিক, নির্ভরযোগ্য সময়সীমার ফলাফল পেতে 10,000,000 পুনরাবৃত্তি প্রয়োজন।


3

আমি ভেবেছিলাম আমি একসাথে করা ফাংশনটি ভাগ করব। আশা করি এটি আপনার সময় বাঁচাতে পারে।

এটি মূলত একটি পাঠ্য-ভিত্তিক স্ক্রিপ্টের সময় ট্র্যাক করতে ব্যবহৃত হয়েছিল, সুতরাং আউটপুটটি পাঠ্য আকারে রয়েছে। আপনি যদি চান তবে আপনি এটি সহজেই এইচটিএমএল এ সংশোধন করতে পারেন।

স্ক্রিপ্ট শুরুর পর থেকে এবং প্রতিটি পদক্ষেপে সময় ব্যয় করার জন্য এটি আপনার জন্য সমস্ত গণনা করবে। এটি 3 আংশিক নির্ভুলতার সাথে সমস্ত আউটপুট বিন্যাস করে। (নিচে থেকে মিলি সেকেন্ডে)

একবার আপনি এটি আপনার স্ক্রিপ্টের শীর্ষে অনুলিপি করার পরে, আপনি যা করতে চান তা প্রতিটি সময় আপনি চাইলে রেকর্ডটাইম ফাংশন কল স্থাপন করা হয়।

আপনার স্ক্রিপ্ট ফাইলটির শীর্ষে এটি অনুলিপি করুন:

$tRecordStart = microtime(true);
header("Content-Type: text/plain");
recordTime("Start");

function recordTime ($sName) {
  global $tRecordStart;
  static $tStartQ;
  $tS = microtime(true);
  $tElapsedSecs = $tS - $tRecordStart;
  $tElapsedSecsQ = $tS - $tStartQ;
  $sElapsedSecs = str_pad(number_format($tElapsedSecs, 3), 10, " ", STR_PAD_LEFT);
  $sElapsedSecsQ = number_format($tElapsedSecsQ, 3);
  echo "//".$sElapsedSecs." - ".$sName;
  if (!empty($tStartQ)) echo " In ".$sElapsedSecsQ."s";
  echo "\n";
  $tStartQ = $tS;
}

যে সময়টি কেটে যায় তা ট্র্যাক করতে, কেবল করুন:

recordTime("What We Just Did")

উদাহরণ স্বরূপ:

recordTime("Something Else")
//Do really long operation.
recordTime("Really Long Operation")
//Do a short operation.
recordTime("A Short Operation")
//In a while loop.
for ($i = 0; $i < 300; $i ++) {
  recordTime("Loop Cycle ".$i)
}

এভাবে আউটপুট দেয়:

//     0.000 - Start
//     0.001 - Something Else In 0.001s
//    10.779 - Really Long Operation In 10.778s
//    11.986 - A Short Operation In 1.207s
//    11.987 - Loop Cycle 0 In 0.001s
//    11.987 - Loop Cycle 1 In 0.000s
...
//    12.007 - Loop Cycle 299 In 0.000s

আশা করি এটি কাউকে সাহায্য করবে!


2

এখানে খুব সহজ এবং সংক্ষিপ্ত পদ্ধতি

<?php
$time_start = microtime(true);
//the loop begin
//some code
//the loop end
$time_end = microtime(true);
$total_time = $time_end - $time_start;
echo $total_time; // or whatever u want to do with the time
?>

আমি মনে করি যে উত্তরটি পোস্ট করার সময় আমি সেই কোডটি পরীক্ষা করেছিলাম এমন কোনও কিছু মিস করছি
দীপক কুমার

, var_dump (microtime (সত্য)); // ভাসা (1283846202.89) আপনি মাইক্রোটাইম সত্যটি ব্যবহার করেন তখন কী হয়
দীপক কুমার

আপনি মোট সময়
ভাসাও

2

আপনি যদি সেকেন্ডে সেই সময়টি প্রদর্শন করতে চান:

<?php
class debugTimer 
{
    private $startTime;
    private $callsCounter;

    function __construct() 
    {
        $this->startTime = microtime(true);
        $this->callsCounter = 0;
    }

    public function getTimer(): float
    {
        $timeEnd = microtime(true);
        $time = $timeEnd - $this->startTime;
        $this->callsCounter++;
        return $time;
    }

    public function getCallsNumer(): int
    {
        return $this->callsCounter;
    }
}

$timer = new debugTimer();
usleep(100);
echo '<br />\n
'.$timer->getTimer(). ' seconds before call #'.$timer->getCallsNumer();

usleep(100);
echo '<br />\n
'.$timer->getTimer(). ' seconds before call #'.$timer->getCallsNumer();

1

এখানে এমন একটি বাস্তবায়ন যা ভগ্নাংশের সেকেন্ডে ফিরে আসে (অর্থাত্ 1.321 সেকেন্ড)

/**
 * MICROSECOND STOPWATCH FOR PHP
 *
 * Class FnxStopwatch
 */
class FnxStopwatch
{
    /** @var float */
    private $start,
            $stop;

    public function start()
    {
        $this->start = self::microtime_float();
    }
    public function stop()
    {
        $this->stop = self::microtime_float();
    }
    public function getIntervalSeconds() : float
    {
        // NOT STARTED
        if (empty($this->start))
            return 0;
        // NOT STOPPED
        if (empty($this->stop))
            return ($this->stop - self::microtime_float());

        return $interval = $this->stop - $this->start;
    }

    /**
     * FOR MORE INFO SEE http://us.php.net/microtime
     *
     * @return float
     */
    private static function microtime_float() : float
    {
        list($usec, $sec) = explode(" ", microtime());

        return ((float)$usec + (float)$sec);
    }
}

1

গড় সময় পরিমাপ করার জন্য আমার স্ক্রিপ্ট এখানে

<?php

$times = [];
$nbrOfLoops = 4;
for ($i = 0; $i < $nbrOfLoops; ++$i) {
    $start = microtime(true);
    sleep(1);
    $times[] = microtime(true) - $start;
}

echo 'Average: ' . (array_sum($times) / count($times)) . 'seconds';

0

আপনি একক ক্রিয়াকলাপের সাথে সেকেন্ডে মৃত্যুদন্ড কার্যকর করতে পারেন।

// ampersand is important thing here
function microSec( & $ms ) {
    if (\floatval( $ms ) == 0) {
        $ms = microtime( true );
    }
    else {
        $originalMs = $ms;
        $ms = 0;
        return microtime( true ) - $originalMs;
    }
}

// you don't have to define $ms variable. just function needs
// it to calculate the difference.
microSec($ms);
sleep(10);
echo microSec($ms) . " seconds"; // 10 seconds

for( $i = 0; $i < 10; $i++) {
    // you can use same variable everytime without assign a value
    microSec($ms);
    sleep(1);
    echo microSec($ms) . " seconds"; // 1 second
}

for( $i = 0; $i < 10; $i++) {
    // also you can use temp or useless variables
    microSec($xyzabc);
    sleep(1);
    echo microSec($xyzabc) . " seconds"; // 1 second
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.