Показать сообщение отдельно
  #27 (permalink)  
Старый 24.12.2010, 09:46
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от with-love-from-siberia
Статья, описывающая приведенный код, уже существует
Наверное, на dklab.ru? Я через неё и нашёл скрипт. Проблема такая: функции, скорость которых надо измерять, находятся внутри конструкции (function (){})(). И benchmark не работает, говорит: "1 is not function" или что-то в этом роде (точная цитата - в обещанной статье http://ir2.ru/benchmark.aspx).

Но это полбеды. Гораздо хуже - отсутствие у функций свойства name в ИЕ. Я нашёл только такой способ обойти её:

Функцию makeThead() с параметром t вызывать так:
fixTime(window, "makeThead", t)

А сама функция fixTime будет примерно такой:

function fixTime() {
    var d1, d0 = new Date(), ret, i, 
        obj = arguments[0], f = arguments[1],
        args = Array.prototype.slice.call(arguments, 2)
    obj = obj || window
    if (!(f in obj) || typeof obj[f] !== 'function') return
    ret = obj[f].apply(this, args)
    d1 = new Date()
    Log(d1 – d0, f)
    return ret
}
Ответить с цитированием