by Robbin Zhao (http://www.drupal001.com)                 PHP和Drupal性能优化系列(二)                              赵高欣 (Robbin Zha...
by Robbin Zhao (http://www.drupal001.com)                          目录                        从网站的用户体验说起                   ...
by Robbin Zhao (http://www.drupal001.com) 浏览器处理网页请求分析         URL请求的几个阶段:           DNS查询           建立TCP连接           发送HT...
by Robbin Zhao (http://www.drupal001.com) 浏览器处理网页请求分析        我们可以优化的:         DNS查询 (预解析)         等待服务器相应 (代码的执行时间)       ...
by Robbin Zhao (http://www.drupal001.com) 让PHP异步执行                 浏览器     PHP进程                                          ...
by Robbin Zhao (http://www.drupal001.com) PHP异步执行演示         PHP异步执行的使用           1. 开启后台进程 (Linux/Windows后台命令: popen)     ...
by Robbin Zhao (http://www.drupal001.com) Drupal最佳网站架构                                 1.   使用Varnish并做双机热备               ...
by Robbin Zhao (http://www.drupal001.com) Boost的缓存管理       1. Boost为每⼀一个URL生产⼀一个缓存页面。          包括URL中不同的query,也会生产⼀一份静态缓存,...
by Robbin Zhao (http://www.drupal001.com) Boost的缓存管理      3. 缓存文件存在,如何让Boost强制覆盖已有文件,生成最新的缓存         在自定义模块里添加如下代码:      4...
by Robbin Zhao (http://www.drupal001.com) Boost的缓存管理      5. 如果Drupal开启JS/CSS压缩,重建缓存时JS/CSS文件名会变。         这时,Boost生成的静态页面缓...
by Robbin Zhao (http://www.drupal001.com) Boost的性能问题         boost_nodeapi的性能问题          由于node的更新、添加等操作都会触发boost的缓存检查操作,这...
by Robbin Zhao (http://www.drupal001.com) Apache配置小提示           A.           Boost的修改会经常需要修改Apache的配置文件,因此           在Apac...
by Robbin Zhao (http://www.drupal001.com) 缓存!Varnish可以做得更多     a. 为相同的结果设置相同的hash     b. 让Drupal输出的HTML结果,也缓存到Varnish。修改vc...
by Robbin Zhao (http://www.drupal001.com)                        Thank You !                                    Robbin Zha...
Upcoming SlideShare
Loading in …5
×

Php及drupal性能优化系列(二)

1,151 views

Published on

Drupal性能优化,php性能优化、服务器性能优化,Varnish缓存。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,151
On SlideShare
0
From Embeds
0
Number of Embeds
282
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Php及drupal性能优化系列(二)

  1. 1. by Robbin Zhao (http://www.drupal001.com) PHP和Drupal性能优化系列(二) 赵高欣 (Robbin Zhao) zhaogaoxin@gmail.com http://www.drupal001.comSaturday, 14 July, 12
  2. 2. by Robbin Zhao (http://www.drupal001.com) 目录 从网站的用户体验说起 让PHP异步执行 Drupal最佳网站架构模式 Boost的缓存管理和性能问题 Varnish的缓存管理Saturday, 14 July, 12
  3. 3. by Robbin Zhao (http://www.drupal001.com) 浏览器处理网页请求分析 URL请求的几个阶段: DNS查询 建立TCP连接 发送HTTP请求 (GET只发送头部) 等待服务器相应 开始接收服务器输出 接收完成 减少上面任⼀一环节的时间,就能提高网页响应时间!Saturday, 14 July, 12
  4. 4. by Robbin Zhao (http://www.drupal001.com) 浏览器处理网页请求分析 我们可以优化的: DNS查询 (预解析) 等待服务器相应 (代码的执行时间) 开始接收服务器输出 (减少传输、压缩) 接收完成 FireBug:Saturday, 14 July, 12
  5. 5. by Robbin Zhao (http://www.drupal001.com) 让PHP异步执行 浏览器 PHP进程 PHP异步执 输 行可以最快的响 浏览器 出 应用户操作。 PHP进程继续 (和输出无关)Saturday, 14 July, 12
  6. 6. by Robbin Zhao (http://www.drupal001.com) PHP异步执行演示 PHP异步执行的使用 1. 开启后台进程 (Linux/Windows后台命令: popen) 2. PHP基于HTTP协议的异步代码 (ignore_user_abort)Saturday, 14 July, 12
  7. 7. by Robbin Zhao (http://www.drupal001.com) Drupal最佳网站架构 1. 使用Varnish并做双机热备 2. Varnish之前可以再有LB 3. 对静态内容使用独立域名 4. 用Nginx提供静态内容 5. 动态页面Nginx代理到Apache 5. Apache比FastCGI稳定 6. Memcache是必须的 7. GlusterFS可以做NFSSaturday, 14 July, 12
  8. 8. by Robbin Zhao (http://www.drupal001.com) Boost的缓存管理 1. Boost为每⼀一个URL生产⼀一个缓存页面。 包括URL中不同的query,也会生产⼀一份静态缓存,我们需要忽略 ⼀一些对输出没有影响的参数。在boost_init里面添加如下3列: 2. Boost只缓存匿名用户访问? 有些页面,登录用户和匿名用户展示同样的结果。(给所有用户缓存⼀一份) 有些页面,所有的登录用户看到的结果都⼀一样。(给所有登录用户缓存⼀一份) 强制缓存,修改全局变量:$GLOBALS[_boost_should_cached] = TRUE 如果要使用缓存,还得修改.htaccess文件。Saturday, 14 July, 12
  9. 9. by Robbin Zhao (http://www.drupal001.com) Boost的缓存管理 3. 缓存文件存在,如何让Boost强制覆盖已有文件,生成最新的缓存 在自定义模块里添加如下代码: 4. 如何修改Boost缓存文件的文件名或者目录 默认情况下,Boost跟URL生成对应的缓存文件,如果要修改文件名,在自定义代 码的任何位置,修改全局变量$GLOBALS[_boost_path]即可。如下示例: hook_preprocess_page(&$vars) { if (vars[node]->type == ‘typeA’) { $GLOBALS[_boost_path] = ‘typeA/’ . $GLOBALS[_boost_path]; } } 注:要使用修改后的boost缓存,必须修改相应的Apache URL Rewrite的设置。Saturday, 14 July, 12
  10. 10. by Robbin Zhao (http://www.drupal001.com) Boost的缓存管理 5. 如果Drupal开启JS/CSS压缩,重建缓存时JS/CSS文件名会变。 这时,Boost生成的静态页面缓存会失效,因为JS/CSS引用找不到了。 对于⼀一个大型网站,重新生成所有的静态页面缓存是灾难性的。 修改drupal_get_css和drupal_get_js,如下所示,删掉querystring 6. 如果JS/CSS聚合文件存在,如何让Drupal强制重新生成最新文件 A方案:把生成的js/css和文件名记录到数据库,hook_menu(js|css) B方案:通过ignore_boost_query忽略某⼀一参数,如:flush 然后删除js/css文件来强制重新生成。如drupal_build_css_cache/ drupal_build_js_cache函数中,添加如下:Saturday, 14 July, 12
  11. 11. by Robbin Zhao (http://www.drupal001.com) Boost的性能问题 boost_nodeapi的性能问题 由于node的更新、添加等操作都会触发boost的缓存检查操作,这是⼀一个 缓慢的操作!!! node_save的性能问题 node_save会清除缓存,因为清除缓存是⼀一个很耗时的操作,我们参考⼀一下源 码: 因此,在无需清除缓存时使用:$conf[‘node_save_clear_cache’] = FALSE; 同理,我们修改⼀一下boost_nodeapi函数Saturday, 14 July, 12
  12. 12. by Robbin Zhao (http://www.drupal001.com) Apache配置小提示 A. Boost的修改会经常需要修改Apache的配置文件,因此 在Apache中如何调试URL Rewrite? 在配置文件中加入断点,然后用firebug或http工具请求URL,打印你想要的变 量。(可以参考http://www.drupal001.com/上详细介绍) RewriteRule (.*) http://www.baidu.com/?host=%{HTTP_HOST},rurl=%{REQUEST_URI} [R=301,L,QSA] B. 提高Apache的性能,AllowOverride需要None 为了使用.htaccess,更好的办法是include在主配置文件中,如下: <Directory /var/www/html/www.zinch.cn/html/> AllowOverride None Include /path/to/your.htaccess </Directory>Saturday, 14 July, 12
  13. 13. by Robbin Zhao (http://www.drupal001.com) 缓存!Varnish可以做得更多 a. 为相同的结果设置相同的hash b. 让Drupal输出的HTML结果,也缓存到Varnish。修改vcl_fetch if (req.url ~ "path/" ) { unset beresp.http.Cache-Control; unset beresp.http.Pragma; unset beresp.http.Expires; set beresp.ttl = 10m; set beresp.do_gzip = true; set beresp.http.Cache-Control = "max-age=600"; } c. Varnish缓存管理 varnishadm命令行 ban.url (3.x) telnet Expect set 1 $argv spawn telnet 192.168.1.1 6082 expect "Type quit to close CLI session." send "ban.url $1n" expect "200 0" send "quitn"Saturday, 14 July, 12
  14. 14. by Robbin Zhao (http://www.drupal001.com) Thank You ! Robbin Zhao (赵高欣) http://www.drupal001.comSaturday, 14 July, 12

×