magento性能优化

14个快速加载web页面的技巧:

减少HTTP请求数
使用CDN
增加过期头信息
gzip压缩传输内容
将css样式表放在页首
将js文件放在页尾
不使用css表达式
尽量少用内联式的css和js,将其放置在外部资源文件中
减少DNS检索次数
压缩js文件
避免页面重定向
移除重复脚本
配置实体标签
缓存ajax请求

简单的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

Mysql 快速优化

在 my.conf 中变更以下参数:

skip-name-resolve
innodb_buffer_pool_size=768M
innodb_flush_log_at_trx_commit=2

时常使用Tuning Primer程序监测mysql运行状态并调整相应的配置参数

PHP编译

类似apache编译方式,采取静态编译的方式来编译扩展,并禁用无需的模块:

./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs 
--with-config-file-path=/etc/php --with-png-dir --with-jpeg-dir --with-gd 
--with-curl --with-zlib --enable-mbstring --with-mcrypt --with-freetype-dir=/usr 
--with-mysql=/usr/bin/mysql --with-mysqli --enable-pdo --with-pdo-mysql=/usr/bin/mysql 
--without-pdo-sqlite --with-openssl

为PHP安装 eAccelerator 插件

从 eAccelerator.net 下载最新的稳定版本,编译时启用共享内存:

./configure --with-eaccelerator-shared-memory --enable-eaccelerator=shared 
--with-php-config=/usr/local/php/bin/php-config

完成上述操作之后,我们已经完成了步骤A:

添加 过期头信息
gzip压缩组件配置
配置实体标签

此时我们拥有了:

一个能最大程度促进站点性能的轻量级的LAMP环境
一个足够快的运行Magento的环境

现在 让我们正式进入到Magento调优阶段

先看看Magento系统内置的优秀的性能优化模块:

多种适配器缓存
编译
合并css和js文件
并行下载

启用 Magento 缓存

管理面板->System->Cache Management

All Cache -> Enable
Layered Navigation(层次化导航) -> Yes

管理面板->System->Configuration->Catalog->Frontend

Use Flat Catalog Category -> Yes
Use Flat Catalog Product -> Yes

启用eAccelerator适配器

打开 {Magento_root}/app/etc/local.xml,在里面增加如下3行
...
    </resources>
    <session_save><![CDATA[files]]></session_save>
    <cache>
        <backend>eaccelerator</backend>
    </cache>

启用编译

管理面板->System->Tools->Compilation(编译)->Run compilation Process

合并 CSS & JS 文件

管理面板->System->Configuration->Developer

js 设置->合并js文件->YES
css 设置->合并css文件->YES

并行下载设置
通过虚拟主机将magento下的资源目录划分成几个子域名,例如:

js.iamsese.cn -> {Magento_root}/js
media.iamsese.cn -> {Magento_root}/media
skin.iamsese.cn -> {Magento_root}/skin

然后去管理面板->System->Configuration->Website->Unsecure(不安全的,非加密的),and configure the basic URLs accordingly(相应的)

现在你完成了:

减少HTTP请求数
将css样式表放在页首
将js文件放在页尾
尽量少用内联式的css和js,将其放置在外部资源文件中
减少DNS检索次数
压缩js文件

现在把它们拼凑在一起:

减少HTTP请求数
增加过期头信息
gzip压缩传输内容
将css样式表放在页首
将js文件放在页尾
不使用css表达式
尽量少用内联式的css和js,将其放置在外部资源文件中
减少DNS检索次数
压缩js文件
避免页面重定向
移除重复脚本
配置实体标签
缓存ajax请求

现在 你已经完成了 12/14,这就能足够为初学者使用了

工具&程序:

Firebug:     
YSlow:
Page Speed:
Tuning Primer:
WebPagetest:

1 
3 
分享到:  
评论
3 楼 vb2005xu 2014-06-23  
如果编译 PHP时出现 mysql头文件找不到的问题,可以使用 mysqlnd 来指定

./configure --prefix=/home/kenxu/php5.4 --with-apxs2=/home/kenxu/apache2/bin/apxs --with-config-file-path=/home/kenxu/php/php-config --with-png-dir --with-jpeg-dir --with-gd  --with-curl --with-zlib --enable-mbstring --with-mcrypt --with-freetype-dir=/usr --with-mysql=mysqlnd --with-mysqli --enable-pdo   --with-pdo-mysql=mysqlnd --without-pdo-sqlite --with-openssl

2 楼 vb2005xu 2012-11-23  
编译mysql
使用rpm包,或者apt-get、yum等方式安装MySQL已经很方便了,不过我还是更喜欢编译安装。编译安装的好处:平台无关、安装的MySQL目录独立(方便清楚),据说有更好的性能和平台耦合。缺点,编译安装较慢(不过现在8核CPU编译起来也很快了)。

1. MySQL编译参数

常用的参数有:

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \ -fno-exceptions -fno-rtti" ./configure \ --prefix=/data/mysql --with-extra-charsets=latin1,gbk,utf8 \ --with-plugins=partition,heap,innobase,myisam,myisammrg,csv \ --enable-assembler make make install

“If you are using a version of gcc recent enough to understand the -fno-exceptions option, it is very important that you use this option. Otherwise, you may compile a binary that crashes randomly. Also use -felide-constructors and -fno-rtti along with -fno-exceptions.”

参考:MySQL Installation Using a Source Distribution

2. 多核编译

可以通过 -j 参数指定编译使用的CPU数量,之前一直没有注意使用这个选项,以下是对比测试:

$date && make > make.log 2>&1 && date Fri Apr 16 16:32:00 CST 2010 Fri Apr 16 16:39:37 CST 2010 $date && make -j 8 > make.log 2>&1 && date Fri Apr 16 16:27:10 CST 2010 Fri Apr 16 16:28:30 CST 2010 $date && make -j 15 > make.log 2>&1 && date Fri Apr 16 16:50:23 CST 2010 Fri Apr 16 16:51:41 CST 2010

看到,单核编译花了457秒,八核编译花了80秒,十五核编译花了78秒。

3. 目录结构

最初安装MySQL,不用RPM包的另一个重要原因就是,编译安装我们可以获得相对独立的MySQL目录,包括Server、Client、Data File等都可以比较好的规划在一个目录中。

在编译时,使用--prefix=/data/mysql则可以保证,Server(mysqld_safe)、Client(mysql)等统一在prefix所制定的目录下;在/etc/my.cnf文件中,我们再继续指定Data File目录、sock文件目录、pid文件目录、日志目录、tmp目录,这样基本上就保证了整个MySQL的独立性。

你甚至可以把/etc下的my.cnf文件都转移到prefix指定的目录下,这样你就拥有一个完整而且独立的MySQL目录了。

4. 需要注意的问题

一般编译安装之后,很多生成的脚本中都会写死目录(prefix指定的目录),这样编译好的脚本(二进制、shell、perl)如果转移到别的目录可能会导致无法运行。

例如,编译时指定prefix=/data/mysql,如果最后你把编译好的文件转移到/opt/mysql,很多脚本可能会无法运行,甚至会发生很多怪异的现象:-(

5. 安装实践 step by step

下面是将MySQL安装在/home/mysql目录下的一个实际操作过程,这里的prefix将指定目录/home/mysql/mysql(你可以根据需要修改为自己需要指定的位置)

# # # 新建运行MySQL的用户 groupadd dba useradd -g dba mysql cp mysql-5.0.86.tar.gz /home/mysql/ chown -R mysql:dba /home/mysql/mysql-5.0.86.tar.gz # # # 开始编译、安装 su - mysql tar zxvf /home/mysql/mysql-5.0.86.tar.gz cd mysql-5.0.86 ./configure \ --prefix=/home/mysql/mysql --with-extra-charsets=latin1,gbk,utf8 \ --with-plugins=partition,heap,innobase,myisam,myisammrg,csv make -j 8 && make install #-j 表示希望使用cpu核数 # # # 建立配置文件 cd /home/mysql/mysql su - root cp mysql/share/mysql/my-medium.cnf /etc/my.cnf chown -R mysql:dba /etc/my.cnf # # # 修改配置文件 配置数据文件、日志的路径 su - mysql vi /etc/my.cnf basedir = /home/mysql/mysql datadir = /home/mysql/mysql/data socket = /home/mysql/mysql/run/mysql.sock log-error = /home/mysql/mysql/log/alert.log log_slow_queries = /home/mysql/mysql/log/slow.log mkdir log run data tmp # # # 初始MySQL配置表(用户表 权限表等) ./bin/mysql_install_db --basedir=/home/mysql/mysql --datadir=/home/mysql/mysql/data --user=mysql --force # # # 启动MySQL ./bin/mysqld_safe &

linux下用源代码编译mysql(基本步骤)http://hi.baidu.com/travel981cn/item/fee251dcbe6d97e5795daa50

这篇文章是 linux下用源代码编译apache+mysql+php应用环境 的一部分,文章的其它部分请参考:

linux下用源代码编译apache+mysql+php应用环境

linux下用源代码编译mysql(完整步骤)

linux下用源代码编译apache

linux下用源代码编译php

mysql部分。mysql源代码的版本是:mysql-5.1.29-rc.tar.gz

关于mysql的编译方法,在http://dev.mysql.com/这个网址可以找到一些帮助,该文档介绍已足够详细。下面我给出编译mysql所必须的命令,让心急的朋友了解一下大概。

mysql编译安装基本命令——给心急的朋友,出于安全的考虑,推荐用特定用户去运行mysql:

groupadd mysql

添加mysql组

useradd -g mysql mysql

添加mysql用户,并加入到mysql组

tar xvf mysql-5.1.29-rc.tar.gz

解压源代码

cd mysql-5.1.29-rc/

进入源代码目录

./configure --prefix=/usr/local/mysql

配置mysql

make &&make install

编译并安装

scripts/mysql_install_db --user=mysql

安装mysql数据库并将所有权交给mysql

cp support-files/my-medium.cnf /etc/my.cnf

拷贝合适的配置文件

cp support-files/mysql.server /etc/init.d/mysqld

复制mysql启动脚本

chkconfig --add mysqld

添加mysqld服务

chkconfig --level 35 mysqld on

设置mysqld在运行级3和5中启动

chkconfig --list mysql

检查mysql的服务运行状态

service mysqld start

启动mysql

注意:只有新版的tar命令支持-x参数调用gnuzip,稍早一些的版本需要使用
tar xzvf mysql-5.1.29-rc.tar.gz或gunzip < mysql-5.1.29-rc.tar.gz | tar -xvf -
因此,如果你看到我使用一些“奇怪”的命令时,千万不要以为我打错了。

关于make install:新版本的make install可以同时完成make &&make install的任务,但是,如果在编译过程中出现了错误,在重新调整configure 参数后执行make install 时总有不太保险的感觉,一个聪明的做法是使用make clean 清除掉上次编译的结果。

关于/etc/my.cnf配置文件:/etc是mysql默认的配置文件位置,my.cnf文件可以在mysql源代码目录的support-files目录中选择一个合适的拷贝到/etc。当然,你也可以根据自己的需要进行配置。

关于MySQL首次启动错误:除了下文说到的权限问题外,在首次启动MySQL时还会遇到 federated 错误,这是因为在上文给出的编译选项中,没有启用 federated存储引擎 ,解决方法为,编辑mysql的配置文件my.cnf,找到 skip-federated 这一行,将该行注释掉。

如果你的mysql顺利编译并安装,但是却无法启动,那么多半是因为权限的问题。使用下面的命令:
假设mysql安装到/usr/lcoal/mysql,mysql的数据文件在/usr/local/mysql/var

cd /usr/local/mysql

进入mysql目录

chown -R root.root .

将/usr/local/mysql所有者/组改为root

chown -R mysql.mysql var

将/usr/local/mysql/var所有者/组改为mysql

以上列出编译mysql数据库的大概步骤,便于读者了解mysql从编译到运行的大概,但凡是需要以专有用户身份去运行的服务组件,大致都会用到上面的步骤。为了保持行文的流畅,在稍后的apache的章节中,我将不再叙述简略的编译方法。

下面我们正式开始,有兴趣要做完整个流程的朋友请耐心阅读,理解后再去操作。

magento性能优化的更多相关文章

  1. magento性能优化的教程(非常详细)

    Magento是一套专业开源的电子商务系统,Magento设计得非常灵活,具有模块化架构体系和丰富的功能但有朋友会发现此模块用到了会发现非常的缓慢了,那么下面我们来看关于magento性能优化的例子. ...

  2. [转]magento性能优化

    本文转自:https://www.cnblogs.com/zhengyanbin2016/p/5577792.html magento性能优化 14个快速加载web页面的技巧: 减少HTTP请求数使用 ...

  3. [转]magento性能优化的教程(非常详细)

    本文转自:https://www.sypopo.com/post/kMQE8dERoV/ 前面优化 mod_deflate模块,将text. css 和 javascript 先进行压缩再发送到浏览器 ...

  4. Magento站点优化方案

    Magento 是一个开源电子商务系统,尤其以扩展性高著称,但是很高的扩展性往往是牺牲了速度为代价的,虽然现在magento为速度提升做了很多工作,但是还是没能达到人们对速度的要求.既然如此还是很自然 ...

  5. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  6. [转]论magento1和magento2的速度性能优化问题

    本文转自:http://www.360magento.com/blog/magento-speed-up/ magento从2007年发展至今,也经历了十余年的磨练,如今也迎来了magento的换代产 ...

  7. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  8. 03.SQLServer性能优化之---存储优化系列

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概  述:http://www.cnblogs.com/dunitian/p/60413 ...

  9. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

随机推荐

  1. splunk rest api search

    如下: curl -u admin:changeme -k https://localhost:8089/services/search/jobs -d search="search sou ...

  2. java邮件

    我们用过很多邮件,qq,163,网易等. 一.发送邮件需要遵循smtp协议,接收邮件需要遵循pop3协议 二.发邮件的过程 假设用qq邮件 写邮件-->点 “发送” --> qq邮件服务器 ...

  3. struts2的 result 通配符 OGNL

    result: 1). result 是 action 节点的子节点 2). result 代表 action 方法执行后, 可能去的一个目的地 3). 一个 action 节点可以配置多个 resu ...

  4. C++-继承名称的掩盖

    /////////////////////////////////////////////////////////////////////////////// // // FileName : eff ...

  5. C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用

    主要用在ExecuteReader(c)中,如果想要返回对象前不关闭数据库连接,须要用CommandBehavior.CloseConnection: CloseConnection解决了流读取数据模 ...

  6. 如何在redhat下安装办公软件(openoffice)

    在redhat的client版本中自带有办公软件libreoffice,而在server版的redhat中却没有自带的办公软件,那么,如何在redhat的server版下安装办公软件呢? 方法一:配置 ...

  7. 从协议VersionedProtocol开始2——ClientDatanodeProtocol和InterDatanodeProtocol

    1.首先,我看的是hadoop1.2.1 这个里边,有点奇怪ClientDatanodeProtocol的versionID是4,但是InterDatanodeProtocol的versionID是3 ...

  8. swing Event-Listener-Adapter 对照表

    Source Event Event Listener AbstractButton (JButton,JToggleButton, JCheckBox,JRadioButton ActionEven ...

  9. Allow windows service to "Interact with desktop"

    Typically, services are designed to run unattended without any UI with any need to interact with des ...

  10. Dom操作html详细

    <p name='pn'>xxx</p> <p name='pn'>xxx</p> <p name='pn'>xxx</p> & ...