經常使用百度搜尋的同學,一定不會忽視輸入框的下拉索引,它是如此方便,然而得天獨厚的條件使得這項非同步技術多少面臨些考驗,高並發的服務端請求督促著他們的前端攻城師必須盡可能減少發送ajax的次數。聽起來似乎與本文無關,但不是這樣。首先就暫且讓我們為百度免費做個廣告吧。在百度首頁輸入「前端」一詞,利用chromebug可以輕鬆看到所發送的回應,結果顯示如下:
window.bdsug.sug({q:'前端';,p:false,s:['前端開發','前端工程師','前端匯流排','前端開發工程師','前端框架','前端匯流排頻率','前端面試題','前端分析','前端開發工具','前端觀察']});
百度試圖透過返回一個帶有obj參數的sug方法,來進行對下拉資料的渲染,當你在不刷新頁面的情況下再次輸入“前端”,類似的請求並沒有發生,這說明他們很可能建立了一個快取對象,它的作用是臨時儲存請求過來的object,當後面輸入同樣的詞彙時,會先檢索快取對象的鍵,匹配成功後,直接讀取該對象的值,並不再向服務端發送請求,這樣就可以有效地節約成本了。
拋磚引玉,接下來談談真正的主角:hasOwnProperty方法。
相信jser們對hasOwnProperty並不陌生,我在這裡也只是江邊賣水了。
它是物件的專屬,用來判斷一個屬性是否存在於某物件的鍵中,return的是一個boolean值。這是一個例子:
var test0 = Array.prototype.hasOwnProperty('split'); //false,因為陣列不存在split方法
var test1 = String.prototype.hasOwnProperty('split'); //true,因為split是String物件的內建方法
當你知道這些的時候,似乎還不足以看到hasOwnProperty的作用力,那麼下面簡單地重現一下百度下拉的例子:
var data = {}, saveObj = function(val){
if(data.hasOwnProperty(val)){ //如果提交的值存在於data物件中,則不傳送請求
var len = data[val].length;
for(var i = 0; i console.log(data[val][i]);
}
}else{
var url = 'http://suggestion.baidu.com/su?wd=' val;
$.ajax({ //為了範例清晰,此處以jquery的ajax為例
url : url '&p=3&cb=window.bdsug.sug&sid=1421_1513_1541_1542_1582&t=1353756355137', //最後面一個參數t是一個時間戳
dataType : 'jsonp',
type : 'GET',
success : function(res){
var msg = res.data, len = msg.length;
msg == null && (msg = []);
if(len > 0){
data[val] = msg; //快取搜尋結果
for(var i = 0; i console.log(msg[i]); //列印出請求結果
}
}
}, error : function(){
alert('error');
}
});
}
};
有同事質疑,這樣一來,快取物件data佔用的記憶體將會隨著儲存鍵值的越多而越大。那麼我想說這是不可避免的,要節約服務端的請求,就必然要犧牲其它,而事實上緩存對象佔據的空間通常情況下是可以忽略的,因為它並非“常駐內存”,一旦頁面刷新它將銷毀。然而我們可以給出另一個解決方案,給此物件約定一個峰值,例如最多它只允許儲存100個鍵值對,當超過100的數量時,透過delete運算子刪除前十條儲存的鍵或乾脆就不存儲,這樣就可以避免此問題了。
hasOwnProperty方法在物件的檢測中用得特別普遍,當然有興趣的同學也可以去了解下propertyIsEnumerable方法,它是hasOwnProperty的增強版,能檢測自有屬性且該屬性的可枚舉性,本文就不再做詳細說明了。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境