php - 优化 LAMP 站点以提高速度的最佳实践?

标签 php mysql optimization lamp

我想知道在 LAMP 堆栈上构建典型网站时,如何优化它以实现最佳加载时间。我正在描绘一个典型的数据库驱动网站。

这是一个高级外观,可能会引起问题,让我将其分解为堆栈的每一层。

L - 在系统级别,(设置和文件系统)您可以做些什么来提高速度?我能想到的一件事是图像大小,这里的压缩可以帮助优化任何东西吗?

A - 在网络服务器中必须有大量与网站速度相关的设置。不是我的强项。可能很大程度上取决于同时运行的网站数量。

M - MySQL 在数据库驱动的站点中,数据库性能是关键。是否有更好的规范化方法,即使用链接表? Web 开发人员通常只制作类似于 1NF 的简单单片表,这会影响性能。

P - 除了像缓存这样的性能提升设置,程序员可以做些什么来影响高水平的性能?我真的很想知道 MVC 设计方法是否比快速而肮脏的方法更能提高性能。其他一些简单的技巧,比如 session 比 cookie 更快会很有趣。

显然,您必须深入了解细节并找出导致您速度减慢的代码。此外,我意识到许多网站具有许多不同的性能特征,但让我们假设一个典型的网站读取次数多于写入数。

我只是想知道我们是否可以汇编一堆最佳实践并完全期望人们将其他问题联系起来,以便我们可以有效地制定一份 list 。

我的目标是看看除了性能方面的常见问题之外,我们是否还能看到一些你可能不会想到的奇怪事情以及最佳实践摘要。

所以我的问题是,如果您从头开始,您将如何确保您的 LAMP 网站速度很快?

最佳答案

以下是我一直在 LAMP 应用程序中设置的一些个人必做事项。

  • 为 apache 安装 mod_deflate,然后 不要使用 PHP 的 gzip 处理程序。 mod_deflate 将允许您 压缩静态内容,例如 javascript/css/static html,以及 作为通常的动态 PHP 输出,以及 你不必担心的一件事 关于在你的代码中。

  • 小心 .htaccess 文件! 启用 .htaccess 文件 应用程序中的目录意味着 Apache 必须扫描文件系统 不断地寻找 .htaccess 指令。放置要好得多 main里面的指令 配置或虚拟主机 配置,加载它们的位置 一次。任何时候你都可以摆脱 通过移动目录级访问文件 将其放入主配置文件中, 节省磁盘访问时间。

  • 准备应用程序的数据库 层使用连接管理器 某种形式(我使用单例 大多数应用程序)。不是很 难做,减少数量 数据库连接数 应用程序打开可以节省资源。

  • 如果您认为您的应用程序会 看到显着的负载,memcached 可以 创造奇迹。记住这一点 当您编写代码时...也许 有一天,而不是创建对象 在飞行中,你会得到它们 来自内存缓存。有点远见 将使实现变得轻松。

  • 应用启动并运行后,设置 MySQL的慢查询时间要小 编号并监控慢查询日志 努力地。这会告诉你在哪里 您的问题查询来自, 并允许您优化您的 查询和索引之前 成为一个问题。

  • 对于认真的性能调整者,您 将要从源代码编译 PHP。 从包安装会安装一个 很多你可能永远不会的图书馆 利用。由于 PHP 环境是 加载到每个实例中 Apache线程,甚至5MB内存 额外库的开销快速 变为 250MB 的丢失内存时 有 50 个 Apache 线程 存在。我保留了我的 list 我使用的标准 ./configure 行 构建 PHP here , 我找到了 适合我的大多数应用程序。这 缺点是如果你最终 需要图书馆,你必须 重新编译 PHP 得到它。分析 您的代码并在开发中对其进行测试 确保您拥有的环境 你需要的一切。

  • 缩小你的 Javascript。

  • 准备好移动静态内容, 例如图像和视频,以 非动态网络服务器。写你的 代码,以便图像的任何 URL 和 视频很容易配置为指向 将来到另一台服务器。一个 针对静态优化的 Web 服务器 内容可以轻松服务数十甚至 比一个快几百倍 动态内容服务器。

这就是我能想到的。搜索 PHP 最佳实践会发现很多关于如何编写更快/更好代码的技巧(例如:echoprint 更快)。

关于php - 优化 LAMP 站点以提高速度的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697802/

相关文章:

javascript - 验证名字和姓氏

php - 您如何看待这种在 mysql 中记录更改并具有某种审计跟踪的方法

math - 通过将它们转换为更大的整数数据类型来一次添加整个字节数组是否有效?

ios - 如何生成波形表以加快实时音频合成

php - MySQL 和 PHP : Joins & Counts

php - 获取文本 PHP5 不适用于 Debian

php - 先返回 False 或 True 有什么区别?

mysql - 向数据库查询添加附加信息

mysql - Eloquent laravel 有 raw join with where 子句

java - 大输入上的慢速字符串连接