本文轉自:https://www.sypopo.com/post/kMQE8dERoV/javascript
前面優化php
mod_deflate模塊,將text、 css 和 javascript 先進行壓縮再發送到瀏覽器。這樣就會減小網絡下載量,縮短等待時間,示例以下:css
# 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 onhtml
啓用Expires Headersjava
注意:這一配置在Litespeed servers無效
瀏覽器使用 Expires Headers來肯定頁面組件能夠被緩存多長時間。靜態的部件,如圖像,能夠設置爲永不過時,但仍是建議設置一個Expires Headers。要打開這個特性,能夠取消註釋對應的行並添加"ExpiresActive On" 以下所示:node
ExpiresActive On
ExpiresDefault "access plus 1 year"mysql
禁用 ETags
ETags(Entity tags)是服務器和瀏覽器的一個功能,它用來判斷瀏覽器緩存裏的元素是否和原來服務器上的一致。ETags比last-modified date更具備彈性,它用一個獨一無二的字符串來標識一個元素的版本。 要關閉它很簡單,作法以下:
FileETag nonelinux
日誌太大,執行以下sql: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 頁面初始化的時候會查找和合並全部組件的配置文件,並把這些組件的在數據庫中的版本與配置文件的版本進行比較,進一步執行組件的更新操做。無論打開的頁面中是否會使用到,系統都會對全部開啓的組件執行這些工做。顯然,若是把項目中沒有用到的模塊也一塊兒加入初始化是很浪費資源的,能夠把不用的原生模塊關閉掉。
因爲模塊之間有所關聯,不是每一個模塊都能作到真正獨立,部分模塊關閉後可能致使後臺出現問題。爲了方便開發,在這裏整理了一些能夠簡單作到安全關閉的原生模塊。