AJAX同步
用JQ發(fā)起AJAX異步請求的時候遇到一個坑。
使用場景是這樣的:
在輸入框中輸入評論信息,單擊發(fā)送按鈕,觸發(fā)post()方法
post()函數(shù)里面發(fā)起AJAX請求,用post方法請求'/comment',將請求攜帶的數(shù)據(jù)插入數(shù)據(jù)庫
接著,用getJSON()方法獲取數(shù)據(jù)庫數(shù)據(jù)
邏輯看起來沒有問題,但是存在一個異步的情況,插入數(shù)據(jù)庫的操作會調(diào)用IO,比較費時,因此導致getJSON()總是先于AJAX獲得響應。
導致的問題是,頁面無法實時更新插入的消息。
解決方案是在發(fā)送AJAX請求之前,設置AJAX請求為同步請求,執(zhí)行語句如下:
$.ajaxSettings.async = false;
頁面元素替換
還是上面AJAX局部更新的案例。
在做之前,我思考了一下如何替換頁面元素。
得到三種解決方案,分別是:
先把id為comment-container的元素中的,每一個id為comment-item的元素逐條刪掉,再把從數(shù)據(jù)庫遍歷出來的元素逐條插入
先把所有id為comment-item元素用一個id為comment-list-wrapper包起來,每次更新的時候直接把comment-list-wrapper整個替換掉
僅僅是把剛剛插入的記錄搜索出來,追加到第一個id為comment-item元素的前面
結果證明,第二種解決方案是最優(yōu)的,原因如下:
第一種是最直接的想法,不過在刪除和插入的時間間隙會閃一下
第二種比第一種多包裝了一層,看起來是多此一舉,實際上可以減少元素更新的操作次數(shù),從而提升體驗
第三種是性能最優(yōu)的選擇,不過查詢數(shù)據(jù)庫時并不能準確地拿到剛才插入的那一條數(shù)據(jù)。搜索字段是什么呢?在高并發(fā)情況下,元素搜索不準確,是不可行的做法
耦合
高質(zhì)量的代碼是高內(nèi)聚、低耦合的。
為了寫出高質(zhì)量的代碼,減少程序中的錯誤,提高可維護性,得到以下心得:
在編程時盡可能使用軟編碼代替硬編碼
-
在寫代碼之前應充分考慮到編碼需要用到的變量。
比如,在寫代碼的過程中,我需要為數(shù)據(jù)庫或者類添加一個新字段,那么我就可能需要重新回過頭去賦值,這很容易漏掉一些屬性的設置
合理使用框架、組件和插件。這些工具對一些地方進行了封裝,可有效減少耦合,提高開發(fā)效率