Discuz教程网

[插件制作] Discuz X2插件制作之性能优化

[复制链接]
authicon dly 发表于 2011-5-4 11:12:01 | 显示全部楼层 |阅读模式
MySQL优化
在编码规范中提到数据库的设计方法中包括性能与效率的前提下,做相应的SQL优化。在整个产品中,有时候不能忽略一些细小的优化,当出现过多未优化的细节时,也能带来致命的负载问题。
延迟更新机制,例如:首页的在线人数等,在实际产品中,有些数据不一定需要实时更新的,因为对于这类型的数据来说,实时更新的价值不高,对于这种情况我们可以考虑在产品研发过程中引入廷迟更新机制,这样可以从一定程度上降低SQL的负载。
索引的合理使用,能给你带来高效的SQL查询,但不是索引越多越好,索引的引入需在查看整个模块的设计,使之最大程度上使用索引。
读写分离,在X2的版本中,我们引入了多SQL服务器的支持,在主从服务器中,你可以配置写服务器跟读服务器,这样对于负载高的站点中可以使用这个功能达到读写分离,降低由于写过程序中造成的MySQL表锁定后的SQL排队等候时间过长。当你的服务器支持读写分离要求时,你可以在config_global.php中配置。例如:

  1. /**
  2. * 数据库主服务器设置, 支持多组服务器设置, 当设置多组服务器时, 则会根据分布式策略使用某个服务器
  3. * @example
  4. * $_config['db']['1']['dbhost'] = 'localhost'; // 服务器地址
  5. * $_config['db']['1']['dbuser'] = 'root'; // 用户
  6. * $_config['db']['1']['dbpw'] = 'root';// 密码
  7. * $_config['db']['1']['dbcharset'] = 'gbk';// 字符集
  8. * $_config['db']['1']['pconnect'] = '0';// 是否持续连接
  9. * $_config['db']['1']['dbname'] = 'x1';// 数据库
  10. * $_config['db']['1']['tablepre'] = 'pre_';// 表名前缀
  11. *
  12. * $_config['db']['2']['dbhost'] = 'localhost';
  13. * ...
  14. *
  15. */
  16. $_config['db'][1]['dbhost']                  = 'localhost';               
  17. $_config['db'][1]['dbuser']                  = 'root';               
  18. $_config['db'][1]['dbpw']                  = 'root';               
  19. $_config['db'][1]['dbcharset']                 = 'gbk';               
  20. $_config['db'][1]['pconnect']                 = 0;                        
  21. $_config['db'][1]['dbname']                  = 'ultrax';               
  22. $_config['db'][1]['tablepre']                 = 'pre_';               

  23. /**
  24. * 数据库从服务器设置( slave, 只读 ), 支持多组服务器设置, 当设置多组服务器时, 系统每次随机使用
  25. * @example
  26. * $_config['db']['slave']['1']['dbhost'] = 'localhost';
  27. * $_config['db']['slave']['1']['dbuser'] = 'root';
  28. * $_config['db']['slave']['1']['dbpw'] = 'root';
  29. * $_config['db']['slave']['1']['dbcharset'] = 'gbk';
  30. * $_config['db']['slave']['1']['pconnect'] = '0';
  31. * $_config['db']['slave']['1']['dbname'] = 'x2';
  32. * $_config['db']['slave']['1']['tablepre'] = 'pre_';
  33. *
  34. * $_config['db']['slave']['2']['dbhost'] = 'localhost';
  35. * ...
  36. *
  37. */
  38. $_config['db']['slave'] = array();
复制代码

禁止在循环中进行相应的SQL查询,当遇到这种情况时,可以尽可能的将其转换成循环外的查询。
在SQL查询中禁用NOT IN条件,NOT IN的效率比IN低很多,当使用IN时,也要尽可能的保证IN的数量。
化繁为简,在优化过程中,尽可能的化繁为简,把复杂的SQL分拆面几个简单的SQL更有种于对整体SQL的优化处理
PHP优化
PHP的优点之一是速度很快,但不能因为他的执行效率高而不对PHP的代码进行优化处理。在没有经过优化处理过的逻辑将会拖慢整个程序的执行效率。下面分析几个常见的问题:
在includes和requires中使用绝对路径,这样在分析路径花的时间更少;
在循环里别用函数,例如For($x=0; $x < count($array); $x), count()函数在外面先计算;
使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机,php.ini你不能修改,那么你最好添加error_reporting(0)函数,放在每个脚本文件的第一行(或用require_once()来加载)这能有效的保护敏感的SQL查询和路径在出错时不被显示;
禁止过多的循环套循环,嵌套过多的循环会拉低执行效率
禁止在循环内部执行相关的查询语句,除非万不得以,不然千万不可这么操作
尽量使用单引号联接字符串
尽可能的减少变量复制操作。例如:$description = $_POST['description'];
当if/else过多时,尽可能的使用switch/case 代替 if/else。能够使代码更加简明
开启缓存机制有助于提升性能,同时降低MySQL负载
开启gzip压缩




上一篇:Discuz X2插件制作之缓存机制
下一篇:Discuz X2插件制作之安全机制
authicon soul2511 发表于 2011-5-8 21:29:37 | 显示全部楼层
这个还是不错的!
authicon Cute宝贝儿 发表于 2011-5-8 23:29:37 | 显示全部楼层
这个还是不错的!
authicon forever21 发表于 2011-5-9 00:29:50 | 显示全部楼层
万分感谢楼主
authicon summmer 发表于 2011-5-9 02:29:42 | 显示全部楼层
好像不错的样子
authicon kikiya11 发表于 2011-5-9 08:30:05 | 显示全部楼层
顶顶更健康
authicon Pianissimo 发表于 2011-5-9 10:29:34 | 显示全部楼层
万分感谢楼主
authicon 馥郁渊汀 发表于 2011-5-9 10:59:40 | 显示全部楼层
这个还是不错的!
authicon 82xiaochong911 发表于 2011-5-9 17:30:04 | 显示全部楼层
楼主威武
authicon huanglv80 发表于 2011-5-9 18:29:49 | 显示全部楼层
这个贴不错!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-6-17 05:06

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表