1.首先要讀取文本,第一想到的就是Ajax。它可以很好的動態的向服務器發起請求。通過XmlHttpRequest 使您可以使用 JavaScript 向服務器提出請求並處理響應,而不阻塞用戶。所以首先要建立一個Apache服務器(我這裏使用的是wamp).(注:要看效果請訪問本地服務器:如http://localhost/read_txt.html,啓動瀏覽器控制檯:按F12)
這裏文本只取了18.3K。。。
2.接下來,就要封裝了一個Ajax函數(也可以使用jQuery,這裏使用js);
步奏:1.創建Ajax對象 2連接到服務器 3.發送請求 4接受返回值,根據監聽其狀態(成功或失敗)響應返回。代碼如下:
3.最後調用Ajax讀取文檔(a.txt)
,用javascript的split()方法進行分割,並通過正則表達式進行符號的替換
下面是部分主要代碼
var strArr=str.split(" "); //字符串分割
var reg=/,|\.|\?|!|:|;|\r/g;//正則
str=strArr[i].replace(reg,'').toLowerCase(); //正則匹配並轉爲小寫
result.push(str); //放進result數組
構造鍵值對:
存放並排序單詞:
構造對象存儲單詞與次數
最後打印出即可
結果
性能分析:
對上圖的解釋:
對上面的時間線記錄的數據來看,消耗瀏覽器資源最多的就是 解析HTML(parse HTML)和函數調用(function call).並且渲染HTML樣式所用的時間是加載HTML代碼的4倍左右!而其子函數的調用所用的時間是主函數的3倍多!
關於性能優化的思考:
對以上問題 1.考慮到由於是測試,所以Javascript代碼,採用的是內聯樣式,不利於佈局和解析(應該像Ajax函數一樣,封裝起來,並在外部引用)。
2.由於瀏覽器是單線程、且是事件驅動的,所以採用異步編程(或者說非阻塞式編程),將會大大減少對瀏覽器的負擔(詳情,見我的另一篇 blog : javascript異步加載方式方法與思考)
改進:單詞過濾
加上了一個數組:var f=["the","is","to","a","of","this","in","and","for"];來存放要過濾的單詞,push進數組的時候再做一個判斷,但發現,前10還是不是重要單詞,介詞什麼的太多了!
總結:通過本次試驗,我熟悉瞭如何使用Ajax異步加載txt文檔,並提取裏面的內容,使用javascript進行劃分,並打印出頻率最高的前十個,讓我再次熟悉了javascript的語法和是使用,瞭解了它的多用性。對瀏覽器解析代碼的過程和方式有了更深的瞭解,對性能優化有了更好的見解。
代碼下載:代碼