做项目的过程中,发现一次远程链接数据库的耗时大概是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来说..这点时间是值得付出的

 

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

  1. 齐博x1where 标签动态变量查询/where 实现条件筛选与数据关联

    大家可能对union参数不太习惯的话,也可以用where语句加入动态变量查询,比如 where="fid=$fid&uid=$info[uid]&pid>=$info. ...

  2. 织梦CMS实现多条件筛选功能

    用织梦实现筛选的功能,其实主要就是运用到了织梦的高级搜索功能,然后用ajax去post替换掉本来的结果就可以了. 其实筛选的话,主要有两个问题需要解决,一个是前台的筛选实现,一个是后台根据前台的点击, ...

  3. Java Web 自定义标签

    1.   自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...

  4. mxonline实战8,机构列表分页功能,以及按条件筛选功能

    对应github地址:列表分页和按条件筛选     一. 列表分页   1. pip install django-pure-pagination   2. settings.py中 install ...

  5. web中用纯CSS实现筛选菜单

    web中用纯CSS实现筛选菜单 本文我们来用纯css实现像淘宝宝贝筛选菜单那样的效果,例子虽然没有淘宝那样强大,不过原理差不多,如果花点心思也可以实现和淘宝一样的. 内容过滤是一个在Web上常见的一个 ...

  6. Django多条件筛选查询

    转自:https://www.jianshu.com/p/a86281df530e Django多条件筛选查询 主模型只存在外键一对多关系 模型设计 # 快捷筛选状态 class Status(mod ...

  7. Hbase条件筛选

    需求来自于,模糊查找当天的所有记录,并查找对应列的记录数 public static void main(String[] args) throws Exception{ //创建HBase连接 Co ...

  8. iOS: 悬浮的条件筛选框使用二

    一.介绍: 在前面已经介绍了一种条件悬浮框,使用的是tableView的Plain分组样式实现的,因为这是tableView本身就具备的功能,分组悬浮效果.这次我来介绍第二种更加简单的方法,采用两个S ...

  9. iOS: 悬浮的条件筛选下拉框的使用

    1.介绍 app中条件筛选视图是很常用的功能,一般它搭配着tableView的表头悬浮滚动使用,点击按钮时,就会弹出下拉框显示条件,选择一个条件后,下拉框自动隐藏. 2.效果图如下 从中间点击弹出,然 ...

随机推荐

  1. EF codefirst+mvc4+bootstrap+autofac+ddd 系统共享 祝大家新年开心搬砖

    博客园的博友新年好,小弟在此给大伙拜了晚年,感谢一直以来的支持. 在过去的一年,从博客园有400多ASP.NET MVC爱好者加入本人的群,本人在此很感激,并勉励大家一起学习奋斗. 希望在新的一年,继 ...

  2. Factovisors - PC110704

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10139.html 原创: 作者: ...

  3. 2013.5.A

    题1 高低位交换 [问题描述] 给出一个小于2^32的正整数.这个数可以用一个32位的二进制数表示(不足32位用0补足).我们称这个二进制数的前16位为“高位”,后16位为“低位”.将它的高低位交换, ...

  4. selenium webdriver (python)2

    selenium webdriver (python) 第二版 前言  对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发 ...

  5. 多线程编程中使用pthread_create内存泄露问题

    //tls5源代码: #include <stdio.h> #include <unistd.h> #include <string.h> #include &qu ...

  6. asp.net MVC实现文章的“上一篇下一篇”

    由于这个东西的原理没有什么难的(只是实现的时候有少量的坑),故直接上代码以便查阅.另:本文给出的Action附送了点击量统计. public ActionResult SingleNews(int? ...

  7. IceMx.Mvc 我的js MVC 框架六、完善植物大战僵尸(向日葵登场)

    有图有真相,废话不多说上图 看到园友的支持很受鼓舞,更觉得应该做下去,虽然自己是个菜鸟,但也应该共享自己的心得,只要有人获益那就是值得的. 我的下载需要csdn论坛的1个积分,之所以不完全免费出去是因 ...

  8. 进程间通讯之mmap文件共享

    进程间通讯之mmap文件共享 引文: 个人名言:“同一条河里淹死两次的人,是傻子,淹死三次及三次以上的人是超人”.经历过上次悲催的面试,决定沉下心来,好好的补充一下基础知识点.本文是这一系列第一篇:进 ...

  9. 一步一步深入spring(3)--spring的依赖注入方式

    对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...

  10. Android ListView中添加不同的多种布局

    最近做项目要使用ListView加载不同的布局,由于自己写的代码不能贴出,故找了一篇自认为比较好的blog给分享出来,希望对用到此项技术的同学有点帮助. http://logc.at/2011/10/ ...