PHP 程序加速探索

kaggle——销量预测的baseline(M5 Forecasting - Accuracy) 前言 在刚刚结束的kaggle比赛M5 Forecasting - Accuracy中,因为是第一次参加,笔者也是花了大量的时间和精力在上面,最终拿到一块银牌(所以我拿到了大学第一个考试挂科。。。求求电磁场老师高抬贵手给点平时分放我一马吧。。。早上看到kaggle成绩异常兴奋,中午考完直接爆炸=。=),当然运气占了很大因素,这次比赛private leadboard的shake up非常大,排名波动几千名都存在的。笔者运气不错,是向上的shake:)。这里总结一下销量预测的基本流程。 从下图可以看到这次比 阅读详情
Haohappy 2004-07-27
haohappy@msn.com

- (一)简介
- (二)是否需要加速?
- (三)如何加速?
    -<1> 测试
        ◆ 服务器负载测试 ApacheBench
        ◆ 脚本执行速度测试 PEAR:: Benchmark
   
-<2> 加速
    
   ◆ 代码优化
       ◆ 压缩输出 Gzip
       ◆ 内容缓存输出 PEAR Content cache
       ◆ 函数缓存输出 PEAR Function cache
       ◆ 加速工具软件 APC、Turck MMCache、PHPA、Zend Performance Suite
- (四)总结

(一)简介
 
  本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。
 
(二)是否需要加速?
 
  这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。
我想对于大部份人(包括我自己)来说,很多WEB项目都是在很紧张的时间里完成的,通常没有经过缜密的思考和严格的测试。当开始一个新的WEB项目。很多人都在构建那种“快而乱”的应用,缺乏必要的时间来调整和改良代码,这时优化和加速就是我们必须采取的措施。
  然而需要特别指出的是,并不是所有程序都需要加速。
  优化已完成的代码是很浪费时间的,最好的方法是在写代码的时候就注意到效率,然后完成项目后只优化确实需要优化的那部份。一般一个程序只会有少数几个影响速度的瓶颈,将它们找出来并解决掉,程序就可以很好地运行。另外,当遇到执行效率低下的情况,首先要用大局的眼光来找出影响效率的主要因素,而不要拘泥于细节—例如数据量过大,服务器带宽不够,或硬件配置过低,在这样的情况下,优化代码于事无补。
  另外,在没有发现程序有明显的执行缓慢的迹象时,就不要太吹毛求疵,为了改进一些非常细节的代码而浪费时间。用这些时间,你可以完成另一个项目或为原来的项目完成一个扩展功能。当然你可以笑话我不够负责,没有把工作做得尽善尽好,我也可以说你是完美主义者:-)  
  综上,在你决定为你的PHP程序提速之前,问问自己是否有必要。
 
(三)如何加速?
 
要回答“如何加速”这个问题前,需要先回答以下两个小问题:
  1. 你的程序慢在哪一部份?
  2. PHP可以从哪几个方面考虑加速?
  第一个小问题显然我无法给你答案,但我建议你用“测试脚本执行速度”的方法来解决。只有找出限制速度的瓶颈,才能考虑如何去解决。
  第二个小问题我大概的答案是:代码优化,压缩输出,内容缓存输出,函数缓存输出,加速/缓存工具软件。如果你知道更多请告诉我:-)
  下面我们来详细地研究一下这几个方面的相关技术。当然实际上每个方面都有无数的细节可以讨论,下面的内容难免会有片面的地方,欢迎补充。
 
<1> 测试
◆ 服务器负载测试

  服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试。这里我以目前最常用的Apache服务器为例。
  Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何。ApacheBench 可以针对某个特定的 URL 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据作为调整服务器设定或程序的依据。
  在命令行下输出:
 
./ab -n number_of_total_requests /
-c number_of_simultaneous_requests /
http://your_web_server/your_php_app.php
 
例如:
 
./ab -n 1000 -c 50 http://www.domain.com/myapp.php
 
  AB将同时向 http://www.domain.com/myapp.php发出50个并发请求,共发出1000次。
  测试结果将可能是这样的:
 
Server Software: Apache/2.0.16
Server Hostname: localhost
Server Port: 80
Document Path: /myapp.php
Document Length: 1311 bytes
Concurrency Level: 50
Time taken for tests: 8.794 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 1754000 bytes
HTML transferred: 1311000 bytes
Requests per second: 113.71
Transfer rate: 199.45 kb/s received
Connection Times (ms)
min avg max
Connect: 0 0 5
Processing: 111 427 550
Total: 111 427 555
 
  myapp.php每秒钟可以处理的请求数为113.71个。将请求数增加,看看服务器能否处理更大的压力。你也需要调节Apache的MaxClients, ThreadsPerChild, MaxThreadsPerChild 等参数,基于你的 httpd.conf 中的 MPM 模块选择。
  如果你想得到更详细的信息,请到 www.apache.org上查阅一些更深入的文档,包括模块和第三方的提高效率的工具。修改httpd.conf后,要重启Apache服务器,然后再用AB测试。你会看到每秒请求数增加或减少。
  记下每次的参数,最后选择最佳效率的那种配置。
  要指出的是,除了AB,还有许多优秀的服务器性能测试软件。另外,如果你的服务器不是 Apache,请自行寻找测试方法。
 
◆ 脚本执行速度测试
 
  前面有提到,只有找到影响速度的代码,我们才有可能进行优化。PEAR的benchmark包中的Benchmark_Timer类和Benchmark_Iterate类,可以用来很方便地测试脚本执行的速度。(关于PEAR的安装与配置请自行查看相关资料)
首先用Benchmark_Iterate类来测试程序中某个函数或类的某个方法的执行时间。
 
benchmark1.php

<?php

require_once('Benchmark/Iterate.php');
$benchmark = new Benchmark_Iterate();

$benchmark->run(10, 'myFunction','test');
$result = $benchmark->get();
echo
"

"
; print_r($result); echo "
"
;
exit;

function
myFunction($var) {
    
// do something
    
echo 'Hello ';
}

?>
 
  建立benchmark Iterate对象$benchmark,这个对象用来执行myFunction函数10次。
  $argument变量每次都传递给myFunction. 多次运行的分析结果存入$result,然后用benchmark对象的get()方法来获取。这个结果用print_r()输出到屏幕。通常会输出这样的结果:
  Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
Array(
    [1] => 0.000427
    [2] => 0.000079
    [3] => 0.000072
    [4] => 0.000071
    [5] => 0.000076
    [6] => 0.000070
    [7] => 0.000073
    [8] => 0.000070
    [9] => 0.000074
    [10] => 0.000072
    [mean] => 0.000108
    [iterations] => 10
)
  myFunction的每次执行,benchmark对象都会跟踪执行时间。并且会计算平均的执行时间([mean]那一行)。通过多次运行目标函数,你可以得到该函数的平均运行时间。
  在实际测试中,函数的次数应当至少1000次左右,这样可以得到较客观的结果。
 
  现在我们看看另一个测试脚本运行时间的方法--使用Benchmark_Timer类来测试一段代码执行所消耗的时间及这一段代码中每次调用与下一次调用间的时间。
 
benchmark2.php
 
<?php
require_once 'Benchmark/Timer.php';
$timer = new Benchmark_Timer();
$timer->start();
$timer->setMarker('start_myFunction');

for(
$i=0; $i<10; $i++){
    
myFunction($argument);
}
$timer->setMarker('end_myFunction');
$timer->stop();
$profiling = $timer->getProfiling();

echo
'
Time elapsed: '
.
$timer->timeElapsed('start_myFunction','end_myFunction') .'
'
;
echo
'
'
; print_r($profiling); echo '
'
;
exit;

function
myFunction($var) {
    static
$counter = 0;
    
// do something
    
echo $counter++ . ' ';
}
?>

  首先,建立一个benchmark timer对象$timer。然后调用start()方法,表示开始计时。 SetMaker()方法用来标记要测试的代码段。MyFunction()函数在循环中被调用,表示一段要执行的代码(当然实际中不会这么简单)。然后再用$timer对象的setMarker()方法标记程序执行终点。分析信息用getProfiling()来获取。在两个标记间程序执行消耗的时间用timeElapsed()方法计算出来(就像例子中的循环)。最后,用print_r()输出信息到屏幕:
Array
(
    [0] => Array
        (
            [name] => Start
            [time] => 1085730111.27175200
            [diff] => -
            [total] => 1085730111.271752
        )
 
    [1] => Array
        (
            [name] => start_myFunction
            [time] => 1085730111.27203800
            [diff] => 0.000286
            [total] => 1085730111.272038
        )
 
    [2] => Array
        (
            [name] => end_myFunction
            [time] => 1085730111.27263200
            [diff] => 0.000594
            [total] => 1085730111.272632
        )
 
    [3] => Array
        (
            [name] => Stop
            [time] => 1085730111.27271800
            [diff] => 0.000086
            [total] => 1085730111.272718
        )
)
0 1 2 3 4 5 6 7 8 9
Time elapsed: 0.000594
 
  通过这种方法,你可以在代码中设置大量时间段标记,获取每段代码执行时消耗的时间,很容易可以看出到底是哪一部份的代码影响了整个程序的运行效率。然后开始着手对这部份代码进行改进。
  用以上两种方法,你可以找出代码中最影响速度的部份代码。另外还可以用来对优化后的代码进行测试,看看到底执行速度提高了多少。通过测试->优化->测试->优化 …这样不断循环,你可以最终确定提供最佳效率的代码。
 
<2> 加速
 
◆ 代码优化
  掌握了PEAR::BenchMark,现在你已经知道如何测试你的代码,知道如何判断你的代码是快是慢,是哪一部份比较慢。那么接下来我要说的就是如何消灭或优化那部份慢的代码。
这一点上我个人最主要的经验只有两点,一是消除错误的或低效的循环;二是优化数据库查询语句。其实还存在一些其它的优化细节,比如“str_replace比ereg_replace快”、“echo比print快”等等。这些我暂时都放在一边,稍后我会提到用缓存来对付过于频繁的IO。
下面我们将三个功能相同,但程序写法不同的函数的效率(消耗的时间)进行对比。
 
badloops.php
 
<?php
require_once('Benchmark/Iterate.php');
define('MAX_RUN',100);
$data = array(1, 2, 3, 4, 5);

doBenchmark('v1', $data);
doBenchmark('v2', $data);
doBenchmark('v3', $data);
function
doBenchmark($functionName = null, $arr = null)
{
    
reset($arr);
    
$benchmark = new Benchmark_Iterate;
    
$benchmark->run(MAX_RUN, $functionName, $arr);
    
$result = $benchmark->get();
    echo
'<br>';
    
printf("%s ran %d times where average exec time %.5f ms",$functionName,$result['iterations'],$result['mean'] * 1000);
}

function
v1($myArray = null) {
    
// 效率很差的循环
    
for ($i =0; $i < sizeof($myArray); $i++)
    {
        echo
'<!--' . $myArray[$i] . ' --> ';
    }
}

function
v2($myArray = null) {
    
// 效率略有提高
    
$max = sizeof($myArray);
    for (
$i =0; $i < $max ; $i++)
    {
        echo
'<!--' . $myArray[$i] . ' --> ';
    }
}

function
v3($myArray = null){
    
//最佳效率
    
echo "<!--", implode(" --> <!--", $myArray), " --> ";
}
?>
 
  程序输出的结果大概是这样的:
 
v1 ran 100 times where average exec time 0.18400 ms
v2 ran 100 times where average exec time 0.15500 ms
v3 ran 100 times where average exec time 0.09100 ms
 
  可以看到,函数的执行时间变少,效率上升。
  函数v1有个很明显的错误,每一次循环的时间,都需要调用sizeof()函数来计算。函数v2则在循环外把$myArray数组的元素个数存到$max变量中,避免了每次循环都要计算数组的元素个数,所以效率提高了。函数v3的效率最高,利用了现成的函数,避免循环。
  这个例子只是给你一个感性的认识,明白什么是相对高效的代码。在实际开发中,我相信会有很多人会迷迷糊糊地写出很多低效率的代码。要把代码写得精炼而高效,恐怕需要时间去锤炼:-) 但这是另一个话题了,我们略过不谈。
  数据库应用基本上每个PHP程序都会用到,在实际开发中我发现最影响整个系统效率的就是数据库这部份。至于数据库的优化和数据查询语句的优化,在此限于篇幅不详细讨论。你可以参看这两篇文章:
  及这篇讨论:
http://club.phpe.net/index.php?s=&act=ST&f=15&t=4783&st=0(前面几篇贴子总结不错),主要是针对MySQL的。
 
◆ 压缩输出 gzip
 
  利用Apache中的mod_gzip模块,我们可以利用gzip的压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端的浏览器。如果是纯文本的内容,效果非常明显,大约可以压缩到原来的30%-40%,使用户的浏览速度大大加快。
  Gzip需要客户端浏览器支持,目前大部份浏览器都支持gzip,如IE,Netscape,Mozilla等,所以这种方法值得一试。我们可以利用PHP中的预定义变量$_SERVER[‘HTTP_ACCEPT_ENCODING’]来判断客户端浏览器是否支持gzip。
 
gzip1.php

<?php
if(ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])) {
    
//浏览器支持
} else {
    
//浏览器不支持,输出其它内容
}
?>
 
  接下来我们对上面这个PHP程序进行扩展,使用ob_start(ob_gzhandler)来将网页内容压缩,存入缓冲并发送给支持gzip的浏览器,浏览器会自动将压缩后的内容解压,显示。
 
gzip2.php
 
<?php
define
('MAX',100);

if(
ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING']))
{
    
//浏览器支持gzip,将内容压缩并缓冲输出
    
ob_start("ob_gzhandler");
    
$output = '';

    for(
$i=0;$i<=MAX;$i++)
    {
        
$output .= "This is line $i
"
;
    }
    echo
"浏览器支持gzip压缩输出
"
;
    echo
$output;
}
else
{
    
//浏览器不支持,直接输出
    
for($i=0;$i<=MAX;$i++)
    {
        
$output .= "This is line $i
"
;
    }

    echo
"浏览器不支持gzip压缩输出
"
;
    echo
$output;
}
?>

 
  使用gzip压缩生成的网页的HTTP头信息与一般的网页相比中会多出这样的信息:
 
Content-Encoding: gzip
Content-Length: 270
 
  如果你想得到更详细的信息,请参看mod_gzip项目主页:
 
  类似地,我们也可以利用mod_deflate,压缩率比mod_gzip略低一些。调用zip函数需要耗用服务器内存,所以要慎用,视需求而定。
 
◆ 内容 缓存输出 PEAR cache
 
  接下来我们开始探索更常用的缓存技术,这也是本文的重点部份。首先我们使用PEAR中的cache包。PEAR可以将内容缓存于文件,数据库或者内存中,我们以文件为例。
  下面是一个没有使用缓存的PHP小程序:
 
pear_content_cache1.php
 
<?php
echo "这是内容。<P>"
;
echo
"当前时间是" . date('M-d-Y H:i:s A', time()) . "<BR>"
;
?>
 
  上面这个程序非常简单,现在我们为其加上缓存。
 
pear_content_cache2.php
 
<?php
require_once 'Cache/Output.php'
;

//设置缓存目录,必须是可写的
$cacheDir = './pear_cache'
;
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir
));

//如果nocache变量为空,使用缓存中的内容
//如果想获得最新的内容,就要赋值给nocache变量
if (empty($_REQUEST['nocache'
]))
{
    
// 建立一个独一的cache标识
    // 请求+Cookie信息
    
$cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS
));
}
else
{
    
//想获得最新的内容,ID为空
    
$cache_id = null
;
}


//看cache ID对应的缓存内容是否可用
if ($content = $cache->start($cache_id
))
{
    
//缓存已存在,直接输出,并结束脚本
    
echo $content
;
    exit();
}

// 缓存中不存在该内容,生成新内容并写入缓存
echo "这是内容。<P>"
;
echo
"当前时间是" . date('M-d-Y H:i:s A', time()) . "<BR>"
;
// 把内容写入缓存
echo $cache->end
();
?>
 
  分别刷新这两个文件,你会发现pear_content_cache1.php中的“当前时间是”这一行中的时间是随着刷新而变化的,而pear_content_cache2.php中的这一行则不变。这是由于pear_content_cache2.php使用了缓存,将用户请求的内容存入静态文件中。当用户再次请求时,它直接从文件中输出,而不需要用程序动态生成内容。
  对于pear_content_cache2.php,如果用户想要读取最新的信息,而不是缓存中成旧的信息。那么可以用http://…/pear_content_cache2.php?nocache=1 来访问,这将禁用缓存功能。刷新一下看看,你将发现时间会随之变化。
  总结一下PEAR内容缓存类的使用:
  1.包含PEAR包 要注意设对路径。
  2.包含Output.php中的cache类
require_once 'Cache/Output.php';
  3.设置缓存目录
$cacheDir = './pear_cache';
  确认这个目录是可写的。Cache数据将会写入这个目录的子目录中。
  4.建立一个输出缓存对象
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
  第一个参数表示我们使用基于“文件”方式的缓存,第二个参数是一个与缓存目录相关联的数组。
  5.产生一个唯一的cache ID
$cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS));
  这里$cache对象的generateID()方法通过提供一个信息数组(URL, HTTP POST data, 和 HTTP cookie)来独一无二地标识这个请求,与其它请求区分开来。
  6.增加一个逻辑判断语句看是否对应于cacheID的缓存数据是否已经存在,如果存在,获取数据并结束脚本。
if ($content = $cache->start($cache_id))
{   echo $content;
    exit();
}
  7. 将产生内容的代码放在以上逻辑语句之后,并结束使用cache对象。
echo $cache->end();
 

◆ 函数缓存输出 PEAR cache

  PEAR除了可以对输出的内容进行缓存处理外,还可以将对某个函数的调用结果缓存起来。这是个很有趣的功能,如果你的程序要频繁使用到某个函数,而且调用的结果相同的话,我建议你不妨试试,特别是当这个函数运行起来比较慢的时候。

  下面我们实现对一个执行起来很慢的函数slowFunction()的缓冲调用。
 
<?php
require_once 'Cache/Function.php'
;


$cacheDir = './pear_cache/'
;
$cache = new Cache_Function('file',array('cache_dir' => $cacheDir
));
$arr = array('苹果', '梨','西瓜'
);
$cache->call('slowFunction', $arr
);
echo
'<BR>'
;

$arr = array('苹果', '梨','西瓜'
);
slowFunction($arr
);

function
slowFunction($arr = null
)
{
    echo
"一个执行起来很慢的函数 :( <br>"
;
    echo
"当前时间是 " . date('M-d-Y H:i:s A', time()) . '<br>'
;
    foreach (
$arr as $fruit
)
    {
        echo
"我吃了一个 $fruit <br>"
;
    }
}
?>
 
       以下是示例的脚本执行结果:
一个执行起来很慢的函数 :(
当前时间是 Jul-28-2004 17:15:57 PM
我吃了一个 苹果
我吃了一个 梨
我吃了一个 西瓜

一个执行起来很慢的函数 :(
当前时间是 Jul-28-2004 17:17:55 PM
我吃了一个 苹果
我吃了一个 梨
我吃了一个 西瓜
  代码中,Cache/Function.php类用来执行函数缓冲功能。$cache变量是一个Cache_Function对象,使用基于文件的函数缓存,存入$cacheDir目录。要缓存一个函数调,Cache_Function对象$cache的call()方法要像这样使用:$cache->call(‘slowFunction’, $arr);
  这里,slowFunction()函数被调用,参数为一个数组$arr,这个函数被缓存在$cacheDir目录下的一个文件里。任何在此之后的对这个函数的调用,将会由$cache->call()返回该函数执行的结果。
  函数缓存和使用方法和内容缓存很相似,不再多说,具体请查看PEAR手册。
 
  以上我们都是利用优化代码的方法对程序进行提速,接着我们要关注一下PHP加速的另一个领域—缓存工具软件。这类软件都是从优化PHP运行环境来提速的,不需要改变任何代码。我们可以大概地将它们称为“执行码优化/缓存工具”,你可以理解为它们用来实现比较底层的优化/缓存。
 
  以下列出目前比较常用的此类工具,具体哪种效果最好,请用自己的服务器环境测试:
(一) APC Alternative PHP Cache
  APC运行于Linux和FreeBSD,你需要自己编译安装。按照其开发人员的说法,在他们的测试环境下可以提高脚本速度50%-400%。并且APC是个开源项目,已经加入了PHP的PECL库,很值得一试。
(二) Turck MMCache
http://turck-mmcache.sourceforge.net/
  Turck MMCache似乎是此类软件中目前最受欢迎的一种,它开放源代码,完全免费。它将PHP代码预编译并缓存起来,同时也对PHP运行环境进行一定优化。按照其官方文档的说法,MMCache可以明显地减轻服务器的负载,并提高脚本执行速度1-10倍。
  MMCache与另一个知名的加速软件Zend Optimizer兼容,但注意必需先安装MMCache(php.ini中设置)。除了加快PHP程序的速度,MMCache还可以将PHP代码加密。
  Turck MMCache同时支持Linux和Win32平台。
(三) PHPA   the PHP Accelerator
  PHPA又是另一个流行的PHP加速软件。在其官方网站上有分别使用PHPA与APC、Zend Cache的PHP脚本执行测试对比,其表现略优于APC,略逊于Zend Cache。
    PHPA支持Linux, FreeBSD, OpenBSD, BSDi和Solaris系统.
(四) Zend Performance Suite
    Zend Performance Suite是老牌的PHP加速/优化软件,依托于PHP领域最知名的Zend公司。目前已经推出4.0版本,它可以为PHP应用提供程序加速,内容缓存,文件压缩,下载服务等,功能十分强大,获得好几个PHP杂志的推荐奖—但是不得不提起,它也很昂贵,目前的价格是1875美元。
以上几种加速软件,希望读者按照服务器环境自行测试并选择其中最适用的,因为我没有办法提供一个普遍适用的测试标准来判断哪种方案是最有效的。综合起来看,我个人认为Turck MMCache是个值得推荐的选择,免费而且功能相当出色。
 
(四) 总结
 
   以上从多个角度较为全面细致地阐述了PHP加速的相关技术,包括测试技术,加速技术(压缩,缓存等),基本上都有附代码和范例。希望本文有助于读者全面了解PHP程序加速并在实际应用中选择合适的加速方案。
k8s上分离集群seatunnel部署(生产推荐) 阅读详情

相关推荐

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

小程序用php的优势,小程序的特点及优势?

更低的开发门槛:一次开发,多端兼容,免除了对各种手机机型的适配。社交分享属性:坐拥微信 10.83 亿用户,基于微信强大的社交关系链,可以在微信内被便捷的传播和获取。更短的服务路径:无需下载,通过线下扫码、社交分享、平台搜索和附近的小程序等能力,缩短了服务路径。订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息;服务号:主要偏于服务交互(类似银行,114,提供服务查...

weixin_39815925的博客 448

【零基础】手把手教你使用Docker部署Springboot项目(详细版)

还不会使用Docker部署Springboot项目的小伙伴,不妨进来看看呗,希望文中内容对你有所帮助!

fengprogrammer的博客 2万+

小程序用php还是java_微信小程序用php开发的可以吗

说到微信小程序可能大部分只是一知半解,您是否清楚小程序是用什么来开发的?首先我们先说说小程序是什么,和HTML5有什么区别。(推荐学习:PHP视频教程)根据官方表述和流传出来的关于“小程序”的技术接口来看,通俗一点的说,“小程序”其实是微信提高了自身对于HTML5的特性支持能力,开放了更多的系统调用。例如GPS、传感器等的调用等等。可以预见的是,微信里H5产品将有更好的用户体验,更快的加载速度,和...

weixin_35682426的博客 3447

QT编程系列1--QT学习前需知

本周学习了一些QT编程方面的知识,学写了几个程序,这里把记录下来。一方面对前面学习的知识做一个总结,便于以后复习、再学习和应用;另一方面也和大家做个交流,有不足的地方请各位看官多指点。   首先是做一些学习之前的交代:一,学习QT需要哪些基础;二,学习QT有哪些用途,QT较其他的开发工具有哪些特点;三,学习QT的思路。

霜月孤鸟&RTEMS&TinyOS 1115

C++程序无法正常启动(报0xc000007b错误)问题的详细排查

本文详细介绍了应用程序启动时遇到0xC000007B错误的排查过程。问题源于32位程序与64位运行时库的不匹配,以及缺少依赖的运行时库。通过分析系统日志、使用Windbg和检查程序位数,最终确定问题在于32位程序误引用了64位系统目录下的库文件。

dvlinker的技术专栏 1万+

微信小程序 优化 php,【微信小程序】性能优化

为什么要做性能优化?一切性能优化都是为了体验优化1. 使用小程序时,是否会经常遇到如下问题?打开是一直白屏打开是loading态,转好几圈我的页面点了怎么跳转这么慢?我的列表怎么越滑越卡?2. 我们优化的方向有哪些?启动加载性能渲染性能3. 启动加载性能1. 首次加载你是否见过小程序首次加载时是这样的图?这张图中的三种状态对应的都是什么呢?小程序启动时,微信会为小程序展示一个固定的启动界面,界面内...

weixin_39979332的博客 207

ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)

【实验描述】缓冲区(Buffer)是为了识别某一地理实体对周围地物的影响而在其周围建立的一定宽度多边形区域,缓冲区分析(Buffer Analysis)是用来确定不同地理要素的空间临近性或接近程度的一种分析方法。作为GIS的空间分析方法之一,缓冲区分析的应用范围特别广泛,常用于分析矢量实体对周围的影响。例如,工厂排放的废水废气所影响的空间范围等等。 一、缓冲区的基本概念 1、缓冲区 是地理空间目标的一种影响范围或服务范围。 2、缓冲区分析 指根据分析对象的点、线、面实体,自动建立它们周围一定距离的带

智慧空间实验室 1万+

微信小程序 优化 php,微信小程序渲染性能调优

网页的性能优化是前端开发老生常谈的热门话题,其中微信小程序因其页面双线程架构设计,所以性能优化的手段跟传统的 H5 应用不太一样。今天主要介绍一下微信小程序页面双线程架构的特性给页面渲染带来的一些影响,以及应对的一些渲染性能调优策略。为了叙述方便,下文会把微信小程序简称为小程序。小程序的双线程架构与传统的浏览器Web页面最大区别在于,小程序的是基于 双线程 模型的,在这种架构中,小程序的渲染层使用...

weixin_28718641的博客 308

STM32硬件SPI配置为全双工模式下不要单独使用HAL_SPI_Transmit API及HAL_SPI_TransmitReceive改造方法

STM32 HAL库中SPI全双工模式使用问题总结:当配置为全双工模式时,单独使用HAL_SPI_Transmit会导致后续接收数据异常,原因是该API未处理接收数据。改造HAL_SPI_TransmitReceive使其支持单纯的发送/接收模式:当pTxData为NULL时只关心接收数据,pRxData为NULL时只关心发送数据,但仍会保持全双工通信。建议在全双工模式下统一使用改造后的HAL_SPI_TransmitReceive函数。

kevin1499的博客 901

手把手教你学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了四开关Buck-Boost(FSBB)变换器的Simulink仿真方法,重点解决模式切换时的直通风险和输出电压波动问题。通过统一电压PI控制、迟滞比较模式仲裁(Buck/Boost/Pass-Through)和200ns死区设计,实现了Vin从26V到22V变化时Vout稳定在12V±0.15V。关键步骤包括:搭建功率级电路、Stateflow模式判断、PI控制器输出占空比映射(Buck模式D≈Vo/Vin,Boost模式D≈1-Vo/Vin),以及带死区的PWM信号分配。仿真验证了切换过程中

MHD0815的博客 116

php 效率总结

 <a onclick="function onclick(){function onclick(){tagshow(event, %D7%AA%D4%D8);}}" href="javascript:;" target="_self">转载:http://publishblog.blogchina.com/blog/tb.b?diaryID=30295211,

hn_2002的专栏 416

PCB仿真软件:Altium Designer_(15).AltiumDesigner的版本控制与项目管理

在进行PCB设计时,版本控制和项目管理是确保设计质量和团队协作效率的关键。Altium Designer 提供了强大的版本控制和项目管理功能,可以帮助设计团队更好地管理和维护项目。本节将详细介绍如何在Altium Designer中进行版本控制和项目管理,包括如何使用版本控制系统、如何管理项目文件、如何进行团队协作等。

kkchenjj的博客 1203

PHP程序加速探索[2]--简介与前言

(一)简介本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。(二)是否需要加速?这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。我想对于大部份人(包括我

Haohappy的专栏 2591

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PHP程序加速探索[1]--本文索引

PHP程序加速探索Haohappy 2004-07-27haohappy@msn.com- (一)简介- (二)是否需要加速?- (三)如何加速?       - 测试       ◆ 服务器负载测试 ApacheBench        ◆ 脚本执行速度测试 PEAR:: Benchmark     - 加速        ◆ 代码优化       ◆ 压缩输出 Gzip       ◆ 内

Haohappy的专栏 2670

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

php加速国外网站,让网站飞起来,PHP 程序加速探索

(一)简介  本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。(二)是否需要加速?这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和资源为用户服务,从而产生更多效益。我想对于大部份人(包括我自己)来说,很多W...

weixin_39762478的博客 207

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

PHP程序加速探索之加速工具软件

PHP程序加速探索之加速工具软件<!--google_ad_client = "pub-0674854344666573";//250x250, 创建于 08-1-11google_ad_slot = "7793161541";google_ad_width = 250;google_ad_height = 250;//--> 接着我们要关注一下PH

软件开发 708

PHP程序加速探索

PHP程序加速探索Haohappy 2004-07-27haohappy@msn.com- (一)简介- (二)是否需要加速?- (三)如何加速?       - 测试       ◆ 服务器负载测试 ApacheBench        ◆ 脚本执行速度测试 PEAR:: Benchmark     - 加速        ◆ 代码优化       ◆ 压缩输出 Gzip       ◆ 内

519

PHP-程序加速探索

(一)简介  本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。(二)是否需要加速?  这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。

MYOS的博客 539

PHP应用程序加速探索之简介

 (一)简介   本文尝试对PHP程序加速的各个方面进行探索,包括必要性以及从不同角度采取的具体措施。希望有助于读者了解PHP程序加速,并应用于实际。  (二)是否需要加速?  这个问题听起来有点愚蠢。在这个时代,很少有人会怀疑时间是最宝贵的财富,尤其是在商业市场上。程序执行越快,用户就节约越多的时间,这样你的程序就可以用更少的时间和服务器资源为用户服务,从而产生更多效益。  我想

我的php学习与实践生涯 582

如何加速你的php程序,PHP程序加速探索之代码优化

<?phprequire_once('Benchmark/Iterate.php');define('MAX_RUN',100);$data = array(1, 2, 3, 4, 5);doBenchmark('v1', $data);doBenchmark('v2', $data);doBenchmark('v3', $data);function doBenchmark($functionN...

weixin_35559202的博客 146

php压缩加速代码,PHP程序加速探索之压缩输出gzip_php

利用Apache中的mod_gzip模块,我们可以利用gzip的压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端的浏览器。如果是纯文本的内容,效果非常明显,大约可以压缩到原来的30%-40%,使用户的浏览速度大大加快。Gzip需要客户端浏览器支持,目前大部份浏览器都支持gzip,如IE,Netscape,Mozilla等,所以这种方法值得一试。我们可以利用php中的预定义变量$...

weixin_39574246的博客 150

php脚本怎么加速执行,PHP程序加速探索之脚本执行速度测试_php

前面有提到,只有找到影响速度的代码,我们才有可能进行优化。PEAR的benchmark包中的Benchmark_Timer类和Benchmark_Iterate类,可以用来很方便地测试脚本执行的速度。(关于PEAR的安装与配置请自行查看相关资料) 。首先用Benchmark_Iterate类来测试程序中某个函数或类的某个方法的执行时间。benchmark1.phphttp://www.gaodai...

weixin_36163672的博客 346
上一篇: 利用PEAR 和 PHP给你的网络应用添加条形码
下一篇: 数据库设计技巧
phpme
博客等级 码龄22年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值