Deprecated
: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in
/www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php
on line
1057
首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
4
篇与
的结果
2023-12-31
PHP使用CURL同时抓取多个URL地址
PHP使用CURL同时抓取多个URL地址抓取多个URL地址是Web开发中常见的需求,使用PHP的curl库可以简化这个过程。本文将详细介绍如何使用PHP的curl库同时请求多个URL地址,并提供具体的代码案例和注释。curl库介绍curl是一个常用的开源网络传输工具,可以通过各种协议(如HTTP、FTP、TELNET)在不同的平台上进行数据传输。PHP中的curl库允许我们利用curl功能在PHP中进行网络通信。它提供了一系列的函数,可以发送HTTP请求并获取响应。准备工作在开始使用curl之前,需要确保你的PHP环境已经安装并启用了curl扩展。可以通过在php.ini文件中取消以下行的注释来启用curl扩展:;extension=curl如果你的PHP环境已经启用了curl扩展,那么我们就可以开始编写curl请求多个URL的代码。使用curl同时请求多个URL首先,我们需要创建一个包含所有待请求URL的数组。每个URL都是一个数组元素,我们可以在后面的代码中遍历这个数组来发送请求。$urls = [ 'http://example.com/api/1', 'http://example.com/api/2', 'http://example.com/api/3', ];接下来,我们循环遍历URL数组,使用curl库来发送请求并获取响应。// 创建一个curl多个句柄 $mh = curl_multi_init(); // 创建一个句柄数组,用于存储每个请求的句柄 $handles = []; foreach ($urls as $url) { // 创建一个新的curl句柄 $handle = curl_init(); // 设置curl选项 curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); // 将句柄添加到多个句柄中 curl_multi_add_handle($mh, $handle); // 将句柄添加到句柄数组中 $handles[] = $handle; } // 执行所有请求 $running = null; do { curl_multi_exec($mh, $running); } while ($running > 0); // 获取所有请求的响应数据 $responses = []; foreach ($handles as $handle) { $response = curl_multi_getcontent($handle); $responses[] = $response; // 移除句柄 curl_multi_remove_handle($mh, $handle); // 关闭句柄 curl_close($handle); } // 关闭curl多个句柄 curl_multi_close($mh); // 打印所有响应数据 foreach ($responses as $response) { echo $response . "\n"; }代码分析:首先,我们使用curl_multi_init()方法创建一个curl多个句柄。然后,我们使用curl_init()方法创建一个新的curl句柄,并设置其选项。这些选项包括URL地址和一个标志位CURLOPT_RETURNTRANSFER,用于指定curl请求时返回原始的响应数据。接下来,我们使用curl_multi_add_handle()方法将每个curl句柄添加到多个句柄中。在添加完所有句柄后,我们使用curl_multi_exec()方法执行所有请求,直到所有请求都完成。然后,我们使用curl_multi_getcontent()方法获取每个请求的响应数据,并将其存储在一个数组中。最后,我们使用curl_multi_remove_handle()方法和curl_close()方法分别从多个句柄中移除和关闭每个句柄,然后使用curl_multi_close()方法关闭整个多个句柄的curl会话。最后一步,我们遍历响应数组,并使用echo语句打印每个响应。通过上述代码,我们可以同时发送多个curl请求,并获得每个请求的响应数据。可以根据具体需求对代码进行修改,比如设置超时时间、设置其他curl选项等。总结PHP的curl库是一个非常强大的工具,可以用来进行网络通信。本文中,我们介绍了如何使用curl库来同时请求多个URL地址。通过创建多个curl句柄,并使用curl_multi_close()方法执行所有请求,我们可以方便地进行并发请求。这对于需要同时抓取多个URL的Web开发任务非常有帮助。拓展具体应用案例: php接口优化 使用curl_multi_init批量请求
2023年12月31日
19 阅读
0 评论
0 点赞
2023-12-29
php 如何使用 PhpFastCache 提升网站性能
php 如何使用 PhpFastCache 提升网站性能PhpFastCache 是一款用于缓存的 PHP 库,可以有效地提升网站性能。下面是使用 PHPFastCache 进行网站性能优化的步骤:1. 安装和引入 PhpFastCache:在终端或命令行中输入 composer require phpfastcache/phpfastcache来安装 PhpFastCache,并通过 require_once函数将其引入到项目中。2. 选择合适的缓存驱动:PhpFastCache 提供了多种缓存驱动,如文件、Memcached、Redis 等。根据实际情况选择合适的缓存驱动。例如,使用文件缓存驱动可以简单快速地在本地创建缓存,但不适合大规模访问;而使用 Memcached 或 Redis 可以提供更高的并发性和可扩展性,但需要在服务器上进行配置。3. 缓存数据:使用PhpFastCache类的 set() 方法来设置缓存数据,“键”表示缓存的标识符,”值”表示需要缓存的数据。$cache = phpFastCache(); $data = getDataFromDatabase(); $num_seconds = 7200; $cache->set('data_key', $data, $num_seconds);4. 获取缓存数据:使用 PhpFastCache 的 get() 方法获取缓存数据。若缓存已过期或不存在,则返回 false。$cachedData = phpFastCache()->get('data_key'); if ($cachedData === false) { // 没有缓存数据,需要重新查询数据库 $cachedData = getDataFromDatabase(); phpFastCache()->set('data_key', $cachedData, 7200); }5. 清除缓存:使用 PhpFastCache的 delete() 方法来删除缓存数据。phpFastCache()->delete('data_key');6. 设置缓存有效时间和自动过期:可以通过 set()方法的第三个参数来指定缓存的有效时间(以秒为单位),缓存超时后将自动失效。如果不希望手动清除过期的缓存,在实例化 PhpFastCache类时,可以设置 $config['auto_clean'] 参数为 true,缓存将会自动过期并被清除。// 缓存10分钟 phpFastCache()->set('data_key', $data, 600); // 自动过期 $config = [ "storage" => "files", "path" => sys_get_temp_dir(), "fallback" => "sqlite", "securityKey" => "secret-key", "cacheTime" => 1800, "auto_clean" => true ]; $cacheInstance = new \phpFastCache\CacheManager($config);7. 使用命名空间进行缓存管理:使用命名空间可以将多个缓存数据区分开来,使得缓存管理更加清晰。可以通过 PhpFastCache 的 getNamespace()方法创建、获取和注销缓存命名空间。以上就是使用 PhpFastCache 进行网站性能优化的步骤,通过缓存技术可以最大程度地减少数据库查询次数,达到提高网站性能的目的。
2023年12月29日
12 阅读
0 评论
0 点赞
2023-08-31
为什么过早的优化是万恶之源?
为什么过早的优化是万恶之源?缘起Donald Knuth(高德纳) 是一位计算机科学界的著名学者和计算机程序设计的先驱之一。他被誉为 计算机科学的“圣经”《计算机程序设计艺术》的作者 ,提出了著名的“大O符号”来描述算法的时间复杂度和空间复杂度,开发了TeX系统用于排版科技文献,获得过图灵奖、冯·诺伊曼奖、美国国家科学奖章等多项荣誉。今天要说的就是他所提出的一条 软件设计重要原则 Premature optimization is the root of all evil 过早优化是万恶之源。 为什么说“过早优化是万恶之源”?我认为过早优化代码会让人陷入到错误的目标中去,从而忽视掉了最重要的目标。举个很简单的例子, 你需要快速构建一个产品来抢占用户,你当下最重要的目标是让这个产品快速上线 ,而不是把这个产品打造的好用(在中国互联网下,这样的事数不胜数), 如果你只关注到后者体验、性能问题而忽视了速度,在当下高度竞争的市场之下,你根本毫无机会。 当然上面这个例子是从感性的层面说的,对很多程序猿来说也可能涉及不到产品层面的内容。我们从软件设计的层面,理性的来说,过早优化可能会导致以下的一些问题:1. 增加代码的复杂性 :过度优化可能会导致代码的复杂性增加,从而降低代码的可读性和可维护性。如果代码过于复杂,可能会导致开发人员难以理解和维护代码,从而增加开发成本和时间。 2. 耗费开发时间和资源 :过度优化可能会导致开发人员花费大量时间和资源在代码的性能优化上,而忽略了其他重要的开发任务。这可能会导致项目进度延误和开发成本增加。 3. 降低代码的可移植性 :过度优化可能会导致代码的可移植性降低。如果代码过于依赖于特定的硬件或操作系统,可能会导致代码无法在其他环境中运行。 4. 降低代码的可扩展性 :过度优化可能会降低代码的可扩展性。如果代码过于依赖于特定的算法或数据结构,可能会导致代码无法适应未来的需求变化。过早优化的典型案例在软件工程史上由于过度关注软件性能导致项目最终失败的案例比比皆是,比如我下面要说的一些项目,在软件工程史上都是非常知名的项目(当然可能有些新生代程序员已经不知道了)。1. IBM OS/360操作系统 :在20世纪60年代,IBM公司开发了OS/360操作系统,这是当时最大的软件工程项目之一。在开发过程中,IBM公司过于关注代码的性能问题,导致代码的复杂性增加,开发时间延误,最终导致项目的失败。我知晓这个项目还是在我最近在阅读的一本软件工程经典书籍《人月神话》中,也推荐大家阅读下,这个项目虽然最终失败了,但也给整个软件工程领域留下了宝贵的经验。 2. Netscape Navigator浏览器 :在20世纪90年代,Netscape公司开发了Navigator浏览器,这是当时最流行的浏览器之一。在开发过程中,Netscape公司过于关注代码的性能问题,导致代码的复杂性增加,开发时间延误,最终导致浏览器市场份额严重下降。 3. Windows Vista操作系统 :在21世纪初,微软公司开发了Windows Vista操作系统,这是当时最大的软件工程项目之一。在开发过程中,微软公司过于关注代码的性能问题,导致代码的复杂性增加,开发时间延误,最终导致操作系统的用户体验不佳,市场反响不佳。话说这个操作系统我还用过呢,用户界面还是很漂亮的,很多UI设计也被沿用到了Window7中。如何识别过早优化在软件开发过程中,如何判断是否过早优化呢?这里有一些概括性的判断标准,可以简单参考下:1. 是否存在性能问题: 如果代码还没有性能问题,那么过早优化就是不必要的。因此,在进行优化之前,应该先测试代码的性能,确定是否存在性能问题。 2. 是否优化了未来可能发生的问题 :如果优化的是未来可能发生的问题,而不是当前存在的问题,那么就可能是过早优化。在进行优化之前,应该优先考虑当前存在的问题,而不是未来可能发生的问题。 3. 是否牺牲了代码的可读性和可维护性 :如果优化代码会导致代码的复杂性增加,降低代码的可读性和可维护性,那么就可能是过早优化。在进行优化之前,应该优先考虑代码的可读性、可维护性和可扩展性。 4. 是否浪费了大量的开发时间和资源 :如果优化代码会浪费大量的开发时间和资源,而不是提高代码的性能和效率,那么就可能是过早优化。在进行优化之前,应该评估优化的成本和收益,确定是否值得进行优化。判断是否过早优化需要根据具体情况进行评估。 在进行优化之前,应该先测试代码的性能,确定是否存在性能问题。同时,也应该优先考虑代码的可读性、可维护性和可扩展性,避免过度优化。总结作为一名在IT领域摸爬滚打多年的工程师,我深有体会地认识到过早优化是软件开发中的一大陷阱。在软件开发的初期,我们可能会过于关注代码的性能问题,而忽略了代码的可读性、可维护性和可扩展性。这种做法可能会导致代码的复杂性增加,降低代码的可读性和可维护性,甚至可能会浪费大量的开发时间和资源。在软件开发过程中,我们应该避免过早优化,而是优先考虑代码的可读性、可维护性和可扩展性。当需要进行性能优化时,应该在代码的基础上进行优化,通过分析性能瓶颈、优化算法和数据结构等方法来提高代码的性能和效率。同时,我们也应该意识到, 性能优化并不是软件开发的唯一目标,我们还应该注重代码的可读性、可维护性和可扩展性,以便保证代码的质量和可靠性。拓展代码优化的好处多多,但是这并不意味着所有的代码都需要进行优化,有时过度的优化反而适得其反——费时、费力、不讨好。“现代计算机科学的鼻祖”Donald Knuth曾说过“过早的优化是万恶之源”,因为:让正确的程序更快,要比让快速的程序正确容易得多。在项目开发中,总是有程序员浪费宝贵的时间去改进那些不需要改进的代码,而没有通过所做的改进增加价值。在对项目进行优化时,究竟哪些地方应该优化,应该如何优化,哪些不应该优化呢?你需要先来了解一下本文所说的这7件事。1. 究竟要优化什么?在优化工作开始的时候,你还尚未明确优化内容和目的,那么你很容易陷入误区。在一开始,你就应该清楚地了解你要达到的效果,以及其他优化相关的各种问题。这些目标需要明确指出(至少精通技术的项目经理可以理解和表达它),接下来,在整个优化过程中,你需要坚持这些目标。在实际的项目开发中,经常会存在各种各样的变数。可能一开始时要优化这一方面,随后你可能会发现需要优化另一方面。这种情况下,你需要清晰地了解这些变化,并确保团队中的每个人都明白目标已经发生了变化。2. 选择一个正确的优化指标选择正确的指标,是优化的一个重要组成部分,你需要按照这些指标来测量优化工作的进展情况。如果指标选择不恰当,或者完全错误,你所做的努力有可能白费了。即使指标正确,也必须有一些辨别。在某些情况下,将最多的努力投入到运行消耗时间最多的那部分代码中,这是实用的策略。但也要记住,Unix/Linux内核的大部分时间花费在了空循环上。需要注意的是,如果你轻易选择了一个很容易达到的指标,这作用不大,因为没有真正解决问题。你有必要选择一个更复杂的、更接近你的目标的指标。3. 优化在刀刃上这是有效优化的关键。找到项目中与你的目标(性能、资源或其他)相背的地方,并将你的努力和时间用在那里。举一个典型的例子,一个Web项目速度比较慢,开发者在优化时将大部分精力放在了数据库优化上,最终发现真正的问题是网络连接慢。另外,不要分心于容易实现的问题。这些问题尽管很容易解决,但可能不是必要的,或与你的目标不相符。容易优化并不意味着值得你花费工夫。4. 优化层次越高越好在一般情况下,优化的层次越高,就会越有效。根据这个标准,最好的优化是找到一个更有效的算法。举个例子,在一个软件开发项目中,有一个重要的应用程序性能较差,于是开发团队开始着手优化,但性能并没有提升太多,之后,项目人员交替,新的开发人员在检查代码时发现,性能问题的核心是由于在表中使用了冒泡排序算法,导致成千上万项的增加。尽管如此,高层次的优化也不是“银弹”。一些基本技术,如将所有东西移到循环语句外,也可以产生一些优化的效果。通常情况下,大量低层次的优化可以产生等同于一个高层次优化的效果。还需要注意的是,高层次优化,会减少一些代码块,那么你之前对这些代码块所做的优化就没有任何意义了,因此,刚开始就应该考虑高层次的优化。5. 不要过早优化在项目早期就进行优化,会导致你的代码难以阅读,或者会影响运行。另一方面,在项目后期,你可能会发现之前所做的优化没有起到任何作用,白白浪费了时间和精力。正确的方式是,你应该将项目开发和优化当作两个独立的步骤来做。6. 依赖性能分析,而不是直觉你往往会认为你已经知道哪里需要优化,这是不可取的,尤其是在复杂的软件系统中,性能分析数据应该是第一位的,最后才是直觉。优化的一个有效的策略是,你要根据所做工作对优化效果的影响来进行排序。在开始工作之前找到影响最大的“路障”,然后再处理小的“路障”。7. 优化不是万金油优化最重要的规则之一是,你无法优化一切,甚至无法同时优化两个问题。比如,优化了速度,可能会增加资源利用;优化了存储的利用率,可能会使其他地方放慢。你需要权衡一下,哪个更符合你的优化目标。
2023年08月31日
28 阅读
0 评论
0 点赞
2023-08-02
关于PHP性能的优化技巧
网上有无数关于PHP性能的优化技巧,有必要列出一张可供参考使用的清单。笔者收集的这些技巧来源较广,完整性不能保证。 由于数量较多,这些优化技巧没有经过测试。请各位看官在使用之前自行测试,毕竟这些技巧是否能派上用场,还是需要由PHP所在的独特环境所决定的。1、找到瓶颈(Finding the Bottleneck)面对一个性能问题 是, 第一步永远是找到问题产生的原因 ,而不是去看技巧列表。搞明白产生瓶颈的原因, 找到目标并且实施修复,然后再重新测试。 查找瓶颈只是万里长征的第一步,这里有些常用技巧,希望对最重要的第一步找到瓶颈能有所帮助。使用监控方法(比如监控宝) ,进行benchmark(基准问题测试)和监控,网络,特别是网络状况瞬息万变,做得好的话5分钟就可以找到瓶颈。剖析代码。 必须了解那部分代码耗时最多,在这些地方多多关注。想找到瓶颈,请 检查每个资源请求 (比如,网络、CPU、内存、共享内存、文件系统、进程管理、网络连接等等……)先 对迭代结构和复杂的代码 进行 benchmark在在真实负载下 用真实数据进行真实测试 ,当然,如果可以最好用产品服务器。2、缓存 (Caching)有些人认为 缓存是解决性能问题最有效的办法之一 ,试试这些:使用OPCODE(操作码)缓存,这样脚本就不会在每次访问时重新编译一次。比如:启用Windows平台上的windows缓存扩展。可以缓存opcode,文件,相对路径,session数据和用户数据。考虑在多服务器环境下使用分布式缓存在调用imap_header()之前先调用imap_headers()3、编译 vs. 解释(Compiling vs. Interpreting)将PHP源码编译成机器码。动态解释执行同样的编译,但它是按行执行的。编译为opcode是折中选择,它可以将PHP源码翻译为opcode,之后opcode再转为机器码。以下为关于编译与解释的相关技巧:上线之前将PHP代码编译为机器码。opcode缓存尽管并不是最好的选择,但依旧比解释型来得强。或者,考虑将PHP代码编译成一个C扩展。PHP的opcode编译器(bcompiler)还不能在产品环境中使用,但是开发者应该关注http://php.net/manual/en/book.bcompiler.php4、代码减肥 (Content Reduction)越少越快。 这些技巧可以帮助减少代码:每页提供更少的功能清理网页内容如果解释型执行,请清理注释和其他空白减少数据库查询5、多线程与多进程(Multithreading & Multiprocessing)由 快到慢 依次为:多线程(单一进程中)多进程(比如,pcntl_fork,计划任务)单进程(一行又一行)PHP不支持多线程,但是可以用C写多线程的PHP扩展。有一些办法可以使用多进程或模拟多进程,但支持的并不是很好,没准儿比单进程还慢。6、字符串(Strings)字符串处理,是大多数编程语言中最常用的操作之一。这里有些技巧可以帮我们让字符串处理速度更快一些:PHP的连接运算(点运算),是最快的链接方式避免在print中链接字符串,用逗号分割后用ECHO尽可能使用str_前缀的字符串函数替代正则表达式pos()比preg_mach()和ereg()都快有人说单引号包裹字符串比双引号更快,有人说没有区别。当然,如果想在字符串中引用变量,单引号没戏。如果想判断字符串长度是否小于某值(比如5),请使用isset($s[4])<5。如需将多个小字符串连接成一个大字符串,试着先开启ob_start输出缓存,再用echo输出到缓冲区,完成后使用ob_get_contents读取字符串7、正则表达式(Regular Expressions)正则表达式为们带来了灵活多样的比较与查找字符串的方法,但他的 性能开销 却着实不低尽可能使用STR_前缀的字符串处理函数代替正则表达式使用[aeiou]的不是(a|e|i|o|u)正则表达式越简单速度越快尽可能不要设置PCRE_DOTALL修饰符用^.代替.简化正则表达式。(比如使用a代替(a+)8、迭代结构 (Iteration Constructs (for, while))迭代(重复,循环)是最基本的结构化编程方法 ,很难想像有不使用它的程序。这里有些技巧,帮助我们 改进迭代结构的性能:尽可能将代码移出到循环外(函数调用、SQL查询等等……)使用i=maxval;while(i–)代替for(i=0;i<maxval;i++),这样可以减少一个操作,如果maxval是一个函数调用就更明显了。使用foreach迭代集合与数组9、选择结构 (Selection Constructs (if, switch))与迭代结构相同, 选择结构也是最基本的结构化编程方法 。以下技巧或许能改善性能:switches和else-if中,应该将最近常出现true的列在前面,较少出现true的请靠后有人说if-else比swtich/case快,当然,有人反对。用elseif替代else if.10、函数与参数 (Functions & Parameters)将函数的代码分解成小函数代码 可以 消除冗余 ,让代码具有 可读性 ,但代价是什么?这里有些技巧,以帮助更好的使用函数:引用传递出对象和数组,而不是传值如果只在一个地方使用,使用内联。如果在多个地方调用,考虑内联,但请注意可维护性了解你所用函数的复杂度。比如similar_text()为O(N^3),这意味着字符串长度增加一倍,处理时间将增加8倍不要通过“返回引用”来提升性能,引擎会自动优化它。以常规方式调用函数,而不是使用call_user_func_array()或eval()11、面向对象结构 (Object-Oriented Constructs)PHP的面向对象特性,可能会影响到性能 。以下提示可以帮助我们尽量减少这种影响:不是一切都需要面向对象, 性能的损失可能会超过其优点本身创建对象比较慢如果可以,尽可能时候用数组而不是对象如果一个方法可以静态化,请静态声明函数调用比派生类方法调用要快,派生类方法调用比基类调用要快考虑将基类中最常用的代码复制到派生类中,但要注意维护性隐患避免使用原生的getters与setters。如果不需要他们,请删除并且属性公开创建复杂的PHP类时,考虑使用单件模式12、Session处理 (Session Handling)创建sessions有很多好处,但 有时会产生没必要的性能开支 。以下技巧可以帮助我们最大限度减少性能开支:不要使用auto_start不要启用use_trans_sid将session_cache_limited设置为private_no_expire为虚拟主机(vhost)中的每个用户分配自己的目录使用基于内存的session处理,而不是基于文件的session处理13、类型转换 (Type Casting)从一种类型转换为另一种类型需要成本14、压缩(Compression)在传输前,压缩文本和数据:使用ob_start()在代码起始处使用ob_gzhandler()可以下载提速,但是注意CPU开支Apache的mod_gzip模块可以即使压缩15、错误处理(Error Handling)错误处理影响性能 。我们能做的是:记录错误日志,别再使用“@”抑制错误报告,抑制对性能一样有影响不要只检查错误日志,警告日志一样需要处理16、声明、定义与范围(Declarations, Definitions, & Scope)创建一个变量、数组或者对象,对性能都有影响:有人说,声明和使用全局变量/对象,比局部变量/对象要快,有人反对。请测试再决定。在使用变量前声明所有变量,不要声明不使用的变量在循环中尽可能使用$a[],避免使用$a=array(…)17、内存泄漏(Memory Leaks)如果内存分配后不释放 ,这绝对是个问题:坚持释放资源,不要指望自带/自动的垃圾回收使用完后尽量注销(unset)变量,尤其是资源类和大数组类型的使用完毕就关闭数据库连接每次使用ob_start(),记得ob_end_flush()或者ob_end_clean()18、不要重复发明轮子(Don’t Reinvent the Wheel)为什么要花费时间去解决别人已经解决的问题?了解PHP,了解它的功能和扩展。如果你不知道,可能会无法利用一些现成的功能使用自带的数组和字符串函数,它们绝对是性能最好的。前人发明的轮子,并不意味着在你的环境下吸能是最好的,多多测试19、代码优化(Code Optimization)使用一个opcode optimizer如果将被解释运行,请精简源码20、使用RAM(Using RAM Instead of DASD)RAM比磁盘快很多很多 ,使用RAM可以提升一些性能:移动文件到Ramdisk使用基于内存的session处理,而不是基于文件的session处理21、使用服务(Using Services (e.g., SQL))SQL经常被用来访问关系型数据库,但我们的PHP代码可以访问许多不同的服务。下面是一些访问服务是需要牢记的:不要一遍又一遍地问服务器向东的事情。使用memoization缓存第一次的结果,以后访问直奔缓存;在SQL中,使用mysql_fetch_assoc()代替mysql_fetch_array(),可以减少结果集中的整数索引。以字段名访问结果集,而不用索引数字。对于Oracle数据库,如果没有足够的可用内存,增加oci8.default_prefetch。将oci8.statement_cache_size设置为应用中的语句数请使用mysqli_fetch_array()替换mysqli_fetch_all(), 除非结果集将发送到其他层进行处理。22、安装与配置(Installation & Configuration)安装与配置PHP时,请考虑性能:添加更多内存删除竞争性的应用与服务只编译所需要用的扩展将PHP静态编译进APACHE使用-O3 CFLAGS开启所有编译器优化只安装所需使用的模块升级到最新版本的次要版本。主板本升级,等到第一次bug修复后再进行,当然,也别等太久为多CPU环境进行配置使用 -enable-inline-optimization设置session.save_handler=mm ,以 -with-mmto编译,使用共享内存使用RAM disk关闭resister_global和magic_quotes_*关闭expose_php关闭 always_populate_raw_post_data 除非你必须使用它非命令行模式下请关闭register_argc_argv只在.php文件中使用PHP优化max_execution_time, max_input_time, memory_limit与output_buffering的参数将Apache配置文件中allowoverride设置为none提升文件/目录的访问速度使用-march, -mcpu, -msse, -mmmx, and -mfpmath=sseto使CPU最优化使用MySQL原生驱动(mysqlnd)替换libmysql、mysqli扩展以及PDO MYSQL驱动关闭 register_globals、register_long_arrays以及register_argc_argv. 开启auto_globals_jit.23、其他(Other)还有些技巧比较难归类:使用include()、require(),避免使用include_once()和require_once()在include()/require()中使用绝对路径静态HTML被PHP生成的HTML要快使用ctype_alnum、ctype_alpha以及ctype_digit代替正则表达式使用简单的servlets或CGI代码在产品环境中使用时,尽可能写日志使用输出缓冲请使用isset($a)代替比较$a==null;请使用$a===null代替is_nul($a)需要脚本开始执行时间,请直接读取$_SERVER[’REQUEST_TIME’],而不是使用time()使用echo替代print使用前自增(++i)代替后自增(i++),大多数编译器现在都会优化,但是他们不优化时,请保持这样的写法。处理XML,使用正则表达式代替DOM或者SAXHASH算法:md4, md5, crc32, crc32b, sha1比其他的散列速度都要快使用spl_autoload_extensions时,文件扩展名请按最常用–>最不常用的顺序,尽量排除掉压根不用的。使用fsockopen或fopen时,使用IP地址代替域名;如果只有一个域名,使用gethostbyname()可以获取IP地址。使用cURL速度会更快。但凡可能,用静态内容代替动态内容。
2023年08月02日
15 阅读
0 评论
0 点赞