2013-06-22 3 views
0

Я пытаюсь оптимизировать свой JavaScript-код для скорости.Что быстрее: document.location.pathname или myOwnObj.pathname?

У меня есть определенные атрибуты объекта document, который мне необходим для доступа часто, например document.location.pathname или, что еще хуже, document.documentElement.innerText.

Что бы быстрее:

  1. Чтобы получить доступ к этим атрибуты из document каждый раз, или

  2. Чтобы сохранить их в качестве атрибутов одного из моих собственных объектов, так что я могу получить доступ к ним, как myObj.pathname и myObj.innerText?

+3

Не имеет значения. Действительно, попробуйте. Создайте микро-бенчмарк (например, http://jsperf.com), чтобы удовлетворить любопытство. Затем осознайте, что это просто не имеет значения в реалистическом контексте. – user2246674

+0

Я не уверен, как это сделать. Кроме того, я чувствую, что это особенно важно в случае 'document.documentElement.innerText', потому что интуитивный доступ к DOM и удаление этих тегов должны занимать больше времени, чем просто доступ к строке из объекта. – LonelyWebCrawler

+0

Компьютеры * быстро * и встроенные JavaScript/DOM-реализации * высоко оптимизированы *. Опять же, чтобы решить ваше собственное любопытство, создайте свои собственные тесты - если есть вопросы о том, почему * контрольный показатель дает «неожиданные результаты», то это подходящий вопрос SO; это не так, как нет проблем. Это действительно не имеет значения ни в какой реалистической программе. – user2246674

ответ

2

Test it.

Хотя есть некоторые различия между браузерами, кэширование ваших объектов делает на поиск быстрее.

«Быстрее» по сравнению с доступом к объекту объекта дважды вместо одного раза. I действительно сомневаюсь, что это узкое место в вашем приложении. В любом случае, профилируйте его, прежде чем пытаться оптимизировать крошечные вещи, подобные этому.

+0

Вы правы, может быть, я ищу в неправильных местах для оптимизации. Однако с 'innerText' существуют некоторые [огромные различия в производительности] (http://jsperf.com/property-access-10/2). – LonelyWebCrawler

+0

Извините, мне было слишком лениво менять имена переменных. Я тестировал 'document.documentElement.innerText' кэшированный или без кэша. Попробуйте просмотреть его сейчас. – LonelyWebCrawler

+0

@LonelyWebCrawler: Ну, как только вы его кешируете, вы сравниваете время, необходимое для получения 'innerText' произвольного элемента с тем временем, которое требуется для поиска переменной в текущей области. Ваш вопрос касался 'document.documentElement.innerText' vs' cachedDocumentElement.innerText'. – Blender