修改topic页的一处可能引起性能问题的方法,解决因此引起的不定期卡死

类似 http://wenda.wecenter.com/topic/channel-topic__topic_id-765 页面 正常情况下,此页只会返回20条数据 如果非正常访问,如 http://wenda.wecenter.com/topic/channel-topic__topic_id-0 在没有缓存的情况下,会返回全部topic数据,会单次查询上千个topic_id(因此,每次缓存过期,重新访问此页时,都会卡一会)   建议修改方法:修改 app/topic/main.php 将
		case 'topic':
			if (!$topics_list = AWS_APP::cache()->get('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_' . intval($_GET['page']))) {
				$topic_ids = intval($_GET['topic_id']);

				if ($child_topic_ids = $this->model('topic')->get_child_topic_ids($_GET['topic_id'])) {
					$topic_ids = array_merge($child_topic_ids, $topic_ids);
				}

				if ($topics_list = $this->model('topic')->get_topic_list('topic_id IN(' . implode(',', $topic_ids) . ') AND merged_id = 0', 'discuss_count DESC', 20, $_GET['page'])) {
					$topics_list_total_rows = $this->model('topic')->found_rows();

					AWS_APP::cache()->set('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_total_rows', $topics_list_total_rows, get_setting('cache_level_low'));
				}

				AWS_APP::cache()->set('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_' . intval($_GET['page']), $topics_list, get_setting('cache_level_low'));
			} else {
				$topics_list_total_rows = AWS_APP::cache()->get('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_total_rows');
			}

			TPL::assign('topics_list', $topics_list);
			break;
  改为
		case 'topic':
			if (!$topics_list = AWS_APP::cache()->get('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_' . intval($_GET['page']))) {
				$_GET['topic_id'] = intval($_GET['topic_id']);
				$_GET['page'] = intval($_GET['page']);

				$topics_list = $this->model('topic')->fetch_page('topic', 'merged_id = 0 AND parent_id = ' . intval($_GET['topic_id']), 'discuss_count DESC', $_GET['page'], 20);
				$topics_list_total_rows = $this->model('topic')->found_rows();
				AWS_APP::cache()->set('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_' . intval($_GET['page']), $topics_list, get_setting('cache_level_low'));
				AWS_APP::cache()->set('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_total_rows', $topics_list_total_rows, get_setting('cache_level_low'));
			} else {
				$topics_list_total_rows = AWS_APP::cache()->get('square_parent_topics_topic_list_' . intval($_GET['topic_id']) . '_total_rows');
			}
			TPL::assign('topics_list', $topics_list);
			break;
		}
      
    已邀请:

    该问题目前已经被锁定, 无法添加新回复