Mikhail
Лёва 🎃
Красиво летит, надеюсь скоро полностью перекачу основу приложения на эффектор
Дима
Лёва 🎃
Mikhail
я хотел смаунтить 2к элементов, каждый из которых будет ждать изменение стейта
Дима
мы реакт тестируем?
Mikhail
а тут только App получает изменения и рендерит эти спаны
Mikhail
ну в данном примере как раз и получилось тестирование реакта
Kostya
ну к примеру умя десять жкшенов и они используют одну и туже функцию
Лёва 🎃
Лёва 🎃
И импортируй оттуда куда надо
Mikhail
пофиг, я спать, может завтра поиграюсь
Mikhail
Дима
Andrei
@Wizzardo go to sleep дудь
Дима
этот компонент подписан на стор state
Mikhail
если просто выполнить 10к обновлений, то реакт большую часть просто проигнорирует, не?
Kostya
прикол в том что умя экшены так вычисляются
Kostya
export class App extends Component{
constructor({state}){
this.state = props.state
}
render(){
let actions = {};
for(let [key, action] of Object.entries(this.props.actions)){
actions[key] = (...args) =>{
Promise.resolve(action(...args))
.then(result => this.setState(result))
}
}
return(
<Provider value = {{actions, state : this.state}}>
{this.props.children}
</Provider>
)
}
}
Andrei
омг
Дима
как видим, 10к апдейтов реакта не бесплатны
Дима
они занимают 300мс
Дима
скинь пожалуйста код куда-нибудь, чтобы можно было потыкать
https://effector.now.sh/try?version=master&code=JYWwDg9gTgLgBFApgQwMbwGZQiOByJNGPAKFEljgCUV0ARAeQFk4sd9D0BaAEx1PLR4Ab1SEYiAKIYMidABo4YlBIDKMaIkUBnZOAA2iAL6tsuPIhlyNUAeCFxR4xAGEckAHaIPME23OWsujQXJzEJCSoEB7a8CAo2gCuSHAAvErO0kEwABR4fHDaOIhwAO7QANZ4isIkcHAAFsgePIZQOQCUjnX1StGxcACCTAwAqgByACppcABMAAyL8z31UTHwsciU6WCIUBjQIM2oiAB0HhClnSus0HA5hvDAM3DzANxwzwA8QyMTkx9gABqIFdPgAdUqOWAHRuawG3h4M12+0OxzOFyusJuSBgyQ8cAABogAB5yRISJEAEmEwzGUxMgWs2k+BJpiK4m1gJhA2kJPSM8hIRlh8PgEMqM2UyAkWWseQKRXiZUq1W69SaLTaAC57iSuqkAHxwElwIFwACMQpFETFKqgFSlznUmhy81h9VO0RyEodpz4XkUORJ8h4MuQBuNJKBYZgyFOSCS+hgov6GzjeJZ6WlahsiDyEgGF3TW0peFhAEgvR4cvFkEkkP7olp7psJPJhInEsmRWljV3k6n1oUMyV0roDPmeuUHToM4ltEGZxU5zKF5H7sJl6vMzahwNBmAwE6VK53M2fDkem2WzkwNgwIvHNuR2vtL2jXAvoabm2F7rhD-d8bi+AAjKAAHof16L9QIpDQCWiFx9GAVAKlSYQ6wbYxDS5eBCxgL4ILgmAEOg3paSgKBkAAT1OfwcmEQwPAAcxgBpdWXCCLSWRZBXuAB9eQYSNL5tDAZo4AqRAaIw4AjENYR5KI8TmkNDojBAsBDQ0ON9EKCSYgArieN4gAfeYjCI7SeiIn9sTtPhcHSPhUESeIfFOHMpEMDzcnyYAADdyxIVz3O8GBTlAiAeDo5Aj0RFwGmAfQeB9HBYRoIhGCYBNET2HIvkPMAoMUJzsSAA
Mikhail
@ZeroBias я завернул doWork(i) в setTimeout и теперь все жестоко тормозит даже на 1к эвентов
Mikhail
что я делаю не так?
Дима
забыл измерить время создания сотен спанов реактом
Дима
о чём я и говорил с самого начала, не нужно мерять 100500 дивов, это работа реакта
German
почему при срабатывании не меняется значение?
Дима
время выполнения операций эффектором на этом скрине
Дима
время донесения апдейтов до реакта — на этом
Дима
всё остальное не по адресу
Mikhail
Дима
код)
Mikhail
*150 спанов там
Mikhail
я не уверен, что время считается правильно, но оно все равно почему-то тормозит
Дима
Дима
потому что 1000 апдейтов реакта это не бесплатно, о чём я пытаюсь донести с самого начала
Дима
Дима
найди 1 отличие)
Mikhail
Дима
Дима
ты не можешь игнорировать тот факт, что замена setTimeout на requestAnimationFrame снижает время выполнения до пределов погрешности
Дима
я даже больше скажу
Дима
выполнение тысячи эффектов батчится в один рендер, потому что эффектор в состоянии управлять этим автоматически
Mikhail
Mikhail
let v = 0
let start = performance.now()
for(let i=0;i<1000;i++){
setTimeout(()=>v=i, 0)
}
let end = performance.now()
console.log('measure:', (end-start))
это занимает пару мс
Mikhail
в чем разница с requestAnimationFrame?
Дима
Mikhail
именно, почему там так долго
Mikhail
запусти код, что я скинул в консоли
Mikhail
~15ms
Дима
это очень интересная история, я рад, что ты задался вопросом о разнице производительности двух методов браузера, надеюсь на этом вопрос быстродействия самого эффектора исчерпан
Mikhail
>_<
Дима
Дима
https://effector.now.sh/try?version=master&code=MYewdgzgLgBAJiA6iATgawCIFcC2AjGAXhgAowBKIgPhjAFMB3GABRRBwEsI6SUJqYAbz5lyAX3IAoUJFgBBALIB5AKoA5ACpEYARgAMB6eGgxoAQxSxiABzooAZqhxmwwOgDowIBiSmOUpAA2dLAc2jB6ANwwYQA8MIqqmtEcANSplIKSMDDBsGiEHJHZpiEaHDh0IFhQJL6EVAjI6Nj4JGjkADQRUmJGsjB0YHDatg5OLm6e3r6S-RAgwe6BIADmJAAGdAAedMA1dCMAJIKJ6hpig-b2e1D8HGAwJ0NwALTmlpc4EBvkQA
Дима
Mikhail
Request animation frame тут выполняется не асинхронно, этот вызов бесполезен
Дима
неасинхронный raf ето конечно сильно 🌚
Дима
https://effector.now.sh/try?version=master&code=FAYw9gdgzgLgBAEzAdTAJwNYBECuBbAIzgF44AKCAShID44BvYOOASwDNyBCEAQwBs+AUwTVGzZuGhghAOj5gA5mRZQAygE8IIOAH44AckCCIIA4QQLwggURBAAiCA+EFOnr+uAC4DgBhATFm3YeUm43gLCJHAwaDiCfgC+fmiCMDhoEHAQggDucAAKaGB4KoJkaFC0DIUUlJG+0ZKwcACCALIA8gCqAHIAKsEAjAAMfcBC8AFCCMFs-FARg6xqmtqkoeHAoJA1sDxo8KQADoJobOh4PFqCMhBgqWS+B2jk0yzBcD0A3KxwADx1TW3trywA1P9RH5phhiCxnjFBABHcKwWoQFhHGAsSAAMTQPDw+SuxBo9CQqEwuEIZAw5UqK2g8EEEFGOz2NyOJzOFyuy2q0lO8iUAANBAAPQQgHAwIIAEnoDRaHUicEEbDYwpgRRYSUltIQAFp1ps5XgoLzfCoNFoxhNBEA
Павел
Утро доброе, запостите кто нить вопрос, чтоб не скучно было до работы ехать
Павел
За ссылку спасибо, наушники в куртке забыл, 😀
🦜
Руслан
Всем привет!
Подскажите как правильно сделать пагинацию.
Простая пагинация - вывожу список страниц, но для мобильной версии это не подходит, нужно делать что-то вроде этого, выводить первые и последние страницы.
1,2, ... 14,15
причем если пользователь нажмет на 2
то пагинация должна сместиться в таком направлении
2,3, ... 14,15
и так далее.
Как правильно это сделать?
Выводить только первые и последние элементы из списка?
Sergey
Tutu
Всем привет) как кешировать наши spa?
Tutu
что бы не происходила скачка если скрипт уже загружался
Oleg
Tutu
Да вроде при каждом редиректе. У меня в network показывают скачивание
Vadym
А вообще, это скорее к беку вопрос, чтобы они кешировали данные
Daniil
В редакс скрипт ?