涉及到的內容:
1.chrome瀏覽器
2.js代碼
3.函數節流
第一步
打開chrome瀏覽器,使用組合鍵Ctrl+shift+i打開開發者工具,接下來如圖所示。
點擊snippets
第二步
如圖所示
點擊new snippet -->輸入腳本‘名稱'-->Ctrl+s保存。
第三步
如圖所示
選擇新創建的腳本‘名稱',在如圖所示的第二步進行編輯js代碼。最后如第三步所示:run 運行代碼。
js腳本代碼
1.以下是網站上的代碼:
<body> <p class="box"> <img class="img" src="image/pict.png" /> <button class="btn" id='btn'>搶購</button> </p> <script type="text/javascript"> /** * 搶購按鈕 * * */ btn.onclick=function(){ console.log('搶購成功!'); }; </script> </body>
每次點擊搶購 控制臺輸出 搶購成功!
2.腳本代碼
/** * 最簡單的腳本代碼 * 版本1.0.1 */ btn.click();//觸發按鈕執行click事件 /** * 使用for循環執行搶購的腳本代碼 * 版本1.0.2 * */ for(var i=0;i<100;i++){ btn.click(); }
通過上邊的腳本js代碼可以知道,我們可以在chrome瀏覽器內置腳本,并控制執行。
當開發人員模擬真實環境的高并發情況,咱們就可以使用這種腳本的方式模擬測試。通過剛剛的腳本我們發現我們開發的頁面中的js是有很多問題的。假設【搶購按鈕】觸發的是請求數據接口。則會出現在一個時間內發出n個請求。處理這個問題可以參考防止重復提交
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>防止ajax重復提交</title> </head> <body> <button id="btn">提交</button> <script> /** * 模擬ajax提交 * @fn 回調函數 * */ function Ajax(fn){ setTimeout(function(){ var data= {result:true,msg:'提交成功!'}; fn(data); },2000); } /** * btn click 提交事件 * * */ btn.onclick=function(){ //檢查 按鈕是否被鎖住,鎖住直接rerun if(btn.getAttribute('lock')){ return; } //上鎖 btn.setAttribute('lock',1); //更改狀態 btn.innerText='提交中...'; //模擬ajax提交 Ajax(function(data){ //請求成功 if(data.result){ console.log('請求成功'); //請求成功解鎖 btn.setAttribute('lock',""); //還原狀態 btn.innerText='提交'; }else{ console.log('請求失敗'); //請求失敗解鎖 btn.setAttribute('lock',""); //還原狀態 btn.innerText='提交'; } }); } </script> </body> </html>
也可以使用函數節流方式處理。如下代碼:
//網站上寫的代碼 /** * 搶購按鈕 * * */ btn.onclick=function(){ throttle(function(){ console.log('搶購成功!'); },500); }; /** * 函數節流 * @fn {function} 回調函數 * @time {number} 時間,毫秒 * * */ function throttle(fn,time){ if(throttle.id){ clearTimeout(throttle.id); }; throttle.id=setTimeout(function(){ fn(); },time||200); }
通過以上方式我們可以過濾掉惡意循環觸發事件。這種函數節流方式也得到大家的一致認可與推廣。
以上內容是JavaScript實現網頁搶購功能的教程,不僅如此,我們還學會了制做簡單的js腳本,也學到一種簡單的阻止js腳本的方,大家趕緊動手操作一下吧。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com