Jadual Kandungan
php类方法在线性能测试
Rumah pembangunan bahagian belakang tutorial php php类方法在线性能测试_PHP教程

php类方法在线性能测试_PHP教程

Jul 13, 2016 am 09:51 AM
prestasi kaedah

php类方法在线性能测试

在两个月前一个群里的朋友问了一个问题,他说:“现在他们公司的项目有一个模块的性能在线表现非常差,很长时间没有查出问题所在,老板一怒之下让他把所有类方法的执行时间给记录进行分析,并且不能影响现在的项目性能。”老板让他记录这些信息是为了分析具体影响性能的地方在哪些地方,待项目运行一段时间就去除。这个需求导致两个个问题,第一是怎么监听这个模块所有类方法的执行时间,第二是怎么能在不影响现在项目性能的情况下完成(本身性能就很差了),下面我们就这两个问题来分析:

一、怎么监听这个模块所有类方法的执行时间

这个问题他第一个想到的是在所有类方法处理前加一段代码记录时间,在返回数据前进行计算运行时间,然后记录日志。这种方法一定是可行的,而且对性能的影响不是很大,但是…… 反正我不会这么干了,程序员都是懒惰的,而且都是很聪明的,我们不是码农,如果这么实施,那么要改动的代码量太大了,重复很久没有意义没有技术含量的工作,其次以后删除的时候又来一次,我会奔溃。当然位朋友也不会这么干,所以我才知道了这个奇葩的需求。

怎么解决呢,本来这么任务解决起来确实很费劲,我们可以借用__call()和__callStatic()对类方法进行重载,在php5.3以前静态方法只能自己一个个去加了,感谢php5.3新增了__callStatic()魔术方法。有人会问了这个两个魔术方法都是在类方法不存在的时候才有用,他们怎么能实现这个需求呢?这个问题等会看代码,下面分析第二个问题吧。

二、怎么能在不影响现在项目性能的情况下完成

为啥我说会有这个问题呢?之前分析需求的时候确实有,但是在回答第一个问题的时候已经说了解决方案,我认为采用__call()和__callStatic()对类方法进行重载,比较简单实现,且对现有项目性能影响很小。

我们在这个问题里主要讨论一些其它方法,其实实现性能分析的扩展也有很多,xdebug、xhprof等,都知道xdebug性能损耗很大,不适合在正式环境使用,xhprof性能损耗相对较小,可在正式环境使用。那为什么不用xhprof呢?有三点:1.性能损耗略大;2.日志记录格式不灵活,对日志的分析造成困扰;3.有些函数没法统计,而且会出现严重错误(如:call_user_func_array)

既然已经确定解决方案,我们就先看一个demo吧

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

/**

 * 类方法性能监听

 *

 * @author 戚银  thinkercode@sina.com

 * @date    2015-05-31 22:09

 */

class demo {

 

    /**

     * 普通类方法

     *

     * @access public

     * @return void

     */

    public function test1(){

        for($i=0; $i<100; ++$i){

 

        }

    }

 

    /**

     * 静态方法

     *

     * @access public

     * @return void

     */

    public static function test2(){

        for($i=0; $i<100; ++$i){

 

        }

    }

}

Salin selepas log masuk

看上面的demo类,其中有两个方法,一个普通方法,一个静态方法,我们业务层调用的方式如下:

1

2

3

<?php

(new demo())->test1();

demo::test2();

Salin selepas log masuk

我们保证一个原则就是不改变类以外的代码,只调整该类来实现,下面我采用__call()和__callStatic()对类方法进行重载。

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

54

55

56

57

58

59

60

61

62

63

<?php

/**

 * 类方法性能监听

 *

 * @author 戚银  thinkercode@sina.com

 * @date    2015-05-31 22:09

 */

class demo {

 

    /**

     * 普通类方法

     *

     * @access public

     * @return void

     */

    public function _test1(){

        for($i=0; $i<100; ++$i){

 

        }

    }

 

    /**

     * 静态方法

     *

     * @access public

     * @return void

     */

    public static function _test2(){

        for($i=0; $i<100; ++$i){

 

        }

    }

 

    /**

     * 类魔术方法

     *

     * @access public

     * @param string $name

     * @param array  $arguments

     * @return mixed

     */

    public function __call($name, $arguments){

        $startTime = microtime(true);

        $data = call_user_func_array(array($this, &#39;_&#39;.$name), $arguments);

        echo microtime(true) - $startTime;

        return $data;

    }

 

    /**

     * 类魔术方法

     *

     * @access public

     * @param string $name

     * @param array  $arguments

     * @return mixed

     */

    public static function __callStatic($name, $arguments){

        $startTime = microtime(true);

        $data = call_user_func_array(array(__CLASS__, &#39;_&#39;.$name), $arguments);

        echo microtime(true) - $startTime;

        return $data;

    }

}

Salin selepas log masuk

在这段代码里面我们添加了__call()和__callStatic()方法,如果只添加这两个方法是没用的,因为之前业务层的代码没变,调用的方法是存在的,要使调用的方法不存在而且只改变类本身,就只能在方法名前加一个下划线(这个规则自己定),然后我们在调用这个两个方法发现输出了两个方法的执行时间。

这样实现也发现了几个问题,改动的代码还是很多,每个类都要加,很累…………,其实善用手边的工具很好实现,使用继承是个很好的方式,把这个两个方法写到一个基类里,然后所有类都这继承这个基类。类方法名替换,除了构造方法和析构方法,直接使用编辑器批量替换即可,以后改回来也是。

注意:如果使用继承方式实现,__callStatic()方法的__CLASS__需要调整。

这里以在类方法前增加下划线实现,使业务层找不到类方法,其实这个例子还可以调整方法可见性来实现,但是可见性实现的方式有以下弊端:

1. 调整后以后想调整回来很有可能弄错类方法可见性,不知道哪些方法调整了。

2. 调整可见性只对类公共方法有效,对受保护和私用的方法不可用

当然如果只记录类公共方法的性能,可以使用改变方法可见性实现,但一定记得在注视上添加标注该方法是改变过的,而且一定被把public改成private,因为如果有类继承这个类就没法访问这个方法了。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1011353.htmlTechArticlephp类方法在线性能测试 在两个月前一个群里的朋友问了一个问题,他说:“现在他们公司的项目有一个模块的性能在线表现非常差,很长时...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memulihkan kenalan yang dipadam pada WeChat (tutorial mudah memberitahu anda cara memulihkan kenalan yang dipadam) Bagaimana untuk memulihkan kenalan yang dipadam pada WeChat (tutorial mudah memberitahu anda cara memulihkan kenalan yang dipadam) May 01, 2024 pm 12:01 PM

Malangnya, orang sering memadamkan kenalan tertentu secara tidak sengaja atas sebab tertentu WeChat ialah perisian sosial yang digunakan secara meluas. Untuk membantu pengguna menyelesaikan masalah ini, artikel ini akan memperkenalkan cara mendapatkan semula kenalan yang dipadam dengan cara yang mudah. 1. Fahami mekanisme pemadaman kenalan WeChat Ini memberi kita kemungkinan untuk mendapatkan semula kenalan yang dipadamkan Mekanisme pemadaman kenalan dalam WeChat mengalih keluar mereka daripada buku alamat, tetapi tidak memadamkannya sepenuhnya. 2. Gunakan fungsi "Pemulihan Buku Kenalan" terbina dalam WeChat menyediakan "Pemulihan Buku Kenalan" untuk menjimatkan masa dan tenaga Pengguna boleh mendapatkan semula kenalan yang telah dipadamkan dengan cepat melalui fungsi ini. 3. Masuk ke halaman tetapan WeChat dan klik sudut kanan bawah, buka aplikasi WeChat "Saya" dan klik ikon tetapan di sudut kanan atas untuk memasuki halaman tetapan.

Rahsia penetasan telur naga mudah alih terbongkar (langkah demi langkah untuk mengajar anda cara berjaya menetas telur naga mudah alih) Rahsia penetasan telur naga mudah alih terbongkar (langkah demi langkah untuk mengajar anda cara berjaya menetas telur naga mudah alih) May 04, 2024 pm 06:01 PM

Permainan mudah alih telah menjadi sebahagian daripada kehidupan orang ramai dengan perkembangan teknologi. Ia telah menarik perhatian ramai pemain dengan imej telur naga yang comel dan proses penetasan yang menarik, dan salah satu permainan yang telah menarik perhatian ramai ialah versi mudah alih Dragon Egg. Untuk membantu pemain memupuk dan mengembangkan naga mereka sendiri dengan lebih baik dalam permainan, artikel ini akan memperkenalkan kepada anda cara menetas telur naga dalam versi mudah alih. 1. Pilih jenis telur naga yang sesuai Pemain perlu berhati-hati memilih jenis telur naga yang mereka suka dan sesuai dengan diri mereka, berdasarkan pelbagai jenis sifat dan kebolehan telur naga yang disediakan dalam permainan. 2. Tingkatkan tahap mesin pengeraman Pemain perlu meningkatkan tahap mesin pengeraman dengan menyelesaikan tugasan dan mengumpul prop Tahap mesin pengeraman menentukan kelajuan penetasan dan kadar kejayaan penetasan. 3. Kumpul sumber yang diperlukan untuk penetasan Pemain perlu berada dalam permainan

Bagaimana untuk menetapkan saiz fon pada telefon mudah alih (mudah melaraskan saiz fon pada telefon bimbit) Bagaimana untuk menetapkan saiz fon pada telefon mudah alih (mudah melaraskan saiz fon pada telefon bimbit) May 07, 2024 pm 03:34 PM

Menetapkan saiz fon telah menjadi keperluan pemperibadian yang penting kerana telefon mudah alih menjadi alat penting dalam kehidupan seharian manusia. Untuk memenuhi keperluan pengguna yang berbeza, artikel ini akan memperkenalkan cara meningkatkan pengalaman penggunaan telefon mudah alih dan melaraskan saiz fon telefon mudah alih melalui operasi mudah. Mengapa anda perlu melaraskan saiz fon telefon mudah alih anda - Melaraskan saiz fon boleh menjadikan teks lebih jelas dan mudah dibaca - Sesuai untuk keperluan membaca pengguna yang berbeza umur - Mudah untuk pengguna yang kurang penglihatan menggunakan saiz fon fungsi tetapan sistem telefon mudah alih - Cara memasukkan antara muka tetapan sistem - Dalam Cari dan masukkan pilihan "Paparan" dalam antara muka tetapan - cari pilihan "Saiz Fon" dan laraskan saiz fon dengan pihak ketiga aplikasi - muat turun dan pasang aplikasi yang menyokong pelarasan saiz fon - buka aplikasi dan masukkan antara muka tetapan yang berkaitan - mengikut individu

Cara memilih pelindung skrin telefon mudah alih untuk melindungi skrin telefon mudah alih anda (beberapa perkara utama dan petua untuk membeli pelindung skrin telefon mudah alih) Cara memilih pelindung skrin telefon mudah alih untuk melindungi skrin telefon mudah alih anda (beberapa perkara utama dan petua untuk membeli pelindung skrin telefon mudah alih) May 07, 2024 pm 05:55 PM

Filem telefon bimbit telah menjadi salah satu aksesori yang sangat diperlukan dengan populariti telefon pintar. Untuk memanjangkan hayat perkhidmatannya, pilih filem telefon mudah alih yang sesuai untuk melindungi skrin telefon mudah alih. Untuk membantu pembaca memilih filem telefon bimbit yang paling sesuai untuk diri mereka sendiri, artikel ini akan memperkenalkan beberapa perkara utama dan teknik untuk membeli filem telefon bimbit. Fahami bahan dan jenis filem telefon bimbit: Filem PET, TPU, dsb. Filem telefon mudah alih diperbuat daripada pelbagai bahan, termasuk kaca terbaja. Filem PET agak lembut, filem kaca terbaja mempunyai rintangan calar yang baik, dan TPU mempunyai prestasi kalis kejutan yang baik. Ia boleh diputuskan berdasarkan keutamaan dan keperluan peribadi semasa memilih. Pertimbangkan tahap perlindungan skrin Jenis filem telefon mudah alih yang berbeza mempunyai tahap perlindungan skrin yang berbeza. Filem PET terutamanya memainkan peranan anti-calar, manakala filem kaca terbaja mempunyai rintangan jatuh yang lebih baik. Anda boleh memilih untuk menjadi lebih baik

Prestasi larian tempatan perkhidmatan Embedding melebihi OpenAI Text-Embedding-Ada-002, yang sangat mudah! Prestasi larian tempatan perkhidmatan Embedding melebihi OpenAI Text-Embedding-Ada-002, yang sangat mudah! Apr 15, 2024 am 09:01 AM

Ollama ialah alat super praktikal yang membolehkan anda menjalankan model sumber terbuka dengan mudah seperti Llama2, Mistral dan Gemma secara tempatan. Dalam artikel ini, saya akan memperkenalkan cara menggunakan Ollama untuk mengvektorkan teks. Jika anda belum memasang Ollama secara tempatan, anda boleh membaca artikel ini. Dalam artikel ini kita akan menggunakan model nomic-embed-text[2]. Ia ialah pengekod teks yang mengatasi prestasi OpenAI text-embedding-ada-002 dan text-embedding-3-small pada konteks pendek dan tugas konteks panjang. Mulakan perkhidmatan nomic-embed-text apabila anda telah berjaya memasang o

Perbandingan prestasi rangka kerja Java yang berbeza Perbandingan prestasi rangka kerja Java yang berbeza Jun 05, 2024 pm 07:14 PM

Perbandingan prestasi rangka kerja Java yang berbeza: Pemprosesan permintaan REST API: Vert.x adalah yang terbaik, dengan kadar permintaan 2 kali SpringBoot dan 3 kali Dropwizard. Pertanyaan pangkalan data: HibernateORM SpringBoot adalah lebih baik daripada Vert.x dan ORM Dropwizard. Operasi caching: Pelanggan Hazelcast Vert.x lebih unggul daripada mekanisme caching SpringBoot dan Dropwizard. Rangka kerja yang sesuai: Pilih mengikut keperluan aplikasi Vert.x sesuai untuk perkhidmatan web berprestasi tinggi, SpringBoot sesuai untuk aplikasi intensif data, dan Dropwizard sesuai untuk seni bina perkhidmatan mikro.

Pembalikan nilai kunci tatasusunan PHP: analisis perbandingan prestasi kaedah yang berbeza Pembalikan nilai kunci tatasusunan PHP: analisis perbandingan prestasi kaedah yang berbeza May 03, 2024 pm 09:03 PM

Perbandingan prestasi kaedah membalik nilai kunci tatasusunan PHP menunjukkan bahawa fungsi array_flip() berprestasi lebih baik daripada gelung for dalam tatasusunan besar (lebih daripada 1 juta elemen) dan mengambil masa yang lebih singkat. Kaedah gelung untuk membalikkan nilai kunci secara manual mengambil masa yang agak lama.

Apakah kesan fungsi C++ terhadap prestasi program? Apakah kesan fungsi C++ terhadap prestasi program? Apr 12, 2024 am 09:39 AM

Kesan fungsi pada prestasi program C++ termasuk overhed panggilan fungsi, pembolehubah tempatan dan overhed peruntukan objek: Overhed panggilan fungsi: termasuk peruntukan bingkai tindanan, pemindahan parameter dan pemindahan kawalan, yang mempunyai kesan ketara pada fungsi kecil. Overhed pembolehubah tempatan dan peruntukan objek: Sebilangan besar pembolehubah tempatan atau penciptaan objek dan pemusnahan boleh menyebabkan limpahan tindanan dan kemerosotan prestasi.

See all articles