Ticket #68 (new defect)

Opened 14 years ago

Last modified 14 years ago

关于搜索页热卖商品的接口和缓存问题

Reported by: liaojunqiang Owned by:
Priority: trivial Milestone:
Component: 网友前台 Version:
Keywords: 接口 resin缓存 Cc:
Due Date: 28/12/2011

Description (last modified by liaojunqiang) (diff)

1.问题
需求报障,it商城搜索页右边热卖商品样式错乱,浏览器显示js报错
2.调查
经过fireox的firebug js调试工具查看所得,原因是

//循环N次生成随机数
for(var i = 0 ; ; i++){
  // 只生成8个0~19的随机数
  if(array.length<8){
        generateRandom(19);
  }else{
    break;
  }
}

这个写法在热卖商品数量大于20时没有问题,所以一直没有报错,但是今日热卖商品只有11个,导致热卖商品的js数组下标越界,所以显示不出来,从而样式变形。
3.需要注意的地方
这种写法有个问题就是不能保证会不会数组越标,以后遇到这样的问题要注意,不能单纯填个数字上去,一定要多多考虑各种情况。
4.解决
修改代码,程序需要的结果是要随机热卖商品,所以我选择直接随机热卖商品的数组,代码如下:

var rand1 = 0;
var rand2 = 0;
var size = ${hotSellProductSize>0?hotSellProductSize:0};
for(var i = 0; i < size; i++){
	rand1 = parseInt(Math.random() * size);
	rand2 = parseInt(Math.random() * size);
	var temp = hotSellArray[rand1];
	hotSellArray[rand1] = hotSellArray[rand2];
	hotSellArray[rand2] = temp;
}

5.意外问题
更新的时候,代码已经更新了,但是页面仍然没有变化,后来问林浩,是resin的url有缓存机制,要重启才可以清掉,这种机制有力有弊,好处就是减轻访问的压力,不好的地方就是更新的时候必须重启,可能会影响用户访问。
6.延伸思考
究竟有木有机制可以令服务器一检测到有文件更新,就立即清掉对应url的resin的缓存,我相信是有的

Change History

comment:1 Changed 14 years ago by liaojunqiang

  • Description modified (diff)

comment:2 Changed 14 years ago by liaojunqiang

  • Description modified (diff)

comment:3 Changed 14 years ago by liaojunqiang

  • Description modified (diff)

comment:4 Changed 14 years ago by chenyinle

我原来的思维是随机抽取n个,其实还可以有其它思维实现这个随机效果,不错

comment:5 Changed 14 years ago by huangjianhua

这代码很熟悉,查看了下,原来是我写的.哈..
当初写的时候考虑不够全面..没考虑到热卖的商品数不够的时候...

comment:6 Changed 14 years ago by liaojunqiang

  • Description modified (diff)

comment:7 Changed 14 years ago by chenchongqi

我觉得大家很老实,为啥呢?在这种场景,没有必要做到“数学”级别的随机,只要用户看起来每次都不一样即可,所以每个循环里做两个随机数其实有点浪费,甚至一个随机数都有点浪费。我提供一个思路,可不可以直接按某个时间规律来排就行了。

comment:8 Changed 14 years ago by chenyinle

是的,时间是不断变化的,可以作为切入点

comment:9 Changed 14 years ago by chenchongqi

javascript里Math.random()的效率大家可以试一下看看吧,我不太确定,按我理解应该是效率不高的。

Note: See TracTickets for help on using tickets.