Mikhail
вот только их количество — это непосредственно то число, которое получилось после 10000 к апдейтов стора
т.е. оно срендерилось один раз, после того как вся работа закончилась?
Kostya
Простые функции за пределы выносишь
хорошо умя контекст состоит из экщенов и состояний но есть как бы общие функции кудв их?
Лёва 🎃
Красиво летит, надеюсь скоро полностью перекачу основу приложения на эффектор
Mikhail
я хотел смаунтить 2к элементов, каждый из которых будет ждать изменение стейта
Дима
мы реакт тестируем?
Mikhail
а тут только App получает изменения и рендерит эти спаны
Mikhail
ну в данном примере как раз и получилось тестирование реакта
Kostya
ну к примеру умя десять жкшенов и они используют одну и туже функцию
Лёва 🎃
И импортируй оттуда куда надо
Mikhail
пофиг, я спать, может завтра поиграюсь
Дима
ну в данном примере как раз и получилось тестирование реакта
я правильно понимаю, что тестирование стейт менеджера — это рендеринг двух тысяч компонентов, а тестирование реакта — это рендеринг компонента, подписанного на стор, меняющегося десять тысяч раз, ничего не перепутал?
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к обновлений, то реакт большую часть просто проигнорирует, не?
а зачем до реакта вообще доводить 10к апдейтов? менеджер состояний обязан учитывать то, кому и сколько обновлений он шлёт
Дима
как видим, 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
https://effector.now.sh/try?version=master&code=JYWwDg9gTgLgBFApgQwMbwGZQiOByJNGPAKBNQgDsBneEFagVyTgF45VCZEBRDDROgAUeACYQ41HIjgB3aAGs8AGjgBvEnDgALZJVEAbRFCEBKdZq0cqtOAEEAsgHkAqgDkAKmzgBGAAwBlloUNPC0yLDeYMYY0CB6qIgAdJQQsmZBcLFQcEJG8MDecH4A3HCFADz2zu4eZcAA1A3mGlZW+XAKrMAlmVrUiDAeoIgQjDBCZqwAfOIA6opCCqaqfqaZAL6ZIbaI+lExcQnJqenrmUgwzJRwAAaIAB6C44iicAAkao6unhtwiPxBDBqOUbp89qIALThWB-EDUW6WDbKEgbdY7eDzRTeTgobh8ATCMQSKT0OSKFQWLS6fRGKAALlyD3MMzgDzgDV8KLRZAx5KgChxXEQAGUYNBEEI1pYklQhFiBUlxJREKohA9lKJkDBkCzpmyGlqdUkkEwDDB0TYwjqriD2LjtaLxUgRNxbKlrRFuKI8OsAJCyyhCejIJhIJVUVW5cLcZRqU2Mc1otj6hPmy2hSQ2mTsajIcBGISWeQC1QxxjUNUlhRlm0VvW5NTV2vais8jO2OxgMBCvGIADCOEgKsoE0sMajQjA2DAlfUzazreoydZFWmmXL1EZak3WzaFQARlAAPTr-cH8bim5UfsGYCoLpqENhxAbaYw+BumAVY8XmBXs8rC+KAoGQABPJIsBwIQ1CMSgAHMYG0Rlq2PfwAj8ZFcgAfWUYBTBmCpqDAPROkQMDWDUYA3yojYf2IvRplMPcrAqMBpnFHUDEkEiaG3VD0ICAAfTCf3Yywf3Xc4+XEXB2HEVBGHoUckgdfEjGUiYxGAAA3X0SAUpS9hgJIDwgUQIOQbsIX7bRgAMUR5RwdYACUUHQAARJwHBNCFjCECouzAU9VFk84DMEAwIhkHSIkkfMwCMRk9DAkggA
Mikhail
я не уверен, что время считается правильно, но оно все равно почему-то тормозит
Дима
https://effector.now.sh/try?version=master&code=JYWwDg9gTgLgBFApgQwMbwGZQiOByJNGPAKBNQgDsBneEFagVyTgF45VCZEBRDDROgAUeACYQ41HIjgB3aAGs8AGjgBvEnDgALZJVEAbRFCEBKdZq0cqtOAEEAsgHkAqgDkAKmzgBGAAwBlloUNPC0yLDeYMYY0CB6qIgAdJQQsmZBcLFQcEJG8MDecH4A3HCFADz2zu4eZcAA1A3mGlZW+XAKrMAlmVrUiDAeoIgQjDBCZqwAfOIA6opCCqaqfqaZAL6ZIbaI+lExcQnJqenrmUgwzJRwAAaIAB6C44iicAAkao6unhtwiPxBDBqOUbp89qIALThWB-EDUW6WDbKEgbdY7eDzRTeTgobh8ATCMQSKT0OSKFQWLS6fRGKAALlyD3MMzgDzgDV8KLRZAx5KgChxXEQAGUYNBEEI1pYklQhFiBUlxJREKohA9lKJkDBkCzpmyGlqdUkkEwDDB0TYwjqriD2LjtaLxUgRNxbKlrRFuKI8OsAJCyyhCejIJhIJVUVW5cLcZRqU2Mc1otj6hPmy2hSQ2mTsajIcBGISWeQC1QxxjUNUlhRlm0VvW5NTV2vais8jO2OxgMBCvGIADCOEgKsoE0sMajQjA2DAlfUzazreoydZFWmmXL1EZak3WzaFQARlAAPTr-cH8bim5UfsGYCoLpqENhxAbaYw+BumAVY8XmBXs8rC+KAoGQABPJIsBwIQ1CMSgAHMYG0Rlq2PfwAj8ZFcgAfWUYBTBmCpqDAPROkQMDWDUYA3yojYf2IvRplMPcrAqMBpnFHUDEkEiaG3VD0ICAAfTCf3Yywf3Xc4+XEXB2HEVBGHoUckgdfEjGUiYxGAAA3X0SAUpS9hgJIDwgUQIOQbsIX7bRgAMUR5RwdYACUUHQAARJwHBNCFjCECouzAU9VFk84DMEAwIhkHSIkkfMwCMRk9DAkggA
https://effector.now.sh/try?version=master&code=JYWwDg9gTgLgBFApgQwMbwGZQiOByJNGPAKBNQgDsBneEFagVyTgF45VCZEBRDDROgAUeACYQ41HIjgB3aAGs8AGjgBvEnDgALZJVEAbRFCEBKdZq0cqtOAEEAsgHkAqgDkAKmzgBGAAwBlloUNPC0yLDeYMYY0CB6qIgAdJQQsmZBcLFQcEJG8MDecH4A3HCFADz2zu4eZcAA1A3mGlZW+XAKrMAlmVpIAI6MiLR2lKDIMMBUAGJQyPRCZqwAfOIA6opCCqammQC+mSG2iPpRMXEJyanpe5lIMMyUcAAGiAAegozconAAJGpHK5PPs4Ih+IIYNRys8AadRABacKwUEgagvSz7ZQkfZ7Y7wDaKbycFDcPgCYRiCRSehyRQqCxaXT6IxQABcuXe5lWcHecAavmxuLI+LpUAUxK4iAAyjBoIghH49loklQhITxUlxJREKohO9lKJJshuSteQ0jTBkEkkEwDDA8TYwlbHtD2CTJjK5UgRNxbKlnREfng9gBIVWUIT0ZBMJBaqi63LhbjKNS2xj23FsM3p+2O0KSF0ydjUBZgIxCSzycWqZOMah66sKWsu+um3JqJstyb14X52x2MBgSWkxAAYRwkB1lBgla0ycTQjA2DADfUXcLPeoWZ5FRWmTr1A5akPhzaFQARlAAPT788X75y55UMcGYCoLpqaOxxD7FbI+A-RgCprwfGAnzvKxASgeYAE8kiwHAhDUIxKAAcxgbQOSba9-ACPwsVyAB9ZRgFMVYKmoMA9E6RBYNYNRgD-Rj9hAqi9BWUwzysCowBWOUrQMSRqJoY8cLwgIAB8CJAvjLBA-c7lFcRcHYcRUEYegZySD0ySMLTZzEYAADcQxIdTNNOGAkgvCBRHg5Ah3hMdtGAAxRHVHA9gAJRQdAABEnAcG14WMIQKkHMBb1UFS7nMwQDAiGRjIiSQyyMDk9FgkggA
Mikhail
это время создания 1000 setTimeout
тогда почему оно растет с добавлением спанов?
Дима
потому что 1000 апдейтов реакта это не бесплатно, о чём я пытаюсь донести с самого начала
Дима
найди 1 отличие)
Mikhail
потому что 1000 апдейтов реакта это не бесплатно, о чём я пытаюсь донести с самого начала
так оно же асихронно должно выполниться, время вообще считаться не должно
Дима
ты не можешь игнорировать тот факт, что замена setTimeout на requestAnimationFrame снижает время выполнения до пределов погрешности
Дима
я даже больше скажу
Дима
https://effector.now.sh/try?version=master&code=JYWwDg9gTgLgBFApgQwMbwGZQiOByJNGPAKBNQgDsBneEFagVyTgF45VCZEBRDDROgAUeACYQ41HIjgB3aAGs8AGjgBvEnDgALZJVEAbRFCEBKdZq0cqtOAEEAsgHkAqgDkAKmzgBGAAwBlloUNPC0yLDeYMYY0CB6qIgAdJQQsmZBcLFQcEJG8MDecH4A3HCFADz2zu4eZcAA1A3mGlZW+XAKrMAlmVpIAI6MiLR2lKDIMMBUAGJQyPRCZqwAfOIA6opCCqammQC+mSG2iPpRMXEJyanpe5lIMMyUcAAGiAAegozconAAJGpHK5PPs4Ih+IIYNRys8AadRABacKwUEgagvSz7ZQkfZ7Y7wDaKbycFDcPgCYRiCRSehyRQqCxaXT6IxQABcuXe5lWcHecAavmxuLI+LpUAUxK4iAAyjBoIghH49loklQhITxUlxJREKohO9lKJJshuSteQ0jTBkEkkEwDDA8TYwlbHtD2CTJjK5UgRNxbKlnREfng9gBIVWUIT0ZBMJBaqi63LhbjKNS2xj23FsM3p+2O0KSF0ydjUBZgIxCSzycWqZOMah66sKWsu+um3JqJstyb14X52x2MBgSWkxAAYRwkB1lBgla0ycTQjA2DADfUXcLPeoWZ5QmOECMSQMEAA5iIkPpjCHVBUVpk69QOWoH4c2hUAEZQAD0d7f7++crPFQY4GMAqBdGo0axog+wrMi8B+jAFRfv+MCAb+ViAlA8wAJ5JFgOBCGoRiUCeMDaByTZfv4AR+FiuQAPrKMApirBU1BgHonSIDhrBqMAsH8fsyEcXoKymK+VgVGAKxylaBiSJxNBPlRNEBAAPnRyEyZYyHiSQdyiuIuDsOIqCMPQM5JB6ZJGJZs5iMAABuIYkGZFmnDASTvhAoh4cgQ7wmO2jAAYojqjgewAEooOgAAiTgODa8LGEIFSDmAP6qMZdxuYIBgRDITkRJIZZGByeg4SQQA
Дима
выполнение тысячи эффектов батчится в один рендер, потому что эффектор в состоянии управлять этим автоматически
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
Павел
Утро доброе, запостите кто нить вопрос, чтоб не скучно было до работы ехать
artalar
Утро доброе, запостите кто нить вопрос, чтоб не скучно было до работы ехать
Посмотрите какой-нибудь полезный доклад. Например https://youtu.be/rVFW009olAI
Павел
За ссылку спасибо, наушники в куртке забыл, 😀
Руслан
Всем привет! Подскажите как правильно сделать пагинацию. Простая пагинация - вывожу список страниц, но для мобильной версии это не подходит, нужно делать что-то вроде этого, выводить первые и последние страницы. 1,2, ... 14,15 причем если пользователь нажмет на 2 то пагинация должна сместиться в таком направлении 2,3, ... 14,15 и так далее. Как правильно это сделать? Выводить только первые и последние элементы из списка?
Tutu
Всем привет) как кешировать наши spa?
Tutu
что бы не происходила скачка если скрипт уже загружался
Tutu
Да вроде при каждом редиректе. У меня в network показывают скачивание
Vadym
Всем привет) как кешировать наши spa?
Храни данные в Редаксе и проверяй если они есть, то не отправляй запрос
Vadym
А вообще, это скорее к беку вопрос, чтобы они кешировали данные
Daniil
В редакс скрипт ?