Magento是一套專業開源的電子商務系統,Magento設計得非常靈活,具有模塊化架構體系和豐富的功能但有朋友會發現此模塊用到了會發現非常的緩慢了,那么下面我們來看關於magento性能優化的例子。
前面優化
mod_deflate模塊,將text、 css 和 javascript 先進行壓縮再發送到瀏覽器。這樣就會減少網絡下載量,縮短等待時間,示例如下:
# Insert filter on all content
SetOutputFilter DEFLATE
# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
# enable resulting html compression
php_flag zlib.output_compression on
啟用Expires Headers
注意:這一配置在Litespeed servers無效
瀏覽器使用 Expires Headers來確定頁面組件可以被緩存多長時間。靜態的部件,如圖像,可以設置為永不過期,但還是建議設置一個Expires Headers。要打開這個特性,可以取消注釋對應的行並添加"ExpiresActive On" 如下所示:
ExpiresActive On
ExpiresDefault "access plus 1 year"
禁用 ETags
ETags(Entity tags)是服務器和瀏覽器的一個功能,它用來判斷瀏覽器緩存里的元素是否和原來服務器上的一致。ETags比last-modified date更具有彈性,它用一個獨一無二的字符串來標識一個元素的版本。 要關閉它很簡單,做法如下:
FileETag none
日志太大,執行如下sql:
truncate dataflow_batch_export;
truncate dataflow_batch_import;
truncate log_customer;
truncate log_quote;
truncate log_summary;
truncate log_summary_type;
truncate log_url;
truncate log_url_info;
truncate log_visitor;
truncate log_visitor_info;
truncate log_visitor_online;
truncate report_viewed_product_index;
truncate report_compared_product_index;
truncate report_event;
set foreign_key_checks = 0;
truncate index_process_event;
truncate index_event;
set foreign_key_checks = 1;
mysql配置優化,充分發揮你的硬件資源,下面的數值要根據你的配置調整
key_buffer_size = 512M
max_allowed_packet = 64M
table_cache = 512
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
tmp_table_size = 128M
query_cache_size = 96M
query_cache_type = 1
thread_cache_size = 8
max_connections = 400
wait_timeout = 300
5、將magento的var目錄掛載到內存中,加快讀取速度,如
mount -t tmpfs -o size=100M,mode=0777 tmpfs var
6、安裝php加速器,如APC,XCACHE,eAccelerator,安裝方法參考相關的網站
然而歸於根本,最大的優化來自於對模板,對代碼,對block的優化。
在Magento的優化中, Mysql的優化是很重要的,在Magento的官方網給出了有關Mysql的優化, 官方網並沒有要我們把Mysql的存儲引擎改為innodb, 但我覺的得這是很有必要的,當改成innodb后,還得把Mysql的配置文件修改修改下, 有時根據官方的文檔來並不能成功, 這時就要看你的環境而定了, 下面給出我所配置的mysql文件給大家參考:
(繼續)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=utf8
#init_connect='SET NAMES utf8'
default-storage_engine = innodb
# To allow mysqld to connect to a MySQL Cluster management daemon, uncomment
# these lines and adjust the connectstring as needed.
#ndbcluster
#ndb-connectstring="nodeid=4;host=localhost:1186"
[client]
#default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
[Magento]
max_connections = 1000
max_connect_error = 10
table_cache = 1024
max_allowed_packet = 16M
max_heap_table_size = 64M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 8
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
tmp_tables_size = 64M
key_buffer_size = 32M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size=10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 16M
innodb_log_buffer_size = 8M
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_buffer_pool_size = 3G
innodb_data_file_path = ibdata1:3G;ibdata2:1G:autoextend
innodb_autoextend_increment=512
Apache優化
這里主要講的是,自己編譯的Apache, 而如果是系統自帶的話, Apache所需的模塊, 系統會自動加載。
(繼續)
#vi httpd.conf
ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run /httpd.pid
Timeout 120
KeepAlive off
MaxkeepAliveRequests 100
KeepAliveTimeout 15
StartServers 100
MinSpareServers 100
MaxSpareServers 150
ServerLimit 256
MaxClient 256
MaxRequestsPerChild 40000
Listen *:80
在這里還要一些必須的Apache模塊
1, mod_authz_host.so
2, mod_expires.so
3, mod_deflate.so
4, mod_mime.so
5, mod_dir.so
6, mod_rewrite.so 這個模塊很重要, 當設置Magento地址重寫時,要用到
7, mod_log_config.so
8, libphp5.so 你有可能用的是php4, 那就得改成libphp4.so
注意:
在安裝好Apache后, 我們還能讓Apache識別以php為后綴的文件
AddType application/x-httpd-php .php .phtml
好了, 到這就講完了, 這章其實對Magento的優化不大, 但有些模塊又不能少, 少了, Magento后台可能出問題
當我們安裝好Magento時, 為了加快Magento的速度,我們一般還要做一些對於Magento服務的優化, 來提高Magento被訪問的速度。 一般我們會從三個角度去考慮Magento的優化, 如: 安裝Magento的系統; Magento模板中的代碼; Magento所用到的數據庫。 在這我們主要講的是Magento系統的優化
php配置優化
Magento是在PHP環境下開發的, 所以優化PHP對Magento有着不小的影響,下面是Magento標准的PHP配置。
(繼續)
一, 對於Magento所需的擴展, 只開啟所需的就可以了
# Required extensions
extension=bcmath.so
extension=curl.so
extension=dom.so
extension=gd.so
extension=mcrypt.so
extension=memcache.so
extension=mhash.so
extension=pdo.so
extension=pdo_mysql.so
extension=mysql.so
extension=xmlwriter.so
下面的一些擴展並不需要開啟, 我們可以把它們關閉
# Not needed extensions from default setup
;;extension=dbase.so
;;extension=json.so
;;extension=mysqli.so
;;extension=pdo_sqlite.so
;;extension=sqlite.so
;;extension=wddx.so
;;extension=smlreader.so
;;extension=xsl.so
;;extesnion=zip.so
事無絕對, 當你的系統環境需要某個擴展時, 可以按照需要開啟
下面所要講的, 也是PHP中優化的重點, 將會講到二種方法,二選一就行了, 切忌, 不能同時應用二種方案
一,安裝APC擴展, APC, 用來優化PHP本身, 提高PHP的運行速度
# APC configuration apecifics if it is used
extension=apc.so
apc.shm_size=256
apc.num_files_hint=10000
apc.user_entries_hint=10000
apc.max_file_size=5M
二,安裝eaccelerator加速器,功能跟APC類似, 在這就不多說了。
安裝好eaccelerator后,將會產生eaccelerator模塊
zend_extension="/usr/lib64/php/modules/eaccelerator.so"
eaccelerator.shm_size = "256"
簡單的linux優化提示:
系統采用最小化安裝,僅安裝必需的軟件包,不裝GUI/X-Window等
停止或禁用無需使用的服務,比如cups
調優內核參數: (例如)
# echo '8192' > /proc/sys/fs/file-max
# echo '32768' > /proc/sys/fs/inode-max
# echo 268435456 > /proc/sys/kernel/shmall (SHMALL可用共享內存的總數量 單位:字節or頁面[如果是字節,就和 SHMMAX 一樣;如果是頁面,ceil(SHMMAX/PAGE_SIZE)] )
# echo 268435456 > /proc/sys/kernel/shmmax
#ulimit -n 4096
編譯 apache HTTP服務器
編譯必須模塊時使用靜態編譯的方式來取代DSO(動態共享對象)方式,並且禁用無需使用的模塊:
./configure --prefix=/usr/local/apache2 --disable-status --disable-userdir --disable-threads
--disable-ipv6 --enable-modules='ssl so rewrite deflate headers expires'
啟用 mod_deflate 模塊
說明: DEFLATE 輸出過濾器,允許服務器在將輸出內容發送到客戶端以前進行壓縮,以節約帶寬
打開 magento 根目錄下的 .htaccess文件,定位到<IfModule mod_deflate.c></IfModule>塊之間,
將 其中的注釋行開啟,例如:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</IfModule>
啟用 Header Expires 模塊
打開 magento 根目錄下的 .htaccess文件,定位到<IfModule mod_expires.c></IfModule>塊之間,例如
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType text/html "access plus 1 month"
ExpiresByType text/plain "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>
禁用 Etag,啟用 KeepAlive
打開 magento 根目錄下的 .htaccess文件,移除FileETage None行的注釋,如果在httpd.conf沒有啟用KeepAlive,可在此處新增幾行,例如
FileETage None
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 5
magento后台設置
開啟產品及產品分類的 Flat 功能。
開啟這個功能后系統會為產品和產品分類的各個店鋪視圖建立獨立的數據表以儲存相關屬性的數據,在編輯產品和分類信息的時候也會同時更新這些數據表。 前台要獲得產品數據的時候,程序從這些獨立的表中讀取數據,而無需從多個 EAV 關聯表中讀取。這樣做可以通過減少數據表的聯立查詢,有效地提高前台對產品數據的查詢速度。
開啟方法是到后台 System / Configuration > CATALOG / Catalog > Frontend 中,分別將 Use Flat Catalog Category 和 Use Flat Catalog Product 設成 Yes 並保存。
設置 CRON-JOB 定期清理 Log 信息。
Magento 的 Log 模塊會將一些網站訪問記錄、用戶登錄信息、購物車修改情況等記錄到數據庫中。這些數據多了就會讓數據庫變得很臃腫,非常影響數據讀取速度。因此我們應該開啟 log 信息自動清理功能,並設置 CRON-JOB 定期進行清理。
后台開關路徑為 System / Configuration > ADVANCED / System > Log Cleaning / Enable Log Cleaning。
關閉系統 Log 功能。
Magento 系統的 Log 功能會把一些運行信息或出錯信息記錄到硬盤中。這些信息一般只在網站開發階段才會用到,並且可能造成頻繁的 I/O 操作,影響程序運行效率。因此網站上線后應該把此功能關閉。
后台開關路徑為 System / Configuration > ADVANCED / Developer > Log Settings / Enabled。
開啟 Javascript 及 CSS 文件整合功能。
開啟 Javascript 及 CSS 文件整合功能可以把通過 layout 加載的多個 Javascript 和 CSS 文件分別整合。這樣做的好處是可以減少資源請求數量,加速下載速度,降低服務器負擔。
為了更好地利用這項設置,開發的時候應該盡量把 Javascript 整理到腳本文件里並通過 layout 進行加載,這樣開啟設置后所有的腳本都能只通過一次請求便加載完畢了。
后台開關路徑分別為 System / Configuration > ADVANCED / Developer > JavaScript Settings / Enabled 和 System / Configuration > ADVANCED / Developer > CSS Settings / Enabled。
為 Skin、Media、Javascript 設置 CDN 或者不同的子域名。
由於一般瀏覽器對同一域名的並發請求數量都有限制,這樣就算頁面上有很多資源需要加載,也只能一個個地從服務器中讀取,無法做到同時加載多個資源,影響頁面渲染效率。
后台設置路徑分別為 System / Configuration > GENERAL / Web > Unsecure 及 System / Configuration > GENERAL / Web > Secure 下的 Base Skin URL、Base Media URL 和 Base JavaScript URL。
開啟系統緩存。
可以說開啟系統緩存是最有效的提速措施,因為開啟后可以把初始化和邏輯計算的結果直接保存到緩存中,跳過很多重復的程序操作,最直接地節省程序運行時間和資源。
開啟緩存的方法是到后台 System / Cache Management 頁面的列表中勾選需要緩存的項目,再選擇列表右上角 Actions 的 Enable 並點擊 Submit 按鈕。
關閉沒有使用的原生模塊。
Magento 頁面初始化的時候會查找和合並所有組件的配置文件,並把這些組件的在數據庫中的版本與配置文件的版本進行比較,進一步執行組件的更新操作。不管打開的頁面 中是否會使用到,系統都會對所有開啟的組件執行這些工作。顯然,如果把項目中沒有用到的模塊也一起加入初始化是很浪費資源的,可以把不用的原生模塊關閉 掉。
由於模塊之間有所關聯,不是每個模塊都能做到真正獨立,部分模塊關閉后可能導致后台出現問題。為了方便開發,在這里整理了一些可以簡單做到安全關閉的原生模塊。