search
HomeBackend DevelopmentPHP TutorialPHP class method online performance test_PHP tutorial

PHP class method online performance test

A friend in a group asked a question two months ago. He said: "Now their company's project has a module whose online performance is very poor. The problem has not been found for a long time. The boss was furious. The boss asked him to record the execution time of all class methods for analysis, and it should not affect the current project performance. "The boss asked him to record this information to analyze the specific places that affect performance, and remove it after the project has been running for a period of time. This requirement leads to two problems. The first is how to monitor the execution time of all class methods in this module. The second is how to complete it without affecting the performance of the current project (the performance itself is very poor). Here we will do this Two questions to analyze:

1. How to monitor the execution time of all class methods in this module

The first thing he thought about this problem was to add a piece of code to record the time before all class method processing, calculate the running time before returning the data, and then record the log. This method must be feasible, and it will not have a great impact on performance, but... I won't do it anyway. Programmers are lazy, and they are all very smart. We are not coders. If it is implemented like this , then the amount of code to be changed is too large, and meaningless and technical work will be repeated for a long time. Secondly, when I delete it again in the future, I will crash. Of course, none of my friends would do this, so I learned about this strange need.

How to solve it? It is really difficult to solve such a task. We can use __call() and __callStatic() to overload class methods. Before php5.3, static methods could only be added one by one. , thanks to the new __callStatic() magic method in php5.3. Some people may ask that these two magic methods are only useful when the class method does not exist. How can they achieve this requirement? We will look at the code for this question later. Let’s analyze the second question below.

2. How can it be completed without affecting the performance of the current project

Why do I say there is this problem? It was indeed there when analyzing the requirements before, but the solution was already mentioned when answering the first question. I think using __call() and __callStatic() to overload class methods is relatively simple to implement, and it is also good for existing methods. Project performance impact is minimal.

We mainly discuss some other methods in this question. In fact, there are many extensions to achieve performance analysis, such as xdebug, xhprof, etc. It is known that xdebug has a large performance loss and is not suitable for use in a formal environment. xhprof has a relatively small performance loss. Can be used in formal environments. So why not use xhprof? There are three points: 1. The performance loss is slightly larger; 2. The log recording format is inflexible, which causes trouble in log analysis; 3. Some functions cannot be counted, and serious errors will occur (such as: call_user_func_array)

Now that the solution has been determined, let’s take a look at a demo first

/**
 * 类方法性能监听
 *
 * @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){

		}
	}
}

Look at the demo class above. There are two methods in it, one ordinary method and one static method. The way our business layer calls it is as follows:

<?php
(new demo())->test1();
demo::test2();

We ensure that one principle is not to change the code outside the class, but only adjust the class to implement it. Below I use __call() and __callStatic() to overload the class method.

<?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;
	}
}

In this code we have added the __call() and __callStatic() methods. It is useless if we only add these two methods, because the previous business layer code has not changed and the calling method exists. To make the called method not exist and only change the class itself, we can only add an underscore before the method name (this rule is determined by ourselves), and then when we call these two methods, we find that the execution time of the two methods is output.

Several problems have been discovered in this implementation. There are still a lot of code changes, and each class has to be added, which is very tiring... In fact, it is easy to implement by making use of the tools at hand. Using inheritance is a good way. Write these two methods into a base class, and then all classes will inherit this base class. For class method name replacement, except for constructors and destructors, you can directly use the editor to replace them in batches, and you can change them back later.

Note: If implemented using inheritance, the __CLASS__ of the __callStatic() method needs to be adjusted.

Here is implemented by adding an underscore before the class method so that the business layer cannot find the class method. In fact, this example can also be implemented by adjusting the method visibility, but the visibility implementation method has the following disadvantages:

1. If you want to adjust it back after adjustment, it is very likely that the visibility of class methods will be wrong, and you will not know which methods have been adjusted.

2. Adjusting visibility is only effective for class public methods, not for protected and private methods

Of course, if you only record the performance of public methods of a class, you can use changing method visibility, but you must remember to add a mark on the attention that the method has been changed, and it must be changed from public to private, because if there is class inheritance This class cannot access this method.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1011353.htmlTechArticlephp class method online performance test A friend in the group asked a question two months ago. He said: “Now their company’s project has a module whose performance is very poor online for a long time...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
如何优化Java开发中的文件压缩解压性能如何优化Java开发中的文件压缩解压性能Jul 01, 2023 am 11:54 AM

如何优化Java开发中的文件压缩解压性能随着互联网技术的不断发展,文件传输和存储成为我们日常开发中经常遇到的需求。为了减小网络传输的带宽消耗和文件存储的空间占用,我们通常需要对文件进行压缩。在Java开发中,常用的文件压缩格式有ZIP和GZIP。本文将介绍如何优化Java开发中的文件压缩解压性能,帮助提高效率。一、合理选择压缩算法在Java开发中,进行文件压

电脑性能看哪些方面电脑性能看哪些方面Dec 23, 2020 pm 01:54 PM

电脑性能看如下几个方面:1、电脑安装的操作系统的版本;2、电脑所配置的处理器类型;3、电脑安装的内存大小;4、操作系统是32位的还是64位的。

Vue3中的lazy函数详解:懒加载组件提高应用性能Vue3中的lazy函数详解:懒加载组件提高应用性能Jun 19, 2023 am 08:39 AM

Vue3是一款流行的JavaScript框架,它具有易学易用、高效稳定的特点,尤其擅长构建单页应用程序(SPA)。Vue3中的lazy函数,作为懒加载组件的利器之一,可以很大程度上提高应用程序的性能。本文将详解Vue3中的lazy函数的使用方法与原理,以及它在实际开发中的应用场景和优点。什么是懒加载?在传统的前后端分离的开发中,前端开发人员往往需要处理大量的

Java开发中如何优化字符串查找性能Java开发中如何优化字符串查找性能Jun 29, 2023 am 11:12 AM

在Java开发中,字符串查找是一个常见且关键的操作。无论是在文本处理、数据分析还是系统日志分析等应用场景中,字符串的查找性能都对程序的整体性能有着重要影响。因此,如何优化字符串查找性能成为了Java开发中不可忽视的问题。一、使用indexOf()方法代替contains()方法在字符串查找中,Java提供了两个常用的方法:indexOf()和contains

Java随机数生成性能优化方法Java随机数生成性能优化方法Jun 30, 2023 pm 12:25 PM

如何优化Java开发中的随机数生成性能随机数在计算机科学中有广泛的应用,特别是在密码学、模拟、游戏等领域。在Java开发中,我们常常需要生成随机数来满足各种需求。然而,随机数生成的性能通常是开发者关注的问题之一。本文将探讨如何优化Java开发中的随机数生成性能。使用ThreadLocalRandom类在Java7中引入了ThreadLocalRandom类

如何通过设置MySQL缓存来提高性能如何通过设置MySQL缓存来提高性能May 11, 2023 am 08:09 AM

MySQL是一种常用的关系型数据库管理系统(RDBMS),在各种应用场景下都得到广泛的应用。然而,在高并发、大数据量的情况下,MySQL数据库的性能受到挑战,特别是在读写操作频繁的场景下,容易出现性能瓶颈。为了提高MySQL数据库的性能,可以通过设置MySQL缓存来减少数据库的IO操作,从而提高MySQL的查询效率。在本文中,我们将介绍如何通过设置MySQL

自动驾驶决策规划技术详解自动驾驶决策规划技术详解Apr 04, 2023 pm 02:35 PM

随着深度强化学习技术的快速发展,越来越多的研究团队开始将其应用于自动驾驶决策规划中,将行为决策与运动规划模块相融合,直接学习得到行驶轨迹。 自动驾驶中的决策规划模块是衡量和评价自动驾驶能力最核心的指标之一,它的主要任务是在接收到传感器的各种感知信息之后,对当前环境作出分析,然后对底层控制模块下达指令。典型的决策规划模块可以分为三个层次:全局路径规划、行为决策、运动规划。01 引言在一套完整的自动驾驶系统中,如果将感知模块比作人的眼睛和耳朵,那么决策规划就是自动驾驶的大脑。大脑在接收到传感器的各种

一篇学会本地知识库对LLM的性能优化一篇学会本地知识库对LLM的性能优化Jun 12, 2023 am 09:23 AM

昨天一个跑了220个小时的微调训练完成了,主要任务是想在CHATGLM-6B上微调出一个能够较为精确的诊断数据库错误信息的对话模型来。不过这个等了将近十天的训练最后的结果令人失望,比起我之前做的一个样本覆盖更小的训练来,差的还是挺大的。这样的结果还是有点令人失望的,这个模型基本上是没有实用价值的。看样子需要重新调整参数与训练集,再做一次训练。大语言模型的训练是一场军备竞赛,没有好的装备是玩不起来的。看样子我们也必须要升级一下实验室的装备了,否则没有几个十天可以浪费。从最近的几次失败的微调训练来看

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.