RomânăEnglish
 
exteon.ro - Manual
Acasă < Produse < Unelte PHP < web3tracer < Manual < 3. Folosire < 3.1. Profilarea scripturilor PHP
3.1. Profilarea scripturilor PHP

Pentru a profila PHP, trebuie să generați un fișier trace. Acesta conține arborele de apeluri de funcții pe care le execută programul dumneavoastră, și poate fi procesat ulterior pentru a urmări o reprezentare vizuală a execuției programului.

 

Formatul de ieșire WEB3TRACER_OUTPUT_PROCESSED returnează arborele de apeluri în format PHP nativ, similar dar nu identic cu XHProf; pentr o referință completă a formatului de ieșire, citiți Format output prcesat.

 

Pentru a genera fișierul trace, se folosesc în cod o pereche de funcții: web3tracer_enable și web3tracer_disable; prima pornește iar a doua oprește procesul de înregistrare a apelurilor de funcții. Acest design e similar cu abordarea XHProf. Acestea sunt singurele două funcții pe care modulul le oferă programului PHP. Pentru a scrie fișiere formatate, este nevoie de o funcție de scriere, disponibilă în fișiere "writer" specifice. Pentru a profila un fișier, codul va arăta de forma:

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
    web3tracer_enable();
    
    {
    a();
    }
    
    $data=web3tracer_disable(WEB3TRACER_OUTPUT_PROCESSED);
	var_dump($data);
    include_once('../lib/callgrindWriter.php');
    include_once('../lib/xhprofWriter.php');
    web3tracer_callgrindWrite($data);
    web3tracer_xhprofWrite($data);
?>

 

Un exemplu mai elaborat de fișier PHP, pregătit atât pentru producție cât și pentru dezvoltare este:

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
    /*
     * Let's define this constant that tells us we're
     * running on a development server. If this is not 
     * present we'll asume we're on production
     */
    define('APP_DEVEL_SERVER',1);
    
    /*
     * If we're on devel, we use the profile _GET parameter
     * to initialize the profiling. If we're in production
     * mode, we profile one out of 1000 requests and log it
     * to /var/profiles for later analysis. For devel, one
     * should make sure PHP folder is writable, for 
     * production, that /var/profiles exists and is
     * writable.
     */
    $start_profile=false;
    $profile_output_dir='';
    if(
        defined('APP_DEVEL_SERVER')&&
        constant('APP_DEVEL_SERVER')
    ){
        if(isset($_GET['profile'])) {
            $start_profile=true;
        }
    } else {
        $start_profile=!rand(0,999);
        $profile_output_dir='/var/profiles/';
    }
    
    if($start_profile){
        web3tracer_enable();
    }
    

    {
    
        YOUR_CODE_HERE();
    
    }
    
    /*
     * Here we stop the profile and instruct web3tracer to
     * deposit the result in callgrind format, in a file
     * of the form callgrind.index_php_2012-09-16_21-48-22
     */
    if($start_profile){
        $data=web3tracer_disable(WEB3TRACER_OUTPUT_PROCESSED);
        include_once('../lib/callgrindWriter.php');
        web3tracer_callgrindWrite($data,null,$profile_output_dir);
    }
?>

 

Fișierul de mai sus este de asemenea inclus în directorul cu exemple al web3tracer.

 

Note importante:

  • Profilul trebuie să înceapă și să se termine în aceeași funcție

Deoarece se efectuează calcule elaborate pentru tratarea recursivității, o cerință a sistemului este ca funcțiile web3tracer_enable și web3tracer_disable să fie apelate în aceeași funcție, sau în codul global. Dacă acest principiu nu este respectat, funcția de dezactivare va întoarce eroarea WEB3TRACER_ERROR_NESTING; vedeți secțiunea "Constante predefinite" pentru mai multe detalii.


(c) SC EXTEON SRL 2006-2009, Toate drepturile rezervate
Powered by   Web3 CMS