加快php网站的速度 - php

加快php网站的最佳方法是什么(方法?),使用这种方法可以使速度更快?

参考方案

PHP并不是那种可以进行微优化或仅对代码进行处理的语言。真的没有意义。尽管PHP并不是特别快,但是PHP本身很少是给定网站中的瓶颈。

您需要找出瓶颈所在,然后才能对其进行修复。有很多常见的瓶颈和常见的解决方案。鉴于这么少的细节,很难一概而论,但是有许多性能提示适用于大多数网站。

首先要寻找的好地方实际上是客户端,而不是服务器。您的页面有多大(包括图像,CSS,JavaScript等)?一个页面视图需要多少个HTTP请求?使用类似Firebug(以及Firebug的YSlow附加组件)之类的东西来查看页面实际加载需要多长时间,以及页面的哪些位会导致问题。一些一般提示:

找出缩小CSS和JavaScript的方法-删除不需要的所有内容,然后通过诸如YUI Compressor之类的工具运行其余的内容。
如果您有多个CSS和JavaScript文件,请尝试将它们合并为一个文件。
尽可能优化所有图像,并查看是否可以使用CSS Sprite或类似图像将其中的任何图像合并到一个文件中。 PunyPNG适用于无损图像。像样的JPEG编码器(NOT Photoshop)适用于照片。
将CSS移至页面顶部,然后将JavaScript移至底部,以便浏览器可以在JavaScript完成下载之前呈现页面。
确保已压缩所有CSS,JavaScript和HTML。
确保您使用的是适当的缓存-如果文件没有更改,则没有必要重新下载它。

一旦让客户端摆脱了困境,您可能必须将注意力转移到服务器端。

安装操作码缓存,例如APC,XCache或Zend Optimizer。这很容易做到,并且总是会有所改进。完成此操作后,对页面进行配置文件,以找出实际花费的时间。

您很有可能会花费大部分时间等待数据库返回结果。因此,至少:

确定哪些查询花费的时间最长,然后首先对其进行处理。不过要用脑袋-在管理员页面上花五秒钟进行查询(没人看)的查询并不比在首页上花一秒钟的查询重要。
确保查询使用适当的索引。不需要任何通用查询就可以进行全表扫描。某些种类的排序或分组可能无法使用索引-尝试避免使用索引或修改查询以使其可以使用索引。
确保您的查询未使用临时表。
使用EXPLAIN关键字-这非常有用。
调整数据库服务器本身。 MySQL通常没有针对性能进行优化。

完成此操作后,通常最好开始研究如何使用缓存。加快PHP代码速度的最佳方法是减少其工作量。

确保数据库的查询缓存正常运行。
使用Memcached之类的东西来存储常用结果,而不是从数据库中获取它们。
如果您有足够的内存,请尝试将所有内容保留在Memcached中,仅在缓存中不存在某些内容时才诉诸数据库。
如果您拥有动态的页面块,但对所有用户而言都是相同的,请尝试缓存这些块。例如,如果有两个用户正在查看一篇文章,则即使页面的其余部分不同,每个用户的文章本身也将完全相同。生成文章的HTML,然后将其放入缓存中。
如果您有很多未经身份验证的用户,则很有可能他们都会看到完全相同的页面。看上面的文章的两个未经身份验证的用户不仅会看到相同的文章,还将看到一个完全相同的页面,直接到登录链接。设置您的PHP脚本,以便可以使用HTTP缓存标头(检查上次修改的日期,如果未更改,则返回304未修改)。完成此操作后,将Squid反向代理粘贴在Web服务器的前面,并让Squid从其缓存中提供页面。

在那之后,一般的方法是开始使用更多的服务器,问题就变成了扩展问题之一,而不是原始速度。总体计划是确保您的网站具有无共享架构-所有持久数据都存储在数据库中。然后,您安装多个Web服务器,将数据库服务器移至单独的计算机,然后在缓存反向代理后面运行整个过程。要增加容量,请增加更多计算机。

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…