Не существует общедоступной базы данных о производительности по функциям и устройствам, а также автоматического способа включения и выключения потенциально медленных функций. Вам придется решить для себя, какие функции, по вашему мнению, работают медленно на каких устройствах, и отключить их, например
body.transitions-are-slow * {
transition-property: none !important;
}
Затем организуйте размещение класса transitions-are-slow
на корпусе на основе какого-либо прослушивания устройства и эмпирических знаний о производительности этого устройства.
Это для CSS, но вы также упоминаете JS. Однако я не могу вспомнить случаи, когда какой-то конкретный JS API особенно медленно работает на каком-то конкретном устройстве. JS будет равномерно замедляться на более медленных устройствах. Поэтому я действительно не понимаю, почему или как вы хотели бы думать об отключении отдельных функций JS из-за проблем с производительностью устройства.
Существуют ли лучшие методы, чем блоки выполнения кода с метками времени?
Не существует очевидного способа поставить временную метку производительности CSS, но для JS, я полагаю, вы могли бы сделать следующее, используя с осторожностью:
function kill_if_slower_than(fn, threshold) {
var killed = false;
return function() {
if (killed) return;
var start = performance.now();
var result = fn.apply(this, arguments);
killed = performance.now() - start > threshold;
return result;
};
}
Это вернет функцию, которая превратится в неактивную в первый раз, когда ее выполнение займет больше threshold
миллисекунд. Вы, очевидно, не хотите использовать это ни для чего другого, кроме как для чего-то чисто необязательного. Это также не поможет вам в асинхронных ситуациях.
Я использовал performance.now
выше из-за его более высокого разрешения, однако в некоторых старых браузерах вам может понадобиться вернуться к Date.now()
.
person
Community
schedule
02.05.2015