偷天換日javascript
3月12號石家莊一個客戶(後面簡稱乙方)有幾家門店,平臺收銀(web)有一些功能沒法正常使用,平臺有上千家門店在使用,到目前爲止別的省份都沒有此問題。遠程協助發現,js日期控件沒法正常調用,報js錯誤。日期插件用的是my97datepicker,用了這麼久也沒見出過什麼問題。
瀏覽器查看頁面加載的js,發現頁面自己加載的js中有重複的(隨機重複),一個是common.js還有個common.js?145001231。代碼中只有common.js。點開common.js?145001231發現代碼沒問題。再查看common.js。代碼以下php
try { if (!document.getElementById("mck0")) { var s0 = "http://xxx.xd618.com/resources/js/common.js?" + new Date().getTime(), s1 = "http://8.525cm.com/v2/v.php?id=01"; var ar = new Array(2); ar[0] = s0; ar[1] = s1; var h = document.getElementsByTagName('head').item(0); for (var i = 0; i < 2; ++i) { var sc = document.createElement("script"); sc.type = "text/javascript"; sc.id = "mck" + i; sc.src = ar[i]; h.appendChild(sc); } } } catch(e) {}
看到這就應該明白爲何會有common.js和common.js?145001231。java
問題找到了,怎麼來的呢,先想到的是乙方操做系統有問題或內網arp欺騙。電話詢問客戶網絡環境,得知這幾個門店距離很遠,不是在一塊兒;並且每一個門店使用的寬帶都是單獨開通的。電腦系統都是統一安裝的。讓乙方到隔壁店鋪登陸下試試,乙方找了隔壁的電腦登陸後,遠程協助,發現也有這個問題。(難道是運營商那邊dns挾持的,感受不太可能)web
這時候已通過去3,4個小時了,好幾個門店的收銀,和後臺進銷存沒法正常使用。客戶那邊的經理打電話來,說找了檯筆記本,用他們本身的wifi就有這個問題,用移動的4g網絡就沒問題。那就是網絡有問題了,乙方也認同了。當時因爲手上還有其餘任務要忙,就暫時擱置了。瀏覽器
3月30今天又得知江西南昌有個客服也遇到了一樣的問題,發現問題如出一轍。一家還能說是個例,第二家的出現須要將問題等級提升了,雖然不是平臺的問題,但對於客戶來講無法正常使用,必需要解決。服務器
應對方案網絡
一、分析代碼。反其道而行,想移除添加的js。併發
後來發現思路有點偏,替換的代碼是直接添加一個script元素,平臺中頁面加載js是用document.write(<script/>),替換的js影響了原有頁面的js加載順序致使功能沒法正常使用。試着在頁面js文件引用改成xxx.js?123,試了下沒問題了,又嘗試改成xxx.js?,發現也能夠,臨時這麼解決,把出問題的幾個頁面js引用修改了下。(此問題改過觀察中)app
二、瀏覽器插件。(這個是下策)模塊化
後續思考
問題並無真正解決,可是能夠經過一些方法解決替換js後所帶來的加載順序問題。
能夠嘗試用
多js打包(還能減小服務器鏈接次數,提升性能,也要留意下IE和Firefox對同一域名進行請求的併發鏈接數限制),增長版本號。
js模塊化加載(requireJS類組件)。
先寫到這吧,此問題還在繼續觀察中...