userchooser的性能优化

本文深入探讨了优化人名控件性能的关键环节,包括前端JS、网络传输、后台逻辑和数据库查询。通过调整压缩等级、剥离不必要的逻辑、改进数据库查询方式,有效降低了网络传输时间和数据库查询性能瓶颈。

人名控件的性能优化的解决思路:

1.前端js

2.数据的网络传输

3.后台逻辑

4.数据库

/**********************前端JS***********************************/

前端js基本上没有过多的优化余地。如果要修改获取数据的方式为分段取,那么改动将比较大,暂时不做

/**********************网络***********************************/

这块是大头。整个公司的人名拼起来的字符串有378k,那么网络传输的耗时将非常可观。检查发现apache没有开压缩

简单地将deflate打开,将人名数据压缩到110k。使用默认的压缩等级为6。这样网络传输的时间降为100ms以内

但是当请求邮件组时,这个字符串达到了579k(天啊好大),压缩后为156k。但是测试发现居然还是要接近1s的时候来传输。

跟前面的110k的网络时间完成不成比例,怀疑156k超过了apache的网络缓冲区的临界值吧。这个问题后面再继续研究。

同时,经过实验,不断地调整压缩等级也可能带来一定的提升,经过几次试验后,我发现在开发机上压缩等级为2可以使用网络传输最快。

/**********************后台逻辑***********************************/

由于cake框架的制约可能这个简单的请求会多余很多的逻辑。所以想把它剥离出来,用祼php来写。

写了个hello world测试了一下发现单个请求大约只提升了70ms+吧,空间不大,可能是人名请求没有加载多过的model吧。

暂时放弃剥离。

检查逻辑发现使用cake的model来查询数据库可能也走了很多不必要的逻辑,因为将其改为直接连接数据库并使用sql直接查询,

这样带来了100ms-200ms+的提升。

/**********************数据库***********************************/

检查数据库发现人名数据的表没有对enabled字段建立索引,因此将其加上。发现并没有带来性能上的提升。因为enabled的值是0和1,

且我们都是查找1的数据,这样的数据几乎占了全部数据的80%,因此这个所以几乎无效。

真正导致人名数据查询性能低的原因是取出来的数据太多了。于是尝试用sql来把人名拼起来,查义时只返回一个字符串即可。

于是用group_concat和concat将结果进行拼装,发现更慢了。。分析发现,其实数据库做字符串操作要比php慢多了。。

为了解决从磁盘取过多数据的问题,于是使用了mysql的内存表,这样数据将存在于内存中,减少了io的查询,具体可以提升多少性能

还需放到正式数据库上进行测试,因为俺们的开发数据库只有可怜的2G内存。。一直处理满状态,建了内存表只会更慢,因为内存不够用

导致了虚拟内存的使用。

转载于:https://www.cnblogs.com/kuncai/archive/2010/05/19/1739532.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值