网页性能问题, 3个js的Timer,Jquery Ajax,2-3百个客户端访问页面很卡

时间:2022-05-27 00:21:46
各位,请教一个网页性能问题:当个客户端很快,2、3百个客户端访问,在同一个页面上操作很卡,页面上有3个js的Timer在跑,都已用的Jquery的Ajax,请问会是什么原因呢?会是频繁读取数据库的原因吗,还是跟程序有关系?各位请指教

20 个解决方案

#1


3个timer??
3个timer都去读数据库??

时间设置的多少?

#2


3个timer,2~300个用户,不知道你的timer频率多高
算下来页面都开着的话,300*3,就算全都是ajax请求都已经有900请求……
服务器一般配置的并发链接数也就几千……

#3


我想这样解决,就是一个windowservice轮询把需要的数据读取出来放到txt里,然后web页面的timer掉的后台方法直接去读txt里的数据,这样可以大大减少数据库的负载,但有一个问题,就是winservice在更新数据时和web程序读txt里面的数据,会不会产生死锁的情况

#4


你最终的目的 无非就是客户端实时拿到数据库的最新的信息.

弄那么多webservice又是txt还死锁的  你想多了..

而且 你所谓的解决办法 是谁想出来的? 你看网上有这么干的 还是你经理叫你这么干的 还是自己想这么干的?

#5


引用 4 楼 diaodiaop 的回复:
你最终的目的 无非就是客户端实时拿到数据库的最新的信息.

弄那么多webservice又是txt还死锁的  你想多了..

而且 你所谓的解决办法 是谁想出来的? 你看网上有这么干的 还是你经理叫你这么干的 还是自己想这么干的?

请问你有好的办法吗?

#6


请教各位有好办法吗

#7


你还是先回答“3个timer分别设置interval为多长时间?”以及“是否都要读取数据库?”的问题。

轮询本来就是容易搞跨系统的做法。当系统由1、2个人变为10、20个人时就能搞跨服务器,更别说200、300人了。

#8


轮询代表着“实在没别的办法”,实在是只能要求最差的结果。这时候就不要过多考虑实时性和准确性。在服务器端有一个内存中的缓存即可,不要再在中间环节使用什么互斥、死锁、慢读慢写的中介了。

#9


为什么非要轮训呢 说下业务需求

#10


引用 7 楼 sp1234 的回复:
你还是先回答“3个timer分别设置interval为多长时间?”以及“是否都要读取数据库?”的问题。

轮询本来就是容易搞跨系统的做法。当系统由1、2个人变为10、20个人时就能搞跨服务器,更别说200、300人了。

是的,因为要实时显示数据统计数字,都要读取数据库,基本上interval是2、3秒这样子,我想在查询时加上 with (nolock),这样是否能够加快速度

#11


你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

#12


引用 11 楼 wyumening 的回复:
你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

是的,是用的Jquery 的 ajax,那得自己写xmlhttprequest了

#13


这样同一时间内的请求数估计太多了

#14


程序设计不合理,没有其它理由
你看看股票网站,那么多人访问,不断更新,有啥问题?

#15


引用 10 楼 vs2007 的回复:
Quote: 引用 7 楼 sp1234 的回复:

你还是先回答“3个timer分别设置interval为多长时间?”以及“是否都要读取数据库?”的问题。

轮询本来就是容易搞跨系统的做法。当系统由1、2个人变为10、20个人时就能搞跨服务器,更别说200、300人了。

是的,因为要实时显示数据统计数字,都要读取数据库,基本上interval是2、3秒这样子,我想在查询时加上 with (nolock),这样是否能够加快速度


你的实时是指:用户打开页面后,如果数据库有更新还要通知客户端吗?
300个用户查的数据是同一份数据,还是每个用户查询不同的数据?
每个timer每次都去连数据库查询,服务器肯定性能受影响。你设想一下,假设数据一个小时内没有更新,
那么你这一个小时内几千次查询不都给数据库添加无谓的压力吗?
你不应该用ws去读取,而且放到txt。这东西应该用缓存的思想来解决。

#16


操作卡,貌似是客户端在绘制html的时候导致的吧,先把轮询回来后要操作html相关的屏蔽掉看看,

#17


另外轮询只会拖垮服务器,

#18


引用 12 楼 vs2007 的回复:
Quote: 引用 11 楼 wyumening 的回复:

你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

是的,是用的Jquery 的 ajax,那得自己写xmlhttprequest了

先看看有没有因为jquery ajax 引起的内存泄露吧,如果有的话再考虑是不是要改成自己写的ajax,如果自己写ajax请求还是会有性能问题的话,采取的优化策略应该根据数据的变动频率已经在线用户的多少来变化

#19


百度一下:comet 或者 asp.net的signalR

#20


引用 18 楼 wyumening 的回复:
Quote: 引用 12 楼 vs2007 的回复:

Quote: 引用 11 楼 wyumening 的回复:

你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

是的,是用的Jquery 的 ajax,那得自己写xmlhttprequest了

先看看有没有因为jquery ajax 引起的内存泄露吧,如果有的话再考虑是不是要改成自己写的ajax,如果自己写ajax请求还是会有性能问题的话,采取的优化策略应该根据数据的变动频率已经在线用户的多少来变化

确实是内存涨的很快,我现在是自己写的XMLHttpRequest,保证XMLHttpRequest的数量不会无限增长,确实在页面上也用Jquery频繁操作html了,也会占内存,页面上确实要实时显示数据 网页性能问题, 3个js的Timer,Jquery Ajax,2-3百个客户端访问页面很卡

#1


3个timer??
3个timer都去读数据库??

时间设置的多少?

#2


3个timer,2~300个用户,不知道你的timer频率多高
算下来页面都开着的话,300*3,就算全都是ajax请求都已经有900请求……
服务器一般配置的并发链接数也就几千……

#3


我想这样解决,就是一个windowservice轮询把需要的数据读取出来放到txt里,然后web页面的timer掉的后台方法直接去读txt里的数据,这样可以大大减少数据库的负载,但有一个问题,就是winservice在更新数据时和web程序读txt里面的数据,会不会产生死锁的情况

#4


你最终的目的 无非就是客户端实时拿到数据库的最新的信息.

弄那么多webservice又是txt还死锁的  你想多了..

而且 你所谓的解决办法 是谁想出来的? 你看网上有这么干的 还是你经理叫你这么干的 还是自己想这么干的?

#5


引用 4 楼 diaodiaop 的回复:
你最终的目的 无非就是客户端实时拿到数据库的最新的信息.

弄那么多webservice又是txt还死锁的  你想多了..

而且 你所谓的解决办法 是谁想出来的? 你看网上有这么干的 还是你经理叫你这么干的 还是自己想这么干的?

请问你有好的办法吗?

#6


请教各位有好办法吗

#7


你还是先回答“3个timer分别设置interval为多长时间?”以及“是否都要读取数据库?”的问题。

轮询本来就是容易搞跨系统的做法。当系统由1、2个人变为10、20个人时就能搞跨服务器,更别说200、300人了。

#8


轮询代表着“实在没别的办法”,实在是只能要求最差的结果。这时候就不要过多考虑实时性和准确性。在服务器端有一个内存中的缓存即可,不要再在中间环节使用什么互斥、死锁、慢读慢写的中介了。

#9


为什么非要轮训呢 说下业务需求

#10


引用 7 楼 sp1234 的回复:
你还是先回答“3个timer分别设置interval为多长时间?”以及“是否都要读取数据库?”的问题。

轮询本来就是容易搞跨系统的做法。当系统由1、2个人变为10、20个人时就能搞跨服务器,更别说200、300人了。

是的,因为要实时显示数据统计数字,都要读取数据库,基本上interval是2、3秒这样子,我想在查询时加上 with (nolock),这样是否能够加快速度

#11


你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

#12


引用 11 楼 wyumening 的回复:
你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

是的,是用的Jquery 的 ajax,那得自己写xmlhttprequest了

#13


这样同一时间内的请求数估计太多了

#14


程序设计不合理,没有其它理由
你看看股票网站,那么多人访问,不断更新,有啥问题?

#15


引用 10 楼 vs2007 的回复:
Quote: 引用 7 楼 sp1234 的回复:

你还是先回答“3个timer分别设置interval为多长时间?”以及“是否都要读取数据库?”的问题。

轮询本来就是容易搞跨系统的做法。当系统由1、2个人变为10、20个人时就能搞跨服务器,更别说200、300人了。

是的,因为要实时显示数据统计数字,都要读取数据库,基本上interval是2、3秒这样子,我想在查询时加上 with (nolock),这样是否能够加快速度


你的实时是指:用户打开页面后,如果数据库有更新还要通知客户端吗?
300个用户查的数据是同一份数据,还是每个用户查询不同的数据?
每个timer每次都去连数据库查询,服务器肯定性能受影响。你设想一下,假设数据一个小时内没有更新,
那么你这一个小时内几千次查询不都给数据库添加无谓的压力吗?
你不应该用ws去读取,而且放到txt。这东西应该用缓存的思想来解决。

#16


操作卡,貌似是客户端在绘制html的时候导致的吧,先把轮询回来后要操作html相关的屏蔽掉看看,

#17


另外轮询只会拖垮服务器,

#18


引用 12 楼 vs2007 的回复:
Quote: 引用 11 楼 wyumening 的回复:

你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

是的,是用的Jquery 的 ajax,那得自己写xmlhttprequest了

先看看有没有因为jquery ajax 引起的内存泄露吧,如果有的话再考虑是不是要改成自己写的ajax,如果自己写ajax请求还是会有性能问题的话,采取的优化策略应该根据数据的变动频率已经在线用户的多少来变化

#19


百度一下:comet 或者 asp.net的signalR

#20


引用 18 楼 wyumening 的回复:
Quote: 引用 12 楼 vs2007 的回复:

Quote: 引用 11 楼 wyumening 的回复:

你的ajax是如何实现的?是使用jquery ajax吗? jQuery ajax轮询时可能会有资源泄露的问题,你最好先检查下,看看是不是这方面的问题,如果不是的话,再考虑其他优化方法

是的,是用的Jquery 的 ajax,那得自己写xmlhttprequest了

先看看有没有因为jquery ajax 引起的内存泄露吧,如果有的话再考虑是不是要改成自己写的ajax,如果自己写ajax请求还是会有性能问题的话,采取的优化策略应该根据数据的变动频率已经在线用户的多少来变化

确实是内存涨的很快,我现在是自己写的XMLHttpRequest,保证XMLHttpRequest的数量不会无限增长,确实在页面上也用Jquery频繁操作html了,也会占内存,页面上确实要实时显示数据 网页性能问题, 3个js的Timer,Jquery Ajax,2-3百个客户端访问页面很卡

#21