調(diào)優(yōu)LAMP應(yīng)用程序的5種簡(jiǎn)單方法:有效緩存數(shù)據(jù)
調(diào)優(yōu)LAMP 應(yīng)用程序的5 種簡(jiǎn)單方法:
使用操作碼緩存、優(yōu)化 PHP 設(shè)置、管理require和include、優(yōu)化數(shù)據(jù)庫(kù)、有效緩存數(shù)據(jù)、
簡(jiǎn)介
Wikipedia、Facebook 和 Yahoo! 等主要 web 屬性使用 LAMP 架構(gòu)來(lái)為每天數(shù)百萬(wàn)的請(qǐng)求提供服務(wù),而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 應(yīng)用程序軟件使用其架構(gòu)來(lái)讓組織輕松部署基于 web 的應(yīng)用程序。
該架構(gòu)的優(yōu)勢(shì)在于其簡(jiǎn)單性。而 .NET 這樣的堆棧和 Java™ 技術(shù)可能使用大量硬件、昂貴的軟件棧和復(fù)雜的性能調(diào)優(yōu),LAMP 堆??梢赃\(yùn)行于商品硬件之上,使用開(kāi)源軟件棧。由于軟件棧是一個(gè)松散的組件集,而非一個(gè)整體堆棧,性能調(diào)優(yōu)是一大挑戰(zhàn),因?yàn)樾枰治龊驼{(diào)優(yōu)每個(gè)組件。
然而,這有幾個(gè)個(gè)簡(jiǎn)單性能任務(wù)會(huì)對(duì)任何規(guī)模的網(wǎng)站的性能產(chǎn)生巨大的影響。在本文中,我們將探討旨在優(yōu)化 LAMP 應(yīng)用程序性能的 5 個(gè)這樣的任務(wù)。這些項(xiàng)目應(yīng)當(dāng)很少需要對(duì)您的應(yīng)用程序進(jìn)行架構(gòu)更改,使其成為***化您的 web 應(yīng)用程序所需的響應(yīng)能力和硬件需求的安全、便捷的選擇。
有效緩存數(shù)據(jù)
正如我們?cè)谏弦还?jié)看到的,數(shù)據(jù)庫(kù)往往容易成為您 web 應(yīng)用程序性能的***痛點(diǎn)。但是如果您要查詢的數(shù)據(jù)不經(jīng)常改變?cè)趺崔k?在這種情況下,一個(gè)好的選擇就是在本地存儲(chǔ)這些結(jié)果,而非針對(duì)每個(gè)請(qǐng)求調(diào)用查詢。
我們之前探究的兩個(gè)操作碼緩存 APC 和 Wincache 具有實(shí)現(xiàn)上述操作的工具,其中您可以將 PHP 數(shù)據(jù)直接存儲(chǔ)到一個(gè)共享內(nèi)存段中,便于快速查詢。清單 3 提供了具體示例。
清單 3. 使用 APC 緩存數(shù)據(jù)庫(kù)結(jié)果的示例
- function getListOfUsers()
- {
- $list = apc_fetch('getListOfUsers');
- if ( empty($list) ) {
- $conn = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbuser', 'dbpass');
- $sql = 'SELECT id, name FROM users ORDER BY name';
- foreach ($conn->query($sql) as $row) {
- $list[] = $row;
- }
- apc_store('getListOfUsers',$list);
- }
- return $list;
- }
我們僅需一次執(zhí)行查詢。之后,我們將結(jié)果推送到 getListOfUsers 鍵下的 APC 緩存中。從這里開(kāi)始,直到緩存到期,您就能夠直接從緩存中獲取結(jié)果數(shù)組,跳過(guò) SQL 查詢。
APC 和 Wincache 并非一個(gè)用戶緩存的惟一選擇;memcache 和 Redis 是不需要您在與 Web 服務(wù)器相同的服務(wù)器上運(yùn)行用戶緩存的其他流行選擇。這就提高了性能和靈活性,特別是當(dāng)您的 web 應(yīng)用程序跨多個(gè) Web 服務(wù)器向外擴(kuò)展時(shí)。
結(jié)束語(yǔ)
在本文中,我們探究了調(diào)優(yōu)您的 LAMP 性能的 5 種簡(jiǎn)單方法。我們不僅通過(guò)利用一個(gè)操作碼緩存和優(yōu)化 PHP 配置探究了 PHP 級(jí)別的技術(shù),而且探究了如何優(yōu)化您的數(shù)據(jù)庫(kù)設(shè)計(jì)來(lái)實(shí)現(xiàn)合理的索引編制。我們還探討了如何利用一個(gè)用戶緩存(以 APC 為例)來(lái)展示如何在數(shù)據(jù)不經(jīng)常改變時(shí)避免重復(fù)的數(shù)據(jù)庫(kù)調(diào)用。至此、五種調(diào)優(yōu)方法結(jié)束。