Commit a47cb52bbb7bcdc8c6fa63b81c05a475211a036f
1 parent
206bdff9
1、秒杀加载慢的主要原因是定时器加载慢,吃内存! 另外定义变量timer_js来显示倒计时。接口合并优化获取redis
Showing
2 changed files
with
92 additions
and
44 deletions
pages/activity/seckill_list/seckill_list.js
@@ -17,7 +17,9 @@ Page({ | @@ -17,7 +17,9 @@ Page({ | ||
17 | isshow: 0, | 17 | isshow: 0, |
18 | ad_data: null, | 18 | ad_data: null, |
19 | max_sw_height: 200, | 19 | max_sw_height: 200, |
20 | - is_retail_price:0 | 20 | + is_retail_price:0, |
21 | + | ||
22 | + timer_js:[] | ||
21 | }, | 23 | }, |
22 | 24 | ||
23 | //------初始化加载---------- | 25 | //------初始化加载---------- |
@@ -101,6 +103,7 @@ Page({ | @@ -101,6 +103,7 @@ Page({ | ||
101 | onHide: function () { | 103 | onHide: function () { |
102 | //--清理定时器-- | 104 | //--清理定时器-- |
103 | clearInterval(this.data.timer); | 105 | clearInterval(this.data.timer); |
106 | + this.data.is_timer=0; | ||
104 | this.setData({ | 107 | this.setData({ |
105 | isshow: 0 | 108 | isshow: 0 |
106 | }); | 109 | }); |
@@ -110,9 +113,10 @@ Page({ | @@ -110,9 +113,10 @@ Page({ | ||
110 | return param < 10 ? '0' + param : param; | 113 | return param < 10 ? '0' + param : param; |
111 | }, | 114 | }, |
112 | 115 | ||
113 | - //----倒计时函数----- | 116 | + //----倒计时函数,优化定时器只显示在可视范围内的----- |
114 | countDown() { | 117 | countDown() { |
115 | if (!this.data.is_timer) return false; | 118 | if (!this.data.is_timer) return false; |
119 | + | ||
116 | var th = this; | 120 | var th = this; |
117 | // 获取当前时间,同时得到活动结束时间数组 | 121 | // 获取当前时间,同时得到活动结束时间数组 |
118 | let newTime = ut.gettimestamp(); | 122 | let newTime = ut.gettimestamp(); |
@@ -120,45 +124,78 @@ Page({ | @@ -120,45 +124,78 @@ Page({ | ||
120 | if (endTimeList == null) return null | 124 | if (endTimeList == null) return null |
121 | // 对结束时间进行处理渲染到页面 | 125 | // 对结束时间进行处理渲染到页面 |
122 | for (var i = 0; i < endTimeList.length; i++) { | 126 | for (var i = 0; i < endTimeList.length; i++) { |
127 | + | ||
128 | + if (!this.data.is_timer) break; | ||
129 | + | ||
123 | var o = endTimeList[i]; | 130 | var o = endTimeList[i]; |
124 | if(!o) continue; | 131 | if(!o) continue; |
125 | var endTime = o.end_time; | 132 | var endTime = o.end_time; |
126 | if (th.data.type == 0) endTime = o.start_time; | 133 | if (th.data.type == 0) endTime = o.start_time; |
127 | - let obj = null; | ||
128 | - // 如果活动未结束,对时间进行处理 | ||
129 | - if (endTime - newTime > 0) { | ||
130 | - let time = (endTime - newTime); | ||
131 | - // 获取天、时、分、秒 | ||
132 | - let day = parseInt(time / (60 * 60 * 24)); | ||
133 | - let hou = parseInt(time % (60 * 60 * 24) / 3600); | ||
134 | - let min = parseInt(time % (60 * 60 * 24) % 3600 / 60); | ||
135 | - let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60); | ||
136 | - obj = { | ||
137 | - day: this.timeFormat(day), | ||
138 | - hou: this.timeFormat(hou), | ||
139 | - min: this.timeFormat(min), | ||
140 | - sec: this.timeFormat(sec), | ||
141 | - hide: 1 | ||
142 | - } | ||
143 | - } else { | ||
144 | - //活动已结束,全部设置为'00' | ||
145 | - obj = { | ||
146 | - day: '00', | ||
147 | - hou: '00', | ||
148 | - min: '00', | ||
149 | - sec: '00' | 134 | + |
135 | + // 创建查询对象 | ||
136 | + let query = wx.createSelectorQuery(); | ||
137 | + // 获取目标元素,并获取目标元素的信息 | ||
138 | + query.select("#kill-item"+i).boundingClientRect(); | ||
139 | + // 获取视口,并获取视口信息 | ||
140 | + query.selectViewport().boundingClientRect(); | ||
141 | + //-- 执行查询,元素要在显示中的才显示定时器 -- | ||
142 | + query.exec(([target, view]) => { | ||
143 | + | ||
144 | + if (!th.data.is_timer) return; | ||
145 | + if (!target) return; | ||
146 | + if (!target.id) return; | ||
147 | + | ||
148 | + let idx= target.id.replace('kill-item',''); | ||
149 | + // 条件1:当目标顶部距离视口顶部距离小于视口的高度时 | ||
150 | + // 条件2:当目标底部距离视口顶部距离大于0时 | ||
151 | + // 当以上两个条件同时成立时,目标元素在视口中 | ||
152 | + if (target.top < view.height && target.bottom > 0) { | ||
153 | + let obj = null; | ||
154 | + // 如果活动未结束,对时间进行处理 | ||
155 | + if (endTime - newTime > 0) { | ||
156 | + let time = (endTime - newTime); | ||
157 | + // 获取天、时、分、秒 | ||
158 | + let day = parseInt(time / (60 * 60 * 24)); | ||
159 | + let hou = parseInt(time % (60 * 60 * 24) / 3600); | ||
160 | + let min = parseInt(time % (60 * 60 * 24) % 3600 / 60); | ||
161 | + let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60); | ||
162 | + obj = { | ||
163 | + day: this.timeFormat(day), | ||
164 | + hou: this.timeFormat(hou), | ||
165 | + min: this.timeFormat(min), | ||
166 | + sec: this.timeFormat(sec), | ||
167 | + hide: 1 | ||
168 | + } | ||
169 | + } else { | ||
170 | + //活动已结束,全部设置为'00' | ||
171 | + obj = { | ||
172 | + day: '00', | ||
173 | + hou: '00', | ||
174 | + min: '00', | ||
175 | + sec: '00' | ||
176 | + } | ||
177 | + } | ||
178 | + var txt = "timer_js[" + idx + "]"; | ||
179 | + th.setData({ | ||
180 | + [txt]: obj | ||
181 | + }); | ||
182 | + } else { | ||
183 | + console.log("隐藏中"); | ||
150 | } | 184 | } |
151 | - } | ||
152 | - var txt = "goodlist[" + i + "].djs"; | ||
153 | - th.setData({ | ||
154 | - [txt]: obj | ||
155 | }); | 185 | }); |
186 | + | ||
187 | + | ||
188 | + | ||
156 | } | 189 | } |
157 | }, | 190 | }, |
158 | 191 | ||
159 | async requestSalelist() { | 192 | async requestSalelist() { |
160 | //--没有更多就不调用-- | 193 | //--没有更多就不调用-- |
161 | if (!this.data.ismore) return false; | 194 | if (!this.data.ismore) return false; |
195 | + if(this.data.lding) return false; | ||
196 | + this.data.lding=1; | ||
197 | + | ||
198 | + | ||
162 | var e = this, | 199 | var e = this, |
163 | th = e, | 200 | th = e, |
164 | i = "/api/ms/flash_sale/spikepage?page=" + e.data.currentPage; | 201 | i = "/api/ms/flash_sale/spikepage?page=" + e.data.currentPage; |
@@ -223,6 +260,7 @@ Page({ | @@ -223,6 +260,7 @@ Page({ | ||
223 | getApp().showWarning("没有更多数据"); | 260 | getApp().showWarning("没有更多数据"); |
224 | } | 261 | } |
225 | 262 | ||
263 | + this.data.lding=0; | ||
226 | return false; | 264 | return false; |
227 | } | 265 | } |
228 | 266 | ||
@@ -239,14 +277,22 @@ Page({ | @@ -239,14 +277,22 @@ Page({ | ||
239 | plist[i].price_n = price | 277 | plist[i].price_n = price |
240 | } | 278 | } |
241 | var prom_id = plist[i].id; | 279 | var prom_id = plist[i].id; |
242 | - await getApp().request.promiseGet("/api/weshop/activitylist/getActLen/" + | ||
243 | - os.stoid + "/1/" + prom_id, {} | ||
244 | - ).then(res => { | ||
245 | - if (res.data.code == 0) { | ||
246 | - plist[i].status = 1; | ||
247 | - if (res.data.data <= 0) plist[i].status = 3; | ||
248 | - } | ||
249 | - }) | 280 | + |
281 | + // await getApp().request.promiseGet("/api/weshop/activitylist/getActLen/" + | ||
282 | + // os.stoid + "/1/" + prom_id, {} | ||
283 | + // ).then(res => { | ||
284 | + // if (res.data.code == 0) { | ||
285 | + // plist[i].status = 1; | ||
286 | + // if (res.data.data <= 0) plist[i].status = 3; | ||
287 | + // } | ||
288 | + // }) | ||
289 | + | ||
290 | + plist[i].status = 1; | ||
291 | + if (plist[i].actLen <= 0) { | ||
292 | + plist[i].status = 3; | ||
293 | + } | ||
294 | + | ||
295 | + | ||
250 | alllist.push(plist[i]); | 296 | alllist.push(plist[i]); |
251 | } | 297 | } |
252 | e.data.currentPage++; | 298 | e.data.currentPage++; |
@@ -258,7 +304,9 @@ Page({ | @@ -258,7 +304,9 @@ Page({ | ||
258 | 304 | ||
259 | setTimeout(()=>{ | 305 | setTimeout(()=>{ |
260 | wx.hideLoading(); | 306 | wx.hideLoading(); |
261 | - },500) | 307 | + },200) |
308 | + | ||
309 | + this.data.lding=0; | ||
262 | 310 | ||
263 | 311 | ||
264 | 312 |
pages/activity/seckill_list/seckill_list.wxml
@@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
32 | 32 | ||
33 | 33 | ||
34 | <view class="kill-list abs seckill_list"> | 34 | <view class="kill-list abs seckill_list"> |
35 | - <view class="kill-item" wx:for="{{goodlist}}" wx:if="{{item.djs.hide}}" > | 35 | + <view id="kill-item{{index}}" class="kill-item" wx:for="{{goodlist}}" > |
36 | <!-- <navigator class="kill-pic rel" url="/pages/goods/goodsInfo/goodsInfo?goods_id={{item.goods_id}}&prom_id={{item.id}}&prom_type=1"> --> | 36 | <!-- <navigator class="kill-pic rel" url="/pages/goods/goodsInfo/goodsInfo?goods_id={{item.goods_id}}&prom_id={{item.id}}&prom_type=1"> --> |
37 | <navigator url="{{item.goods_type == 0 ? ('/pages/goods/goodsInfo/goodsInfo?goods_id=' + item.goods_id + '&prom_type=1&prom_id=' + item.id):('/packageA/pages/goodsInfo/goodsInfo?goods_id=' + item.goods_id + '&prom_type=1&prom_id=' + item.id )}}" class="kill-pic rel"> | 37 | <navigator url="{{item.goods_type == 0 ? ('/pages/goods/goodsInfo/goodsInfo?goods_id=' + item.goods_id + '&prom_type=1&prom_id=' + item.id):('/packageA/pages/goodsInfo/goodsInfo?goods_id=' + item.goods_id + '&prom_type=1&prom_id=' + item.id )}}" class="kill-pic rel"> |
38 | <image class="abs xc-miaosha" src="{{url}}/miniapp/images/zms.png"></image> | 38 | <image class="abs xc-miaosha" src="{{url}}/miniapp/images/zms.png"></image> |
@@ -59,12 +59,12 @@ | @@ -59,12 +59,12 @@ | ||
59 | 59 | ||
60 | <view class="goods-num"> | 60 | <view class="goods-num"> |
61 | <view> | 61 | <view> |
62 | - <view class="{{type==1?'xc-wc':'blue_c'}}"> | 62 | + <view wx:if="{{timer_js[index].hide}}" class="{{type==1?'xc-wc':'blue_c'}}"> |
63 | <text>剩余:</text> | 63 | <text>剩余:</text> |
64 | - <text class='tui-conutdown-box'> {{item.djs.day}}</text>天 | ||
65 | - <text class='tui-conutdown-box'>{{item.djs.hou}}</text>时 | ||
66 | - <text class='tui-conutdown-box'>{{item.djs.min}}</text>分 | ||
67 | - <text class='tui-conutdown-box tui-countdown-bg'>{{item.djs.sec}}</text>秒 | 64 | + <text class='tui-conutdown-box'> {{timer_js[index].day}}</text>天 |
65 | + <text class='tui-conutdown-box'>{{timer_js[index].hou}}</text>时 | ||
66 | + <text class='tui-conutdown-box'>{{timer_js[index].min}}</text>分 | ||
67 | + <text class='tui-conutdown-box tui-countdown-bg'>{{timer_js[index].sec}}</text>秒 | ||
68 | </view> | 68 | </view> |
69 | <view class="fs40 flex xc-buttom-money {{type==1?'xc-wc':'blue_c'}}" > | 69 | <view class="fs40 flex xc-buttom-money {{type==1?'xc-wc':'blue_c'}}" > |
70 | <view class="fs28" style="line-height: 16px;">¥</view> | 70 | <view class="fs28" style="line-height: 16px;">¥</view> |