2013-06-22 126 views
0

我想優化我的JavaScript代碼的速度。哪個更快:document.location.pathname或myOwnObj.pathname?

我有我需要經常訪問的document對象的某些屬性,如document.location.pathname或甚至更糟,document.documentElement.innerText

哪個會更快:

  1. document每次訪問這些屬性,或

  2. 將它們存儲作爲我自己的對象之一的屬性,這樣我就可以像訪問它們myObj.pathnamemyObj.innerText

+3

沒關係。真的,試試吧。創建一個微基準(例如http://jsperf.com)來滿足好奇心,然後意識到它在實際情況下並不重要。 – user2246674

+0

我不知道如何。另外,我覺得這很重要,特別是在document.documentElement.innerText的情況下,因爲直接訪問DOM並剝離標籤需要的時間比從對象訪問字符串需要更長的時間。 – LonelyWebCrawler

+0

計算機*速度快*且主流JavaScript/DOM實現*高度優化*。再次,爲了解決你自己的好奇心,創建你自己的基準 - 如果有關於爲什麼*基準產生「意想不到的結果」的問題,那麼這是一個合適的SO問題;這不是沒有問題。在任何現實的計劃中,這並不重要。 – user2246674

回答

2

Test it.

雖然有跨瀏覽器的一些差異,緩存你的對象確實讓查找更快。

「更快」是比較兩次而不是一次訪問對象的屬性。我真的懷疑這是你的應用程序的瓶頸。無論如何,在試圖優化這樣的小事情之前,先對其進行剖析。

+0

你是對的,也許我正在尋找錯誤的地方進行優化。然而,使用'innerText',有一些[巨大的性能差異](http://jsperf.com/property-access-10/2)。 – LonelyWebCrawler

+0

對不起,我懶得改變變量名稱。我正在測試'document.documentElement.innerText'緩存與未緩存。嘗試現在查看它。 – LonelyWebCrawler

+0

@LonelyWebCrawler:好吧,一旦你緩存它,你將比較獲取任意元素的innerText所花費的時間與在當前範圍內查找變量所花費的時間。你的問題是關於'document.documentElement.innerText'和'cachedDocumentElement.innerText'。 – Blender