关于web多标签多条件筛选的思考以及缓存的正确使用方法(上)

做项目的过程中,发现一次远程链接数据库的耗时大概是300ms~400ms,切身体会到了前辈们经常说的减少链接的重要性,用了缓存后页面的打开时间从1.5s减少到400ms

 

前提:

那么来说一说正题,web中多标签多条件筛选的设计.有两个思路:

一种是通过页面刷新来获取数据

一种是通过ajax来异步获取数据

 

思考:

大的方向两条,分支很多,想搜索一下有没有最优方案,似乎找不到.

 

spike:

//js来获取用户点击的标签,拼装url,再用window.location.href=url来跳转.

a标签在当前url后加参数,之后用js来改写a标签的herf.

 

开发到一半从总部传来的消息:不要刷新页面,用异步加载.然后引用一下我老大的反击:

ajax的这几个缺点:
1,SEO不识别
2,无法给出某个城市的URL,因为URL都是一致的(当然可以用#实现。。。)
3,如果服务器响应超过2秒,页面感觉是假死。。(当然可以搞loading。。。)
4,每加一个参数要改很多JS。。。

就是要写很多脚本来兼容这些点。。维护麻烦。。
当然要用我也不排斥。。。就是不喜欢。。

 

 反省:

请看如下代码:

	public function url_format($level, $district, $lev, $dis, $rank)
	{
		foreach ($level as $k => $v) {
			$level[$k]['url'] = '?lev=' . $k . '&dis=' . $dis . '&rank=' . $rank;
		}
		foreach ($district as $k => $v) {
			$district[$k]['url'] = '?dis=' . $v['id'] . '&lev=' . $lev . '&rank=' . $rank;
		}

    }

 

不得不承认这是一种很笨的方法,穷举对于编程来说既是大忌同时也是开发速度最快的选择,在没有考虑到穷举这一个选项之前已经开始准备使用递归的方法来生成url,然而在后期优化的时候,递归也是一个思考的方向.

 

 再来说缓存

之前提到过,一次远程IO大概是400ms左右,与数据量大小成正比,初次使用缓存优化尝到了甜头,然后死在了所有人都犯过的错上,老大对我估计是不止第一次不知道多少次的说出了这样的话:

你在用缓存优化页面,页面被你优化的很快,很流畅你很有成就感的时候但是你要注意到一点,你的数据更改不会及时生效,如果你要删除缓存的时候会不会很难操作

 没错,我单个城市的缓存达到了五十个以上,包括各种数据的分类以及筛选数据.如果是全国200个城市,那么缓存数量将轻松上千.在测试服我可以用flushall,正式环境呢?

 

缓存一时爽


在公司没有一套完整的控制缓存的机制时,滥用缓存是一件非常不理智的行为,优化后的方法:

 

将每个城市的全部数据放入缓存中,再根据用户的筛选条件在php中进行筛选.

    public function data_filter($paras, $data)
	{
		$pagesize = $paras['pagesize'];
		$start = $paras['start'];
		unset($paras['pagesize']);
		unset($paras['start']);
		unset($paras['city_id']);
		foreach ($paras as $k => $v) {
			foreach ($data['list'] as $key => $value) {
				if ($v != 0 && $value[$k] != $v) unset($data['list'][$key]);
			}
		}
		$total = count($data['list']);
		$data['total'] = $total;
		$data['list'] = array_slice($data['list'], $start, $pagesize);
		//var_dump($data);
		return $data;
	}

 

将无用条件unset掉,再将不符合条件的数据unset掉,根据分页来展现数据.就完成了再缓存中取数据,再php中筛选的过程.这样的话速度大概慢了200ms左右,不过比起来一大堆缓存key来说..这点时间是值得付出的

 

posted @ 2016-11-24 17:37  JOSEFA  阅读(2555)  评论(0编辑  收藏  举报
shopify traffic stats View My Stats