Если рассчитываешь получить дельный ответ, сформулируй правильно вопрос: «что я хочу получить, что я для этого делаю, что я вместо этого получаю». Если/когда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.
>>3260421 жертва маркетологов, плиз. необоходимость использовать БД ушла с момента когда иметь 128 гб оперативки стало нормой, а капасити жестких дисков может исчислятся сотнями террабайтов. Но хитрые кабаны конечно же не хотят терять клиентов, поэтому продолжают тебе продавать оверхед в виде базы данных.
>>3260442 Я тупанул, проблема здесь не в этом. Проблема здесь в том, что в <AttributesManager view='element' /> он не требует указывать ещё и elementId
У компонента логика обработки в зависимости от пропсов различается минимально. Делить особо смысла нет.
Не получается выставить корректно ограничения на типы пропсов. ComponentProps1 - то как есть. ComponentProps2 - то, что должно быть в идеале, но не работает.
Делаю простенькое расширение в firefox по тексту. Пишу - >body=document.body.innerHTML; >body=body.replace(/зелёный/g, 'синий'); >document.body.innerHTML=body; - работает, заменяет в большинстве случаев. Но есть 2 нюанса: 1. Иногда не "ловит" текст, который вроде бы и отображается, но в page source браузера не виден. 2. Перестаёт работать интерактив.
>>3260523 Надеюсь, что только ты не понял вопроса. Как исправить это? Нужно, чтобы не слетал интерактив после работы расширения чтобы корректировался весь текст, а не только видимая в source часть.
>>3260536 [...(function* () { const txtNodes = document.evaluate(".//text()[normalize-space(.) != '']", document.body); let node; while (node = txtNodes.iterateNext()) { yield node; } })()].map(node => node.data = node.data.toUpperCase()); причина слета интеррактива в том, что назначение innerHTML ЗАНОВО пересоздает все блядь елементы на страничке. тебе нужно все textNode перебрать и в них поменять.
>>3260537 там происходит вот что xpath запрос в функции генераторе из генератора делаем массив всех текст нодов потом проходим по массиву и в каждой ноде меняем текст
можно без генератора, проще { const xPath = document.evaluate(".//text()[normalize-space(.) != '']", document.body) , textNodes = [] ; let node; while (node = xPath.iterateNext()) { textNodes.push(node); } textNodes.map(node => node.data = node.data.split("").reverse().join("")); }
>>3260529 1) Не ври. Редакс ты каждый раз не пишешь. Упрощения нет 2) От того что ты удалил паттерн код в простом случае стал проще, но не лучше.
Я давно видел на ютубе лекцию с Деном Абрамовым где он одной из фич редакса показывал путешетвие по истории состояний. Икать лень Код писать проще, чем искать https://jsfiddle.net/sah934jw/
>>3260534 >вся индустрия Вся индустрия занимается изображением бурной деятельности и собственной значимости, чтобы кабаныч платил зарплату. Чем больше оверинжиниренной хуйни будет в коде, тем "индустрии" лучше
>>3260550 Предположим ты делаешь графический редактор типа попошопа только в баузере. Там будет ебическое состояние у UI. Тебе же проше использовать паттерн глобального состяния кторое меняется акшенами.
>>3260534 > не понимаешь зачем ано Чтобы сделать глобальную переменную и ни для чего больше. Я это второй день доказываю. А ты черт из ада, не умеющий какать. >1) Не ври. Редакс ты каждый раз не пишешь. Упрощения нет Пук. >2) От того что ты удалил паттерн код в простом случае стал проще, но не лучше. Пук. >путешетвие по истории состояний Нахуй не надо. Если нужны путешествия сделайте либу для путешествий. Вернись-ка нахуй к теме предсказуемости, черт.
>>3260554 Ты в упор паттерн не видишь? Я же не буду тебе адеквантный по сложности код писать, чтобы преимущества были очевидны. А я этот говнокод написал чтобы пояснить суть паттерна стейт менеджера. Сама суть: у тебя есть одно определенное место где ты коммитишь новое состояние. Туда выносится логика изменения состяния UI
>>3260556 > Сама суть: у тебя есть одно определенное место где ты коммитишь новое состояние. Для этого не нужен редукс. Это просто глобальная переменная.
>>3260557 Глобальную переменную может любой хуй изменить в любом порядке. При сложном проекте ты не будешь знать что это за хуй и по какой логике он это делает. Поэтому ты логику выносишь в редьюсер
>>3260559 >Глобальную переменную может любой хуй изменить в любом порядке. Любой хуй в любом порядке твои редюсеры будет вызывать. >Поэтому ты логику выносишь в редьюсер Вынес логику в класс.
>>3260560 >>Глобальную переменную может любой хуй изменить в любом порядке. Смысл что редюсеров не много, а компонентов сотни. >Вынес логику в класс. Как угодно. Я на реакте тоже не пишу. На ангуляре у меня асинхронный стейт менеджер на rxjs
>>3260567 У каждого компонента может быть локальная переменная которую они откуда-то копируют. И тогда в них могут различаться значения. А если они все возьмут из одного места, то это будет предсказуемо. Потому что глобально. >Я стейт менеджер называю Это глобальная переменная.
>>3260568 Я согласен стакой формулировкой. Только вот подумай почему в vuex сделали отдельно коммит, отдельно акшен, а в комите запретили делать асинхронные запросы. Накой черт они это напридумывали? В сложном коде важна не только глобальная переменная, но и способ доступа к ней. Это часть паттерна.
>>3260569 А я вам объясню. Реактодебил уже наученный что глобальная переменная в реакте называется стор гуглит стор для вуе и попадает в вуекс и пинию. Т.к. чтобы тебе нравился оператор свитч надо быть абсолютно бахнутым сумасшедшим то выбор попадает на пинию. Глобальная реактивная переменная в вуе создаётся одной функцией export store = reactive({}) В реакте чтобы так сделать надо попердолиться а в вуе искаропки. >>3260571 Могу предположить что когда они писали блоатваре который не нужен и ничего не делает, они создали сами себе проблем и решили их так. >часть паттерна Этот паттерн называется глобальная переменная.
Блять. С фронтендерами невозможно паттерны обсуждать. Они возьмут частный пример из своей любимой библиотеки и будут противопоставлять это общему паттерну. В вуе реактивные объекты под каптом. Реактивность отслеживает изменени зависимых переменнх, т. е по сути является интерфейсом доступа к реактивному состоянию. Это не просто переменная жс, доступ к которой ты вынужден сам контролировать.
>>3260599 А то. У любителей навернуть энтерпрайзных абстракций случается шок, когда оказывается, что жс можно использовать не наворачивая тонн их привычного говнеца, которое они притащили с собой из прошлого.
>>3260601 А useState это не то, о чем речь, когда ты делаешь парент компонент с огромным огромным огромным объектом состояния? Тоже самое. Только кривая лапша из useState и useEffect. Плюс в глубокие дочерние компненты надо колбеки пропихивать через пропсы, количество которых растет лавинообразно
>>3260534 Не пизди. У нас продукт с более 300к ежедневных пользователей, стейт менеджерами не пользуемся, а из мест в которых они были выпилили. Но у нас ангуляр с DI и rxjs, поэтому можно аккуратно разбивать на сервисы и изолировать состояние, а не прибегать к глобальным переменным в виде стейта. Анон все верно говорит, проблема этих менеджеров в очень хуевой инкапсуляции, ты модешь модифицировать стейт из любого места программы и это считается нормой, поэтому и приводит к багам которые трудно дебажить и говнокоду уровня спаггети
>>3260551 Нет, мне проще делать один источник истины, а не пилить костыли вида "ну пусть их будет сотня, я просто сделаю глобальную переменную, которая бужет на UI отображаися после того кск вся сотня заэмитит значение"
Самое нелепое это то что возможность добавления сайд эффектов (мидлвар для обработки экшенов) предоставляется как охуенная фича, а не анти паттерн который делает код еще менее предсказуемым. Ну т.е. все это дерьмо с глобальной переменной в виде стора, с сайд эфыектами в виде мидлвара их создатель может защитить только высером "ну так делать не надо, это плохо, делай хорошо и будет хорошо, хоть это сделать и сложно". Сама концепция целиком состоит из антипаттернов, но макаки съели и молятся на фотку наркомана даньки.
>>3260659 Но источник истины ты как-то должен обновляться? Иначе какой в нем смысл? Вот ты из всех виджетов эмитишь в него значение. Заметь слов эмитишь, а не переписываешь его прямо.
У тебя есть сервис в ангуляре инкапсулирующий состояние в BehaviorSubject. Сабжект подписывается на другие измнения или в методах сервиса вызывается next(state) на сабжекте.
>>3260664 Бекендеры жуют мидлвары и не возмущаются. Мидлвары это не антипаттерн. Подходит для реализации Cross-cutting concerns. У тебя приложуха на экспресе. Тебе везде в каждой ручке надо авторизоваться - распарсить JWT и проверить его валидность. Это легче сделать в мидваре. Хочешь логировать запросы - в мидваре. И тп
>>3260673 Ты бэкендер? Зачем ты это вообще высрал? При чем здесь пайплайн мидлваров в бэкенде и работа со стейтом на фронте? В бэкенде это трансорфмация не стейта, а одного куска данных в единицу времени, например запрос к которому ты добавляешь нужные заголовки, ты не будешь потом этот запрос сохранять и получать к нему доступ из разных мест как в приложении с UI, он уйдет и на его месте появится совершенно другой запрос. В этой цепочке отсутствуют мутации уже существующего стейта, в то время как в твоем говноредаксе это норма, ты можешь по пути мутировать какой-то совсем левый стейты, ну просто потому что тебе так посчиталось удобным, в бэкенде ты просто этого делать не будешь, потому что работаешь с конкретным запросом, а не глобальным стейтом.
>>3260666 >Но источник истины ты как-то должен обновляться?
Да, он слушает подписывается на нужные события и обновляет стейт, это и есть инкапсуляция, принцип инверсии зависимостей, сервис знает как работать со стейтом, когда его обновлять, он дает только доступ к его чтению, его запись полностью под контролем этого сервиса.
>>3260741 Так не делай такого. Мидлвары для общих действий. В экспресе ты тоже можешь накосячить в реквесте как хочешь. Он не инкапсулированый как и любой обжект в жс.
>>3260745 Редюсер тоже знает как работать со стейтом. А стейт обновляется акшенами. Главное что мы вынесли из компонентов как источник истины не только глобальную переменную состояния но и поведение.
>>3260748 Ты работаешь с разными видами данных на бэкенде, у тебя на бэкенде нет UI и связанного с ним стейта. Тебе просто в голову не придет обновлять какой-то рандомный счетчик, в ответ на какое-то совсем не относящееся к нему действие, а в реакте со сторами такое сплошь и рядом, просто потому что макаке показалось это удобным в какой-то момент времени, теперь он правда уже сам не помнит почему. >>3260749 Твой редюсер это глобальная переменная которая синхронизирует чтение и запись, всё. Нет сокрытия доступа к записи, нет разделения на сервисы которые знают как и когда делать запись, все упирается в >Главное что мы вынесли из компонентов как источник истины не только глобальную переменную состояния но и поведение. и в >Так не делай такого. Т. е. в какие-то мантры вида "мы просто делаем все правильно, это же очевидно как надо делать" о чем и писалось выше, по итогу получаем нерасширяемый, неподдерживаемый код макак, которые кнопку добавлять могут месяц, а потом отлаживать связанные баги еще полгода.
Да что тут говорить, проиграл в голос когда на стэковерфлоу увидел ответ, внимание, от самого Дэнчика, который расписал простыню на тему "так делать не надо, предполагается что ты делать будешь вот так, и вот почему ...". Это же один из первых признаков говнодизайна - неочевидность того как пользоваться, возможность пользоваться разными способами, при этом правильный будет только 1 из 100. Самому "дизайнеру" приходится бегать с горшком в одной руке и платочком в другой, ведь пользователи его поделия постоянно срут под себя и пускают слюну.
>>3260756 Ну так мидлвары Абрамов сделал, чтобы санки запилить (redux thunks это вроде его мидлвар), а не стейт произвольно менять. Стейт меняется через акшены. Это правило. Причем здесь криворукость макаки? Я в ангуляре тоже могу запутать все стримами как паутиной, без всяких инкапсуляций.
>>3260765 Стейт меняется через акшены. А redux thunks с чем работает, не с акшенами? Ой, что тут у нас, неявное изменение стейта? Я не в мидлвар его изменил, это всё экшон!! Супер удобно, спасибо! > Я в ангуляре тоже могу запутать все стримами как паутиной, без всяких инкапсуляций. А кто тебе даст? У тебя есть строгая архитектура, у тебя нет глобального стейта и пуканья экшенами из любого места которое тебе приглянется. Это тоже хорошее отличие, без сторов и редаксов ты сразу можешь сказать "'этот чел написал хуйню", с ним ты разве что подумаешь "ну вроде это норма, все так делают", а то что чел напиал хуйню ты узнаешь только когда это до пользователей дойдет и они не по хэппи патс пойдут.
>>3260784 То есть ты говоришь что pushActionToGlobalStore({ actionName: "setVariable", variableName: "a", value: 1 }) вместо store.a = 1 снимает у трясунчика анальника тряску. Он сразу видит что это код серьезный и ломает что-то. Я тебя услышал. Так же как dangerouslySetInnerHTML
>>3260816 Ну да, другого ведь макакену не дано, он только с глобальным стейтом работать умеет, при этом если его спросить хорошо это или плохо, он скажет плохо (потому что на курсах так сказали). Для работы со стейтом нужна архитектура, а не глобальные переменные, запомни это, сычушь. Тогда и проблем не будет из-за того что у тебя диспатчится сотня экшенов и разных мест и мутируетсяя весь стейт в разных сагах, потому что они эти экшены слушают.
>>3260943 >pushActionToGlobalStore({ actionName: "setVariable", variableName: "a", value: 1 }) >store.a = 1 Ты же понимаешь что направление у этих двух примеров ровно одинаковое. Разница только в том что первое это какашечка которую ты удерживаешь.
>>3260977 А при чем здесь эти два примера, дауненок? То что ты там с кем то про разновидность глобального стейта переписывался и споришь о вкусах говна, не значит что я делал выбор в пользу какого-то из них. Я в целом сказал, что все эти редаксы-хуяксы сделаны наркоманом на коленке, который не понимает что такое правильная архитектура приложения, а также не знает базовых принципов проектирования. >>3260975 Иди книжки по архитектуре почитай, там тебе все определения дадут и разжуют.
>>3260977 В первом случае ты выносишь логику в редусер Во втором случае у тебя логика изменения store.a по компотентам размазана.
Предположим у тебя в одном компоненте a+=1, а в другом a+=2 и предположим у тебя завелся баг из-за баблинга: из-за первого происходит обновление второго компонента ( ты пока об этом не знаешь, тебе тестировшик отправил баг). Ты ожидаешь a = 1, но видишь что a = 2.
В первом случе ты рыскаешь среди компонентов, ища где обновляется store.a, чтобы поставить брейкпоинт в дебагере. Ты даже не знаешь в какой последовательности одно обновление тригерит другое.
Во втором случае ты ставишь брекпоинты в редюсере везде, где обновляется store.a Ты сразу поймаешь какой акшен срабатывает первым, а какой вторым. Мало того у тебя в девтоуле реакта есть возможность в откатится по истории и повторить дебаг
>>3261014 Вся суть макак - код строится на попытках предсказать как они будут искать баги, вместо того чтобы предотвращать их появление. При этом о фиксе даже речи не идет, потому что оба случая подразумевают "ну хуй знает, давайте таймаут в одно из мест добавим епта..."
>>3261010 >А при чем здесь эти два примера, дауненок? При том что код делает заведомо одно и то же. >не понимает что такое правильная архитектура приложения Ты буквально не можешь дать определение. Потому что в твоем понимании архитектура это сложные названия функций, чтобы ты не трясся. >>3261014 >выносишь логику в редусер >actionName: "setVariable" Нет там никакой логики. Это индусский код чтобы больше строчек написать. >чтобы поставить брейкпоинт в дебагере. Ты даже не знаешь в какой последовательности одно обновление тригерит другое. Я могу завернуть стор в прокси объект и поставить брейкпойнт там.
>>3261065 >Нет там никакой логики. Это индусский код чтобы больше строчек написать. Щас будем отрицать хуевость глобальных переменных? >Я могу завернуть стор в прокси объект и поставить брейкпойнт там. И шо? Максимум ты колстек увидишь, а логику продебажить не сможешь.
Как решить, какие данные положить в стор, а какие в состоние компонента?
Везде пишут два критерия - если данные используются по всему приложению или после размонтирования компонента должны сохраняться, то в стор, иначе в компонент.
Допустим есть приложуха на несколько больших компонентов, которые слабо связа друг с другом. То есть первый критерий нахуй. Данные для отрисовки берут по сети каждый раз заново. Второй критерий - нахуй. Тогда что хранить в сторе вообще? глобальные настройки пользователя - но это же локалстораж, а не стор.
Или есть ещё критерии, типа сложной логики, централизации управлением и т.д.?
>>3261065 >Ты буквально не можешь дать определение Я буквально дал определение выше. Ты не способен осилить, не говорю уже книгу по архитектуре, а хотя бы базовые принципы и паттерны разработки приложения, отсюда и непонимание того о чем тебе пытаются сказать. Макака увидела глобальный стейт и теперь нахваливает, потому что толпа других макак подхватила.
>>3261093 Изначально наркоман денчик предполагал, что тебе не нужен будет глобальный стор, так как даже он понимал, что это супер хуево. Идея вроде простая, у тебя есть хост компонент, ты в нем используешь useState и дочерним этот стейт устанавливаешь, если нужно что-то от дочернего получить, то оборачиваешь это в функцию и передаешь ее дочернему компоненту, а тот вызывает с нужными данными. На бумаге вообще заебись, но что на практике? На практике это привело к явлению под названием пропс дриллинг, когда стейт хост компонента нужен не прямому ребенку, а ребенку-ребенка или еще ниже, в итоге ты этот стейт пробрасываешь через n детей для того чтобы использовать только в одном. Вот поэтому пришли костыли в виде редаксов и глобальных переменных (хранилищ).
Сделал запрос к апи, получил список продуктов например, обработал json, конвертировал, положил в стор. Наоборот создал новый продукт - добавил в стор. Юзаешь сторонний sdk? Например телеграмовский sdk. Ты получил список каналов. Там 100500 разных полей. Тебе нужно только 5 полей. Отфильтровал, сохранил в store.
Стейт нужен когда у тебя что-то простое. Например отправляется форма. Ты ставишь isLoading true. Или у тебя какие-нибудь фильтры например. Юзер выбрал фильтр по цене и это нужно где-то фильтр сохранить.
А без стейта можно обойтись когда у тебя расчёты на лету. Допустим, тебе надо продукты сгруппировать по месяцам и выводить. Тогда можно просто делать products.map(product => ...тут делаем массивы по месяцам и выводим на фронт) не обязательно сохранять куда-то
>>3261090 > Щас будем отрицать хуевость глобальных переменных? Да, в них нет ничего хуевого. > И шо? И задача поставить брейкпойнт в месте изменения переменной выполнена. >Максимум ты колстек увидишь, а логику продебажить не сможешь. Потому что ты скозал? >>3261110 > >Ты буквально не можешь дать определение > Я буквально дал определение выше. Не в силах пояснить за первый базворд ты пукнул вторым.
>>3261153 >базворд Ну да, для селюка который первый раз книгу открыл всё что в ней написано это набор базвордов, что и требовалось доказать, типичная макака.
>>3261131 >Сделал запрос к апи, получил список продуктов например, обработал json, конвертировал, положил в стор. Положил в стейт компонента, который этот список вырисовывает. Размонтировался компонент- списка нет и не надо возиться с очисткой1 стора.
>Наоборот создал новый продукт - добавил в стор. Создал продукт - отправил запрос на бэк. Обновил список, вернув новые данные с бэка. Иначе можно добавить продукт на фронте, когда на бэке ошибка и ничего не добавилось.
А что если я хочу показывать скелетон во время загрузки? А что если я хочу сделать пагинацию продуктов? А что если мне надо добавлять id token к каждому запросу? А что если мне надо кешировать список продуктов? А что если я хочу обновлять список каждые 10 секунд? А что если я хочу конвертировать время из апи в вид "продукт добавлен два часа назад"? А что если мне надо обновлять подсвойство а-ля "сейчас продукт смотрят два покупателя"? ...
КОРОЧЕ! В стейте компонента хранить можно! Но это будет длинная лапша в стиле if (api.status === 400) {showToast('не могу получить товары!')} else {setData(transformResponse(api))}
Весь смысл стора - это убрать нахуй всю логику в редюсер. Чтобы на фронте осталась одна разметка. Я вывел только products.map() и всё.
Можно это вынести в какой-нибудь useProducts хук, но это скорее всего получится решение на коленке, ты заебёшься искать почему список продуктов ре-рендерится постоянно. Но и это тоже можно кое-как пофиксить, замемоизировав хук по самые помидоры.
В общем, ничего критичного не будет, просто некрасивое решение, с миллионом стейтов. Лучше просто взять редакс, замутить стор и редюсеры c логикой.
>>3261268 >Но это будет длинная лапша в стиле if (api.status === 400) Что тебе мешает это вынести в отдельную функцию, которая о компоненте ничего не знает, но при этом умеет обрабатывать ответы?
>>3261269 >Что тебе мешает это вынести в отдельную функцию Ну я же говорю в десятый раз, это будет просто 100500 маленьких утилиток смешанных с десятком стейтов. Куча мала. Можно вынести transformResponse, добавить туда setIsLoading, setData и всё прочее и всё это замемоизировать. Но решение будет говно.
Моё решение: - Данные отдельно - Логика отдельно - Презентация - чистый хтмл код не засранный логикой
Твоё решение: - Смешать логику и данные - Посадить это всё в useEffect - Разнести логику в миллион маленьких утилит - Замеизировать каждый чих, иначе это будет постоянно ререндериться
>>3261176 Это у программистов профессиональная привычка сказать какой-нибудь базворд чтобы от него отъебались, подумали что он умный и т.д. Поэтому они их постоянно говорят.
>>3261268 >>3261280 > А что если я хочу показывать скелетон во время загрузки? > А что если я хочу сделать пагинацию продуктов? > А что если мне надо добавлять id token к каждому запросу? > А что если мне надо кешировать список продуктов? > А что если я хочу обновлять список каждые 10 секунд? > А что если я хочу конвертировать время из апи в вид "продукт добавлен два часа назад"? > А что если мне надо обновлять подсвойство а-ля "сейчас продукт смотрят два покупателя"? Это все логика или это все отображение?
Приходишь на собес, тебя начинают спрашивать про SOLID, паттерны проектирования, системный дизайн, а ты просто отвечаешь "это все базворды, просто складывайте всё в глобальный стейт" - личрали каждый юзер стейт менеджеров.
>>3261382 Ну солид - реально баззворд. Когда ты в последний раз, крася очередную кнопку, думал: «А не нарушаю ли я принцип подстановки Барбары Лисков?»
>>3261382 С чего бы? Стейт менеджер не идеальная штука, но чисто по SOLIDу SRP - делегируешь логику стейта из компонента в стейт менеджер. Компонент отвечает только за функцию отображения DIP - Компонет не зависит от стейт менеджера, только от его интерфейса. Стейт менеджер легко заменить например на инстанс для юнит тестирования. OCP - Норвую логику ты добавляешь в стейт менеждер, а в компотненты только акшен. Таким образом у тебя код расширяется не приводя к модификации (существенной) частей завищих от этого кода
>>3261431 >Компонент отвечает только за функцию отображения А диспатчить ты ничего не будешь? Было бы так, если бы ты только брал данные, но у тебя компонент помимо того что напрямую их мутирует еще и свой стейт может создать, отсюда противоречие: >делегируешь логику стейта из компонента в стейт менеджер Даже в треде появился человек, который не понимает где у него стейт должен быть, сразу пошли какие-то разнотолки уровня "да это же очевидно епту", нет, чел, это не очевидно, потому что SRP нарушен. В компоненте он нарушен потому что компонент может как держать свой стейт, так и изменять глобальный стейт в стейт менеджере. В стейт менеджере он нарушен потому что стейт не только там хранится, но и меняется, при этом что такое стейт? Это стейт какого-то одного компонента? С твоих слов выглядит так, но на деле это глобальный стейт и не только компонентов, а вообще всего что душе угодно, любое место может пукнуть в этот стейт, а он должен знать как его сохранять и обрабатывать, где ты тут SRP видишь? Тут n ответственностей, где n это количество пукающих в твой стейт менеджер ака глобальную переменную.
>только от его интерфейса
Что ты несешь, полоумный, какой это интерфейс когда ты создаешь редюсеры, сторы, селекторы, а потом их напрямую импортишь и используешь также напрямую через диспатч. Нет никакой абстракции от этого стора и всей цепочки его зависимостей, DI это инверсия зависимостей, когда источник данных имплементирует интерфейс который задает ему компонент, т. е. интерфейс должен быть на стороне компонента, имплементация на стороне стора, в случае со стором интерфейс и имплементация полностью задаются на его стороне, компонент полностью зависит от стора, нет никакого DI. >OCP - Норвую логику ты добавляешь в стейт менеждер, а в компотненты только акшен >только акшен Ну т. е. всё таки не клозед? Всё таки открыть надо? Еще и подебажить, пару костылей вставить в компонент. И почему у тебя новая логика в стейт менеджер добавляется, у него же SRP, какая нахуй логика компонент? Ах, да, ну это не только стейт, это еще всякая бизнес логика, а также юай логика, удобно когда все в одном месте! OCP это когда при добавлении новой логики ты не меняешь старый компонент, а добавляешь новый компонент расширяя старый (наследование), либо используя его в новом компоненте (композиция).
>>3261452 Да солид это не 9 заповедей. 1) Инпуты буду диспатчить. Инпуты это часть ответственносити UI. А отправка запроса, обработка данных, другая логика - нет 2) Кто тебе мешает интерфей выделить Если помнишь в тайпскрипте структурная типизация. Компонент от этой лабуды не зависит. Это чистая функция с аргументам в виде пропсов. Ты ее можешь из отдельно файла импортировать в файл компонента и в файл теста. 3) Покажи использование OCP где ничего не редактируется. Не надо так глупо трактовать этот принцип. Может только где нибудь спринге ты в хмл конфиге новую зависимоль прописываешь и она подхватывается и что-то там меняет в контейнере. В общем слуае OCP такого не требует. Вот если бы ты размазал логику по нескольким компонентам и каждое изменение затрагивало несколько компонентов, то тогда это нарушение OCP. В простм случает ты добавляешь в редьюсере в свитч еще один бранч с акшеном и обавляешь акшены в компоненты, а не лопатишь их логику useEffect по всем компонентам.
>>3261512 залетный? т.е. завсегдатай сосача > завсегдатая вкудахте/пикабу? ухахаха вкатился тебе за щеку, пес. труЪ пацаны делают лаве и прут тяночек. неважно, чем занимаешься по жизни при этом - точишь детальки или фронтенд пилишь. никчемные мудачьки спорят о какой то хуете по двое суток, на кой то хер доказывая свою правоту такому же еблану. холиварить - удел бездельников диванных. для всех остальных без задач. пиздуй кнопочьки рисовать дедлайн горит, а то уволят и наймут индуса на твое место.
>>3261392 Нарисовал на схеме. Если переменная относится к контенту и хедер про неё ничего не знает тогда оставляй там. Если это например юзер (ты) который и в хедере и в контенте, то он глобальный.
Есть ли какой-то способ гарантированно узнать, что функция вызвана как тэг строки шаблона? Или только по косвенным признакам определять, типа первый аргумент это массив и т.д.?
>>3262037 ну тогда тебе пизда, потому что жс динамикодрися Обкручивай то что передаешь в классы, а не передавай в свое апи жс примитивы. Ты можешь раздеть сущности 1) апи что принимает обект и делает полезнуб работу 2) конструкторы обектов, теги для строк возвращаюшие обекты
>>3262037 Кому нужен? Чем пользователю будет удобней иметь одну функцию которая может использоваться как тэг и просто как функция, вместо двух функций одну с суффиксом tag другую без него?
>>3262109 Тем что он по коду сможет найти место с тегами и место без. В целом код будет читаться лучше, когнитивная нагрузка меньше. Буквально такая же проблема как у того кто это говно сделал - непонятно как отличать. Поэтому чтобы этой проблемы не было, нужно разделять на функцию-тег и просто функцию.
>>3262034 Все нормальные популярные библиотеки проверяют так: if (!Array.isArray(parts.raw) || !Object.isFrozen(parts.raw)) { throw new InvalidInputError('Function must be called as a template literal.'); }
где parts это первый аргумент твоей функции (TemplateStringsArray)
>>3262661 >>3262711 Посмотрите на этих надменных хуесосов сидят ебало воротят, вкатились несколько лет назад когда из требований кабанчика было знание html и css
>>3262802 Прежде всего ты знаешь, что: > когда из требований кабанчика было знание html и css - это не правда. Пару лет назад вкат был таким же тяжелым. Вкат был легким до 19г. А сейчас все: Ии, школота с уников и АйТи пузырь который лопнет. Вкат закрыт. Au revoir
>>3263067 Как ты вообще до этого дошел? >When greetUser() calls localGreeting(), another context is created to run that function. When this function returns, the context for localGreeting() is removed from the execution stack and destroyed. Ты это понимаешь? Я английский очень долго дрочил я нихуя не понимаю. Что такое this и что такое that?
1. Сначала на полочку кладется контекст 1, назовем его GLOBAL. В нем объявляются 2 переменные, GLOBAL.user и GLOBAL.greetUser. Потом вызывается greetUser.
2. Создается контекст 2 и кладется сверху на полочку, назовем его GREET_USER В нем объявляется 2 переменные, GREET_USER.word и GREET_USER.localGreeting Потом вызывается localGreeting.
3. Создается контекст 3 и еще раз кладется сверху на полочку, назовем его LOCAL_GREETING У этого контекста объявлена 1 локальная переменная, LOCAL_GREETING.delimiter.
Код этого контекста выполняется по порядку, и сначала ему нужно получить некие переменные word, delimiter, user.
Окей, он смотрит, delimiter - локальная переменная, равная ', '. Берет ее. Локальной переменной word нет, он проваливается вниз по полочке, где лежат наши контексты, и находит ее там. Это штука, равная 'Здарова'. Локальной переменной user тоже нет, он проваливается вниз в "родительский" контекст, там тоже нет user. Идет еще ниже - и наконец находит там юзера, равного 'Вася'.
Все, у контекста LOCAL_GREETING есть все переменные. Он делает консоль лог и грохает сам себя. Контекст GREET_USER тоже все сделал, и грохает сам себя. И наконец контекст GLOBAL тоже.
Когда GLOBAL себя грохнул, движок V8 получает ивент, мол, полочка пустая. У этого ивента калбек - посмотреть, нет ли микротасок в евент залупе. Если есть - кладет первую в очереди опять на полочку.
>>3262995 >макротаски и микротаски Отвечаю: - Я досконально изучил движок JavaScript и фактически перенял его принцип работы, и планирую руководствоваться им на рабочем месте.
>>3262602 Перечисленный тобой стек это самая база для фуллстека, с точно таким же и работаю. Хз как сейчас выкатиться не рисуя 3 года опыта. Может через стажёрство в крупных компаниях.
>>3264532 >>3264571 Почему девопсы? По-моему самые пидорасы это не только про специализацию, а ещё и про стек. Повышенное количество пидорасов наблюдается в датасаенсе и машинлёрнинге, среди бекендеров на руби и немейнстрмных языках (скала, эликсир, раст...), среди мобильных разрабов, особенно когда пишут под ios.
>>3264642 потому что везде, где я был девопсы были чсвшными красноглазыми чмошниками, которые ставят себя выше других только потому, что знают наизусть команду как посмотреть логи сервиса systemd и умеют тыкаться в гуй кубернетеса или его заменителя.
я фронт. подскажите плз ресурсы по изучению graphql. мне известено: оф сайт graphql, туторы из apollo. этого хватит или стоит прочитать какую-нибудь книгу?
>>3264783 Зачем тебе это неюзабельное неудобное говнище? Разработчики в последние годы всё больше отказываются от использования этой мертворождённой технологии.
>>3262813 Вообще много васьков с завода свою жизнь тратят на изучение хуйни типа setinterval и как он в ивент залупе паткапотом работает? Хули им еще надо? Какие то реакт, редакс, флякс, хуякс, коммерческий опыт блядь, нест, гит, базы данных, проекты блядь резюме. Я бля 8-9 месяцев на изучение этой хуйни потратил, извольте на сРАБотку взять и за ручку первые полгода-год провести, очко у ваших ждунов илитариев от этого не выпадет. Капец кабаньё охуело, ебаный срыночек
Есть какие-то дебаггеры с расширенным функционалом чем встроенный в хроме? Суть такова, что есть например 55к строк js-кода, которые работают на сайте. И дрочиться выискивать одну переменную, особенно если её ещё шифруют всякими криптоалгоритмами постоянно оче тяжко, а если весь этот прикол еще обфусицирован, это вообще финиш. Есть такая фича можно вставить лог на переменную и при запуске скрипта получить все значения, но опять же это геморно. Не понятно почему до сих пор нет ничего чтобы логировало все значения переменных и вставляло значения в код закоментированными. Или например вообще имба была бы если бы запускал какой-то кусок например логина на сайт и вот из кода 55к строк на выходе было бы закоменченно всё что не работало при входе на сайт. Это была бы сказка, как бы сузилась область поиска.
Где вообще искать нечто подобное если стандартные средства хрома куцые для таких задач?
Нужно сверстать элемент как на пике. Суть - слева список контейнеров, состоящих из картинки и текста, справа большое изображение. Контейнеров может быть произвольное количество, выравниваются они по центру. Как такое реализовать? Пик немного не точен на самом деле, у круга должно юыть выравнивание по нижнему правому краю.
>>3266265 Ну я знаю что такое сентри. Но ты ведь тогда спросишь что такое grub, я скажу что такое grub, ты спросишь в чём разница между setImmediate и process.nextTick, я отвечу, ты спросишь, как называлось дефолтное событие внутри v-modal до третьего Vue, я отвечу, ты спросишь разницу между __proto__ и [[proto]].
Это называется "зажрались". Это hr-вариант поиска принца на белом нуксте.
>>3266290 >ты спросишь в чём разница между setImmediate и process.nextTick, я отвечу, ты спросишь, как называлось дефолтное событие внутри v-modal до третьего Vue, я отвечу, ты спросишь разницу между __proto__ и [[proto]]. Нет, я спрошу как бы ты строил архитектуру нового фронтового сервиса и что бы делал, что бы он не падал.
>>3266329 Так причем тут учится/не учится? Мне похуй, даже если чел ниразу в жизни им не пользовался, главное что он должен знать, как отлавливать ошибки на фронте раньше того, как их тебе принесет разъяренный продакт или вторая линия техсапа.
>>3266340 Ну обмажься тайпскриптом, юнит-тестами и штатом тестировщиков. Но в достаточно сложной системе достаточно редкие логические ошибки не отловить никак, только десятками лет и миллионами юзеров.
>>3266361 >Ну обмажься тайпскриптом, юнит-тестами и штатом тестировщиков. Одним тайпскриптом и тестированием сыт не будешь. Что будешь делать, когда на этапе тестирования проблему не выявили, на момент релиза все работало, а потом спустя несколько часов неожиданно полегло? Как от такого будешь защищаться? >>3266374 Я с нуля никогда фронтенд не учил. Планировал изначально вкатываться в эмбед, т.к. имею образование по специальности электроника. >>3266292 >воспроизводить в тесте А вот не воспроизводится. Что будешь делать?
>>3266419 >Откат Ну это да, откатили релиз, нашли проблемный код, починили. Как сделать так, что бы минимизировать вероятность такого факапа в будущем?
>>3266412 >а потом спустя несколько часов неожиданно полегло? Как от такого будешь защищаться? Никак, лол. Разбудить среди ночи программиста-удалёнщика и пусть решает проблему на месте либо советует делать откат. У меня пет-проект на ноде как-то выдал ошибку спустя почти 10 лет. Интересно, что я считал такую ошибку невозможной и поставил guard expression чисто для красоты. И вот эта строчка сидела без дела 10 лет, а потом хуяк и сработала.
>>3266423 >Как сделать так, что бы минимизировать вероятность такого факапа в будущем? Ты как будто ждёшь волшебного слова, типа "юзай Sentry Pro+ Unlimited". На самом деле тут техпроцесс нужен по особому организованный. Как в аэрокосмической отрасли: многоступенчатость проверок и проверки проверок. Кросс-ревью кодеров, затем ревью техлида, потом тестовый сервер, потом частичный накат на прод, потом прод. Сбор юзерских отзывов. Делали так на сайте с историей в 20 лет и миллионной аудиторией, на моей памяти не падали.
Может во время гибернации потеряться переменная, лол? Включил сегодня утром ноут и, не обновляя открытую страницу, наткнулся на такой баг, который возможен только если бы обнулилось значение одной из ранее заданных в замыкании переменных.
>>3266338 Что значит сервиса? Ты охуел? Чтобы "сервис" не падал, существуют SRE и девопсы. Схуяли я должен выполнять их работу? Фронтенд это блядь сбилженная статика либо обыкновенный SSR в ноде. А архитектура на фронте это долбоебизм откровенный, ты же про всякие feature sliced design? Это вредное говно. На фронте достаточно грамотной и логичной структуры проекта и следование бест практисам фреймворков/библиотек, например про правильное размещение стейта в реакте - локальный/глобальный стейт и т.д.
>>3266261 Я фронтендер сеньор, 7 лет опыта, могу ещё писать бекенд на ноде и го (не на уровне сеньора, конечно, но микросервисы умею), скоро буду искать работу, планировал назвать такие цифры: от 300 минимум, 400 в идеале, думаю 400 найду в итоге. Но у меня перерыв в работе, я довольно долго уже не работаю. Если бы не это, я бы говорил от 400 минимум, или вообще валютную удалёнку искал на $5к и выше.
>>3266702 >А эти нет. В твою помойку и не собирался проходить. Sentry в любой нормальной контoре юзают, ErrorBoundary в реакте и т.д., а ты несёшь хуйню про архитектуру фронтенд сервиса. Какие сотрудники, такая и компания, я от таких мест держусь подальше.
>>3266792 Почему питону без типов нормально? Вот потому же. JS кроме прочего должен оставаться достаточно простым в своей основе, чтобы несложные вещи можно было писать без дрочения интерфейсов.
Вообще, TS своими бесконечными объявлениями мне всё больше напоминает печально известный язык Java. Ещё немного, и у тайпскрипта появится своя Scala и свой Kotlin, кек.
>>3266728 >Чем вам нравится JS? Очень совренменный, простой, с хорошими либами (включая встроаенные и npm) язык. Максимум чего не хватает - нормального многопотока.
>>3266728 Нравится тем, что смог в него самостоятельно въехать и освоить. До этого покупал книги по разновидностям Си, и они меня от программирования только отталкивали. Я просыпался ночами в холодном поту и бормотал: public static final constexpr override reinterpret_cast.
>>3267179 А в голанге пердолятся с мьютексами? Или в C#, джаве, скале? Не особо. В го к примеру почти всегда каналы юзаются. Я вот как и автор поста на который ты ответил тоже больше всего хочу чтобы в жс был нормальный многопоток. Потому что заебало писать отдельные микросервисы на другом языке, мне на жс/тс намного больше всех остальных языков нравится, в идеале хотел бы писать только на нём. И на самом деле далеко на все хайлоадные сервисы необходимо писать на другом языке, большой поток http запросов обрабатываются легко и с низкой задержкой, в этом жс на голову выше остальных скриптовых языков и не так уж сильно хуже джавы/дотнета/го, но с CPU bound тасками случается некоторое дерьмо, которое лучше будет обработать сервисом на голане или даже расте.
Скачал ваш webstorm, создал проект по умолчанию, и при запуске отладки у меня кроме index.html никакие файлы не подтягиваются. Ошибка 404. Как фиксить это дерьмо?
>>3267276 Что-то у меня уже жопа горит от вашего веба. Всё, что мне нужно это открыть веб страницу, на которой запустится скрипт на ts, и мне его нужно как-то отладить. Так я не могу! Я не могу в script указать ts в качестве src, только js, в итоге отлаживать получается только уже скомпилированный сука кода.
>>3267306 Впрочем сейчас наконец получилось все завести. Правда в изначальном проекте, который создал webstorm, у script был аттрибут type="module" и с ним почему-то нихуя не работало, CORS выдавал ошибку. В интернете советовали использовать liveserver, но с ним не работала уже отладка в вс коде.
>>3267278 В смысле не поддерживает вложенные стили? Не подсвечивает синтаксис? Звучит как бред. У меня и в дефолтной теме подсвечивает, и в любых других.
>>3267368 А с какой стати браузеры должны корсами ебать мозги? Просто собирай сингл пейдж шетемеле со всеми стилями и скриптами и распространяй через локалку!
>>3267946 >Как работает код, что ниже? Обычная самовызывающаяся функция, притом странная какая-то нотация. "blabla1" вообще ни на что не влияет и нигде не остаётся, они могли бы назвать функцию "переходитеНаПродуктыЯндекса". Само слово "function" тоже не нужно, видимо сделано для поддержки IE7. А вообще, самовызывающиеся функции традиционно используются в JS, когда надо на ровном месте создать изолированный блок, чтобы там сделать что-то, не захламляя окружение переменными. Сам на днях писал пикрил.
>>3268005 >А вообще, самовызывающиеся функции традиционно используются в JS, когда надо на ровном месте создать изолированный блок, чтобы там сделать что-то, не захламляя окружение переменными А для такого надо использовать ключевое слово let или var?
>>3268493 Он шуткует, конечно, но доля правды в этом есть - код со словом function выглядит малость устаревшим, с тех пор как распространились стрелочные функции
Не знаю, как сейчас с этим дела, но ещё 10 лет назад обсерверы в JS были жутко тормозные по сравнению с обычным вызовом функций, прямо на порядок или два медленнее. У нас ещё комичный случай был, когда "лид" всех заставлял пользоваться его самописным "скоростным" фреймворком на обсерверах. А потом выяснилось, что это жутко медленная параша. Эх, были времена. Этот лид ещё постоянно выбирал какая музыка будет играть в офисе.
Существует ли в природе чистый программист-неверстальщик на JS? Создаётся впечатление, что знать JS - это как иметь подтянутую попку: тебя всегда пытаются склонить к какому-то непотребству, в данном случае к перекраске кнопочек.
>>3269645 Мы вам перезвоним если скажете где в браузере коммонжс модули, а где в ноде дом апи и почему в ноде долго фетча не было, хотя в8 был. В8 это не все, у ноды даже свой ивент луп на libuv
Начал трогать алгоритмы, везде предлагают компилировать их через ноду. Как правильно получать значения от "компьютера"? Условно задача - написать алгоритм, который складывает два получаемых числа. В питоне это просто input, в обычном js я бы написал функцию с параметрами. В ноде я нагуглил только через readline, что выглядит как сущий пиздец, столько делать ради получения двух строк.
>>3269909 1) Напиши один файл с функцией ввода и рекварь его 2) Импортируй данные из jsonфайла 3) Используй готовую библиотеку 4) Выполняй в браузере. Там из коробки есть prompt("Введите чесло")
>>3270052 >одна бабка сказала... >на заборе написано... И? Мейнстрим редко идет по разумному пути. Если и приходит на него, то не сразу. HTML over Websockets существует уже несколько лет.
>>3270460 >разобрались как переменную объявить-то? В сигнатуре функций, естественно. Самый экономный вариант. А чтобы какой-нибудь дурак не передал лишние параметры, я пишу $ в начале.
Подскажите зеленому, нормальный подход? Есть кнопка на html, при клике на нее открывается форма для редактирования информации. Я хочу сделать так: Клик по кнопке => js отправляет fetch на сервер, чтобы тот ответил, аутентифицирован пользователь или нет. Сервер отвечает, что пользователь не аутентифицирован (например, нет валидного jwt токена в куке). js показывает div с формой для пароля. Ничего не проверяет. Сервер принимает пароль, проводит аутентификацию, ставит куки. И так по кругу. Норм тема такого общения js и сервера?
>>3271422 Недавно наткнулся в реддите на вопрос MERN vs spring boot, где выяснилось что оказывается мерн по сути node js этот мем стек для впаривания курсов вкатунам. Продакт бэк это спринг
>>3271838 На ноде тоже пишут норм продукты, только не на MERN, а на несте, остальные элементы стека такие же как и в го/джаве - постгрес, реббит/кафка, редис, кликхаус и т.д.
>>3272127 также как и нодобояре. Хуево. >>3272070 >На ноде тоже пишут норм продукты Например? Какой норм продукт написан на наоде? Именно на ноде, а не использовал ноду для создания одного из сотен своих микросервисов
Пытаюсь осваивать более низкоуровненый JS. Сокеты, стримы, всё такое. Мне не совсем вот понятно, а почему в Ноде такое внимание уделяется стримам? Всё завязано на них, всё крутится вокруг них и всё такое. Файл прочитать это поток, входящий хттп запрос это поток и т.д.
Но по сути, ведь в других языках то же самое? Я ещё знаю Питон и Баш. И в них по идее, то же самое происходит. Пайпы в Баше это стримы. cat, ">" это тоже стримы. В Питоне наверное тоже самое под капотом. Но почему-то такого внимания потокам не уделяется. Просто эти потоки используются где-то внутри и всё. А в Ноде на каждом шагу жужжат про потоки и все АПИ завязаны на явном использовании потоков.
Делаю фронт для своего бэка, поэтому сильно не ссыте в ебало, джаваскипт не мой нейтив ленгвидж.
Есть компонент на Реакте(назовем его компонент А), который использует другой компонент(назовем его компонент В) и возвращает коллекцию компонентов В. Как сделать так, чтобы можно было передавать джейсонину в А, которая просто рендерила бы компонеты В из данных, которыей ей прилетели?
И как в Реакте передавать параметры из url? Например, у нас есть url /api/v3/recipes/crepes/42342342 Я хочу, чтобы в компонент передавались параметры crepes и id. Т.е. грубо говоря, чтобы компонент понимал, что надо брать искать рецепт блина с таким-то id.
>>3272189 >также как и нодобояре. Хуево. Хз с чего ты это взял, я нодобоярин и поживаю лучше чем когда-либо. >Например? Какой норм продукт написан на наоде? Betboom, например. Лучший букмекер, популярный, работающий на много стран, с тир 1 продуктом по качеству. Топ-2 и топ-3 буки Winline и Pari тоже на ноде. Или бекенд Делимобиля, часть Яндекс Лавки и Яндекс Карт, Банки.ру, Сравни.ру, Леруа, в Тбанке несколько внутренних продуктов на ноде. В крипте вообще бесчисленное множество проектов, например p2p.org / Lido (крупнейший ETH стейкинг).
>>3272585 >Есть компонент на Реакте(назовем его компонент А), который использует другой компонент(назовем его компонент В) и возвращает коллекцию компонентов В. >Как сделать так, чтобы можно было передавать джейсонину в А, которая просто рендерила бы компонеты В из данных, которыей ей прилетели? https://react.dev/learn/rendering-lists
>И как в Реакте передавать параметры из url? Например, у нас есть url /api/v3/recipes/crepes/42342342 Я хочу, чтобы в компонент передавались параметры crepes и id. Т.е. грубо говоря, чтобы компонент понимал, что надо брать искать рецепт блина с таким-то id. Тебе походу нужен клиентский роутинг https://tanstack.com/router/latest https://reactrouter.com/en/main
>Как сделать так, чтобы можно было передавать джейсонину в А, которая просто рендерила бы компонеты В из данных, которыей ей прилетели? Напрямую передавать джейсонину - это быдлокод. Надо отделять логику от презентации. У тебя должен быть отдельный хук который скачивает данные, а в компонент уже передаёшься обработанный объект. Короче устанавливаешь redux-toolkit, создаёшь createApi, вот пример как это делается https://www.youtube.com/watch?v=2hTkVEmhQZk
>>3273032 По сравнению с чем? По сравнению с другими скриптовыми/интерпретируемыми языками (пхп, питон, руби) лучше перформанс, часто намного лучше, со многих сторон сам язык (тайпскрипт) лучше, конкуренция относительно небольшая, крайне часто используется в крипте, которая лично мне очень интересна, да и зарплаты тут ощутимо выше. У вышеперечисленных языков плюс по-моему только один, больше инструментов в экосистеме, но в последние годы это уже не так актуально. По сравнению с го, джавой, дотнетом, плюсами, растом нода лучше скоростью разработки и опять же как язык тайпскрипт превосходит все перечисленные кроме раста и сишарпа, но у них с тайпскриптом один создатель. В целом для бекенда дотнет крутое решение, высокий перформанс, стабильность, скорость разработки нормальная. Похожая ситуация в го, но сам язык ограниченный, в этом есть и плюсы, и минусы. В моём представлении одно из лучших решений для крупных проектов это микросервисы, где большинство на ноде, а микросервисы с повышенной нагрузкой написаны на го или если там совсем жёсткая числодробилка то на расте. Но в моём опыте за 7 лет в крупных проектах перформанса ноды не хватало совсем редко и это было именно из-за CPU bound задач, и писать на тайпскрипте намного приятнее, чем на го или расте, тем более на расте хуй найдёшь работу, так что для меня нода на бекенде это топ выбор.
Чет я не понял, почему промисы настолько медленнее setTimeout? Пробую скрипт с тротлингом в отладчике, так на Low-end и Mid-tier мобилах показывает просто жуткие лаги.
Хотелось бы конечно requestAnimationFrame юзать, но он от фреймрейта монитора зависит, недавно столкнулся с игровым моником на 240 фпс, так мне мой requestAnimationFrame чуть проц не спалил.
>>3273070 >По сравнению с другими скриптовыми/интерпретируемыми языками (пхп, питон, руби) лучше перформанс, часто намного лучше Что угодно будет быстрее руби. А давайте с LuaJIT сравним, вот здесь-то нода и обосрется.
>>3273292 >давайте с LuaJIT сравним Не думаю, что там будет разница в разы, кто бы ни выиграл. Вообще, луа язык не полноценный, и он такой by design. Не участвует в гонке фич, чтобы оставаться лайтвеигхт для эмбеда и лёрнабл за неделю.
>>3273292 Зачем сравнивать ноду с этим? Смысл тёплое с мягким сравнивать? Есть уже адекватные предметы для сравнения, например го и раст, которые используются на бекенде и уделывают практически что угодно.
Пора уже выкинуть старый var и заменить им let. Мне var больше нравится единством своей высоты в строке, и он лучше подчёркивает противопоставление const. А что такое let x? "Пусть икс"? Ерунда какая-то. Ладно ещё не "my", как в перле.
>>3273070 >пхп >лучше перформанс Дядь, поставь пхп последней версии и твоя нода пожрет говна в плане перформанса. Миф о медленном пхп был актуален лет 10 назад, когда на нем говнокодили все кому не лень (читай - битрикс и прочие CRM) и сам язык не развился так сильно как сейчас. тоже самое относится к jquery
>>3273681 >поставь пехепе и пожри говна Спасибо уже нажрался за несколько лет. Симфони 7 может и няшка, но работы на симфони нет. Только говнопроекты на леравеле где все пишут как попало. Один из БД вытаскивает тонны данных, а потом фильтрует и вычисляет на пыхе, другой в простом круде абстракции с потолка высирает как на спринге, третий колбасит логику на фронтенде и все это в одном проекте..
>>3273070 >По сравнению с другими скриптовыми/интерпретируемыми языками (пхп, питон, руби) лучше перформанс Это не совсем так. Смотря в каких задачах. На некоторых задачах PHP быстрее чем Java и по скорости близок с Си. V8 очень быстрый движок, но в веб-приложениях Нода не тянет, ее сетевой стек дает большой оверхед. С либами/фреймворками Нода не быстрее Питона. У PHP движок тоже очень быстрый, но оверхед дает подъем виртуальной машины на каждый запрос. PHP-FPM тоже дает большой оверхед, если не ошибаюсь, его вообще забросили и много лет не обновляют. Стоит сделать из PHP долгоживущий процесс как у Ноды и он догоняет Джаву.
>>3273840 >На некоторых задачах PHP быстрее чем Java и по скорости близок с Си. На каких?
>V8 очень быстрый движок, но в веб-приложениях Нода не тянет, ее сетевой стек дает большой оверхед. С либами/фреймворками Нода не быстрее Питона. Это не так, в веб-приложениях нода очень даже тянет, и тем более по сравнению с питоном. Джанго просто пиздец какой медленный, а фастапи выдаёт перформанс уровня чуть-чуть выше экспресса, который самый медленный среди юзабельных инструментов в экосистеме ноды, тот же фастифай будет ощутимо лучше фастапи.
>>3273847 Так Elysia работает на Bun, который использует uWebSockets.js. Workeman и Swoole не слабее, а конкурентность в них более удобная. Еще uWebSockets.js работает в одном потоке.
>в веб-приложениях нода очень даже тянет Голая Нода очень слабенькая. Это уже давно доказано. С Фреймворками и подавно. Поэтому и появились uWebSocket.js и Bun.
>>3273862 >Джанго Не сравнивай Джанго с фреймворками на Ноде. Это огромный комбайн, на Ноде и близко ничего такого по функционалу нет. ПОэтому и медленный. Фастапи не медленнее чем Нодовские фреймворки. В Питон завезли Socketify, который скопировали с uWebSockets.js.
>>3273866 >>3273884 Ну да, bun не нода, но это по сути бекенд на js/ts. Я и не говорю, что workerman и swoole слабее. Какая там конкурентность не знаю. Чем она удобнее? А использование uWebSockets тут при чём? Внутри ещё и JavaScriptCore и кастомная имплементация async I/O на zig, или в самой ноде V8 и libuv, это же нас не смущает. В swoole плюсы в исходниках нас ведь тоже не смущают.
>>3273877 >Голая Нода очень слабенькая. Это уже давно доказано. Примеров не будет? >С Фреймворками и подавно. Где пруфы? Я вижу обратное, например как популярный фастифай на ноде выдает перформанс намного больше популярных фреймворков на питоне или пхп.
>Фастапи не медленнее чем Нодовские фреймворки Я тебе скинул пруфы, где показано, что фастапи по перформансу на уровне самого медленного фреймворка ноды.
>>3273888 Нода написана плохо. uWebSockets.js не использует сетевой стек Ноды вообще, у него свой. Bun насколько мне известно под капотом использует uWebSockets.js.
>>3273896 >Примеров не будет? В бенчах смотри или потести сам. Как минимум в 6 раз медленнее чем uWebSockets.js.
>>3273906 >Нода написана плохо. uWebSockets.js не использует сетевой стек Ноды вообще, у него свой. Bun насколько мне известно под капотом использует uWebSockets.js. И? У swoole тоже под капотом код на плюсах.
>В бенчах смотри или потести сам. Как минимум в 6 раз медленнее чем uWebSockets.js. Бенчи подтверждают мои слова, я скриншоты все сюда скинул.
>>3273804 И? 1) Мне пихуй на ваш перформанс. Я не пишу высокочастоную торговлю на бирже. 2) Пыха говно по многим причинам отличным от перформанса 3) Изкоробочного перформанса в пыхе нет 4) Пыхо проект обычно тормозит, потому что запросы к БД кривые написали 5) Тред не для того чтобы два чела между собой общались.
Да и пыха быстрее дефолтной ноды не на порядки а раза в два - три. Это не аргумент чтобы проект на пыхе писать. В случает ноды у меня из коробки асинхронность и возможность даже вебртс и тсп обрабатывать на голой ноде. А в пыху надо сторонние мокрописьски ставить и сомнитетельной хуевости код писать, который рядовой пыхпешник не поймет.
Че придумал. Обычно пишу так, когда надо притормозить до ближайшего requestAnimationFrame:
await new Promise(resolve => requestAnimationFrame(() => { // всякая херня со стилями resolve() }))
Но ведь можно сделать функцию задержки до ближайшего requestAnimationFrame: function nextRAF() { return new Promise(resolve => requestAnimationFrame(resolve)) }
И затем писать так: await nextRAF() // всякая херня со стилями
Это ведь будет то же самое, что и в первом случае? Или есть какой-то смысл помещать код именно внутрь requestAnimationFrame, а не просто ждать, когда подойдёт его время?
>>3274046 >пыха быстрее дефолтной ноды не на порядки а раза в два - три Не надоел этот унылый троллинг? Тебя выше уже несколько раз опровергли с пруфами.
>>3274787 Хотя если на пыхе в флоатах считать чтобы интыджер оверфлоу не было <?php $s = 0.0; for ($i=0.0; $i<1000_000_000; $i++) { $s += $i; } echo $s;
то почти одинаковый по времени результат
time php test.php 4.9999999906711E+17 real0m11,805s user0m11,786s sys0m0,016s
Тестовое задание (очень типичное, кстати): реализовать рабочий пикрил. Всвязи с чем у меня вопрос - я может чего-то не понимаю? Может, от меня ждут знаний какой-то популярной UI-библиотеки? Ну потому что вся эта пагинация, дропдаун, сёрчфилд и т.д. - сами по себе сложные компоненты. Или от меня ждут нефункциональную "куклу"?
>>3274906 >обязательно ли знать html css для вката в жс и тс? define "вкат" чтобы учить JS и TS, html и css не нужны. чтобы найти работу на JS и TS, html и css нужны, если только ты не найдёшь работу бэкендером на ноде
>>3274787 Это круто, конечно, только это не единственный показатель, по которому можно сделать вывод, что один язык быстрее другого. Бенчмарки конкретно по RPS, latency, запросам в БД, сериализации JSON и т.д. не не в пользу пхп.
>>3275014 >Бенчмарки конкретно по RPS, latency, запросам в БД, сериализации JSON и т.д. не не в пользу пхп. Какие? Нодовские фреймворки медленнее тех что на PHP. Workerman написан на PHP без Си или чего-то другого. Ни один Нодовский фреймворк, который написан на чистом JS не дотянется до него. Потому что как я уже писал сто раз, у Ноды плохо написан сетевой стек. Ты ничего с этим не сделаешь. V8 не быстрее движка PHP. Поэтому никак Нода не может быть быстрее, если в PHP используется конкурентность.
>>3275149 1) Теперь тащи фремворки на пыхе заточенные под конкурентность на этих васянских велосипедах. 2) Милипиздрическая прибавка к перформансу никак не компенсирует убогость самой пыхи как языка и платформы 3) Если что-то потебуется считать на цпу, то ноду легче через к раббит соединить с тем же голенгом. Напиши на чистой пыхе один скрипт - одновременно консумер очереди чисел и хттп ручка отправляющая эти числа через SSE в браузер. На ноде делается стандартными средствами ноды. На пыхе только через васянское говно типа свуле
>плохо написан сетевой стек Специалист по сетевым стекам? Тогда конкретнее выражай свою мысль.
>>3274914 В целом любое тестовое задание это дерьмо пеликана. Потому что я где-то делал и мне даже бывало не отвечали, типо вообще похую. Причем оно гавно на любом этапе, до интервью, после. Есть фирмы, которые платят за выполненное тестевое, даже если ты им не подошел. Все остальное - клоунада. То что ты сбросил, это можно на коленке сделать за пару часов или много много дольше. Картинка несет мало информации
>Нодовские фреймворки медленнее тех что на PHP В бенчмарках нодовские фреймворки быстрее. Я устал просить у тебя пруфы, так что просто констатирую, что ты либо троллишь, либо по какой-то причине фантазируешь и отрицаешь очевидную реальность.
>Workerman написан на PHP без Си или чего-то другого. Ни один Нодовский фреймворк, который написан на чистом JS не дотянется до него. Да, workerman крут, только на нём никто не пишет бекенды, бекенды пишутся на симфони и ларе, которые очень медленные относительно ноды и тем более бана, и даже когда тот же симфони используется вместе с workerman, то он медленнее того же fastify, судя по >>3273923
>Потому что как я уже писал сто раз, у Ноды плохо написан сетевой стек. Ну допустим плохо, но в итоге в реальных условиях (сравнение rps и latency популярных веб фреймворков в типичных бекенд задачах) нода всё равно быстрее пхп.
>Ты ничего с этим не сделаешь. V8 не быстрее движка PHP Вот тут видно >>3273955 перформанс в CPU bound задачах посложнее инкремента (пхп есть только в 1 и 2 графике), и ещё раз добавлю в этот пост скрины бенчмарка, где видно, что у symfony-swoole и symfony-workerman перформнас ниже фастифая, и немногим выше дефолтного неста, который базируется на медленном экспрессе. yii2-workerman, laravel-workerman, laravel-swoole — всё 3 ниже тормознутого экспресса. Так что может workerman и крутой, но фреймворки добавляют какой-то пиздецовый оверхед. А фастифай вот быстрее голой ноды, ну не удивительно, там один из кор мейнтейнеров ноды в разрабах.
>Поэтому никак Нода не может быть быстрее, если в PHP используется конкурентность. Если ты имеешь в виду голый swoole или workerman, то тогда справедливо сравнивать с решениями на uWebSockets. Но ещё раз, на голом воркермене не пишут.
>>3275194 >1) Теперь тащи фремворки на пыхе заточенные под конкурентность на этих васянских велосипедах. Да, в этом вся суть. На втором пике этого поста всё видно. В ноде тоже можно завелосипедить на uWebSocket, точнее такого уже много сделано. Но большинству проектов более чем достаточно nest-fastify.
>>3274914 Не пробовал у них спросить, нужно ли/можно ли использовать ui либы? Без либ это будет долго, но иногда просят именно без, чтобы увидеть как вручную будедь писать все эти дропдауны и прочее подобное
>Милипиздрическая прибавка к перформансу 120k rps на R5600G это небольшая прибавка? Нода даже 50к не вытянет. Латенси 50 миллисекунд!
>убогость самой пыхи как языка и платформы ЯЗык и платформа имеют много плюсов, как и JS с V8. Минусы компенсируются встроенными либами и сторонними тулзами. На самом деле, в PHP давно есть мощные средства для конкуретного и параллельного исполнения, например либа Parallel. Проблема в людях, которые не используют все фичи. В Ноде нет ничего подобного Parallel или Workerman.
О чем ты споришь вообще? Голый PHP без асинхронности 65-е место, а голая Нода 104-е! Кхм... Подключаем асинхронность с Workerman и получаем 33-е место в общем зачете! В общем зачете! Там где Rust, C/C++, Java, Go, .NET...
Нода в низах. И только uWebsockets.js (Hyperexpress тоже на нем работает) немного выше Workerman. Ну и Just-js, который хоть и хорош, не готов к работе, и это вообще отдельный рантайм. Авто uwebsockets крутой Си-хакер, он написал либу для работы с json на Go, которая оказалась в 3 раза! быстрее встроенной, написаной в Гугле. Но это не Нода, это отдельный Си и C++ код. Сама Нода медленная.
>>3275253 >Сама Нода медленная Это не компенсирует что пыха уродливое говно, синтаксис которой даже двощ считает wipe symbols Кому надо скорость будут писать не на пыхе. А пыха как фронтенд явно лишнее звено.
>>3275261 Это не правда. Синтаксис у PHP почти как у Си. JS же имеет куда больший минус, это язык для написания, но не для чтения. Его невозможно читать. На этом все его плюсы перечеркиваются.
>>3275268 Ты совершенно необъективен. С JS я познакомился гораздо раньше PHP. Мне нравится JS, в нем нет перекоса на использование классов, нет так называемого "ООП головного мозга", у него лаконичный синтаксис, можно писать и кратко и понятно. Проблема опять же в людях, которые понятно писать не умеют и не хотят.
>>3275253 >Зачем ты сравниваешь комбайн Symfony с нодовскими микрофреймворками? Fastify и nest это не микрофреймворки.
>Они огромные и написаны без асинхронности. Под "без асинхронности" ты имеешь в виду symfony без workerman или swoole под капотом? Так я уже несколько раз скинул скрины, где symfony-workerman и symfony-swoole перформят чуть лучше самого медленного нодовского экспресса.
>О чем ты споришь вообще? Голый PHP без асинхронности 65-е место, а голая Нода 104-е! Кхм... Подключаем асинхронность с Workerman и получаем 33-е место в общем зачете! В общем зачете! Там где Rust, C/C++, Java, Go, .NET... Подключаем асинхронность с Workerman куда, в symfony? Тогда мы получаем место ближе к дну, на уровне тормознутого экспресса. И если ты берёшься сравнивать голый workerman, то справедливо сравнивать с решениям на uWS.
>Нода в низах. И только uWebsockets.js (Hyperexpress тоже на нем работает) немного выше Workerman. Ну и Just-js, который хоть и хорош, не готов к работе, и это вообще отдельный рантайм. Авто uwebsockets крутой Си-хакер, он написал либу для работы с json на Go, которая оказалась в 3 раза! быстрее встроенной, написаной в Гугле. Но это не Нода, это отдельный Си и C++ код. Сама Нода медленная. V8 это тоже не нода, это отдельный низкоуровневый код? И какой-нибудь libuv тоже? Ты же знаешь, что нода в принципе написана на си и плюсах. Только swoole и workerman это не пхп, это же отдельные проекты. В bun uWS тоже не засчитывается почему-то с твоей странной точки зрения, хотя это прямо внутренняя часть бана.
>>3275266 >JS же имеет куда больший минус, это язык для написания, но не для чтения. Его невозможно читать. На этом все его плюсы перечеркиваются. Так пиши на TS, он прекрасен и для написания, и для чтения.
>>3275813 >все через any Ты скозал? У нас даже проверка на PR стоит, что если падает еслинт (в котором есть правило на отсутсвтие any) - апрувов не получишь и кнопка мерджа активной не станет. >>3275862 Кастую твой высер в any кста.
>>3275515 Да, довольное ебало, потому что в критпе: 1. Много денег 2. Много интересных проектов 3. Удалёнка по всему миру, а не только по родной стране
>>3275968 Подвоха нет, но есть нюансы. В процессе устройства на работу могут спросить текущее место пребывания и могут отказать в рассмотрении, если ты живёшь в России/Украине. После устройства уже похуй будет, лишь бы ты мог принимать зарплату. И с налогами придётся разбираться самостоятельно, но это не так уж сложно.
>>3275516 А с чего ты вообще взял про релокацию? Придумал? В вакансии ничего про этого нет. Ты работаешь удалённо и живёшь в какой угодно точке мира, релоцируешь себя сам куда сможешь. 5000-10000к баксов в месяц неплохая сумма, но вполне обыкновенная дли работы в крипте, даже я бы сказал маленькая, учитывая, что это компания, разрабатывающая USDT. В российском бигтехе на синьке 400 это практически потолок, многие и за 300-350 работают. Короче, чистыми получается тысячи 4 баксов, а работа часто довольно унылая.
>>3276012 >правило на отсутсвтие any Да все прекрасно знают, тупоскриптодебил, что вместо работы ты сочиняешь типы, а потом правила для контроля этих типов. А потом кабаныч выкидывает тебя на мороз и ему делают рабочий продукт, а не твой нерабочий типодроч.
>>3275505 Во-первых, описание типов это составная часть задач. Во-вторых, они и без any быстро решаются, если разработчик не лоускилл или не свежий неопытный вкатыш. >>3275526 Так any-хуйня это как раз чистый JS. Тебе, видимо, проекты на более серьёзном языке не доверяют, не хватает навыков, знаний, опыта, ума, чтобы быстро решать задачи на тайпскипте без использования any. Any можно в принципе практически никогда не использовать, есть unknown, который нормальными инженерами крайне редко используется в качестве замены any. >>3275813 В нормальных компаниях так делают, а полноценно используют типизацию. Ты просто скорее всего говоришь из своего опыта работы в третьесортных помойках, экстраполируешь его на все остальные компании и проекты, к которым тебя никогда близко не подпускали и не подпустят, потому что ты либо не очень умный, либо обиженный. >>3276071 Рабочий продукт, в исходниках которого нет типизации? В 2024? Курам на смех.
>>3276088 "Я люблю обмазываться типами и дрочить" "Все серьезныеTM конторы" И другие "выпуки с аргументами" от тайпскриптодурачка, не переключайте канал
Помогите не программисту
Аноним18/09/24 Срд 20:23:11№3276123425
>>3275436 Ты в каком классе учишься? Symphony и Laravel огромные комбайны с миллионами строк кода, с функционалом которых никакой Nest не сравнится. Их писали давно, когда про асинхронность никто и не думал. Их код не рассчитан на конкурентное выполнение.
Нода медленная. uWS и Bun это не Нода, это отдельный компилируемый код. Workerman написан на PHP и производительней Ноды более чем в 5 раз! Даже голый PHP более производительный чем Нода. И uWS/Bun не быстрее чем Workerman.
>>3276127 >Symphony и Laravel огромные комбайны с миллионами строк кода, с функционалом которых никакой Nest не сравнится. Их писали давно, когда про асинхронность никто и не думал. Их код не рассчитан на конкурентное выполнение. И что? Факт остаётся фактом: когда пишут бекенд на пхп, то берут Symphony и Laravel, когда пишут бекенд на ноде, берут Nest, Fastify, Express.
>Нода медленная. Смотря относительно чего. Судя по многочисленным пруфам выше, не медленная, вполне средняя. Ок, прикреплю ещё раз результаты бенчмарка по CPU bound задачам, там и Bun есть. По RPS и latency в вебе уже не раз пруфал, что перформнас типичного бекенд фреймворка на пхп ощутимо хуже чем на ноде.
>uWS и Bun это не Нода, это отдельный компилируемый код. Workerman написан на PHP и производительней Ноды более чем в 5 раз! Wokerman это тоже не PHP, это отдельный код, отдельный фреймворк. Да и будь он не отдельным, он перформит всего лишь чуть лучше Express, когда идёт в паре с Symfony/Laravel/Yii.
>Даже голый PHP более производительный чем Нода. Смотря в чём. В CPU-bound нет, в веб-задачах в некоторых бенчмарках нет, в некоторых да. Но сравнивать голый PHP и голую Ноду нет смысла, на голых никто не пишет бекенды. Кстати, Techempower использует 18 версию Ноды, она медленее LTS 20 и последне 22.
>И uWS/Bun не быстрее чем Workerman. Снова отрицанее реальности? Пик 2.
>>3276127 А-ха-ха. Какие миллионы строк кода? Ты хоть писал на них, код читал? Или просто теоретик? Что симфони что ларавел простые как палка. Особенно ларавель. Да по документации сравни количество фич в лаке и в несте. Где у тебя в ларавеле поддержка тсп микросервисов? Ларка это просто инструмент чтобы хттп ручки с базой данных соединить, прикученна сбоку очередь, для игрушечных проектов и скафолдинг достаточно удобный. На несте билинги пишут, а на ларке форму заказа для шаурмичной.
>>3276160 В Ларе есть Octane, Livewire и еще куча фич, по сути отдельные проекты. Еще скажи, что Rails микрофреймворк. Лара по фичам и соответственно по объему кода примерно соответствует Рельсам. В Ноде никогда не было и не будет подобного фреймворка.
>>3276172 Что тебе октане дает. Ускорение? Ты застаь сначала пыхарая нормальные запросы к бд написать. Что ты собрался еше ускорять? Лайвире ноуней хуйня от одного кренделя. Только хуево об ларке свидетельсвует, что она последнее время всяким дерьмом загадилась ради хайпа. Зачем тога формы выпилили из ларавеля. Хотели кодобазу почистить.. В симфони хоть хотвире из рельсов взяли а не стали всякую чушь тащить. Хотвире со стимулусом в любом фреймворке прикручивается. Опять же это все хуйня для шаурмичных. >В Ноде никогда не было и не будет подобного фреймворка. Какого такого? Ты неста хоть доку открывал?
>>3276192 Ну да. Это говно чтобы UI компоненты на пыхе писать. Только нахой этим лисапедом для создания шаурмичных хвастаться. Я на пыхе за шесть лет так нормальной работы и не видел. Каждый раз либо мутный кабан с мутным проектом типа беттинга гамблинга, либо нищий кабан с магазином и интеграциями.
>>3276224 Есть пруфы, что через USDT отмывают мафиозные деньги? Нет. Зато миллионы людей по всему миру используют USDT чтобы дёшево и быстро переводить деньги друг другу, особенно людям в другие страны.
>>3276228 Мне пох. Я не про USDT пиздел. Анон вообще про крипту спрашивал. Если он будет в крипту вкатываться, то врядли в такие рафинированые компании, скорее в мутные ввяжется, которых в телеге дохуя, к челам со смехуечками из 90ых...
>>3276235 Вообще-то апелляция к хорошим компаниям, это не апелляция к авторитету. Хорошая компания подразумевает что в ней хорошие настроенные процессы, а значит они делают хорошие практики. Если бы он сказал, что Линус Торвальдс хорошо отзывался о тайпскрипте, тогда бы это была апелляция к авторитету.
>>3276235 Вот тут перечислены голые факты: > Во-первых, описание типов это составная часть задач. Во-вторых, они и без any быстро решаются, если разработчик не лоускилл или не свежий неопытный вкатыш. > Так any-хуйня это как раз чистый JS. Тебе, видимо, проекты на более серьёзном языке не доверяют, не хватает навыков, знаний, опыта, ума, чтобы быстро решать задачи на тайпскипте без использования any. Any можно в принципе практически никогда не использовать, есть unknown, который нормальными инженерами крайне редко используется в качестве замены any.
А вот тут просто вывод, сделанный из твоих постов: > Ты просто скорее всего говоришь из своего опыта работы в третьесортных помойках, экстраполируешь его на все остальные компании и проекты, к которым тебя никогда близко не подпускали и не подпустят, потому что ты либо не очень умный, либо обиженный.
>>3276238 Правильно, не идите сюда. Тут даже во второсортных относительно Tether компаниях полная удалёнка, зарплаты ощутимо выше рынка, интересные проекты. Не думаю, что вам такое нужно, лучше пукать в кресло в офисе Сбера за 300 сотыг рупий.
>>3276260 Так и область слабо связанна с тематикой треда. Хочется логику на жс/тс писать, а не контракты на солидите. Почему именно из жс треда туда пойдут, а например не из питоньего или пхпешного. Я вообще как-то раз попал на написание криптоговна на пыхе. Но я не выбирал это, в галере проект прилетел.
>>3276273 Контракты на солидити это отдельная специализация blockchain developer. А я речь веду про работу фронтом или беком в web3 компаниях, в этом случая работа это дефолтный react/next либо express/fastify/nest + web3 либы для подключения к потоку информации с блокчейна, а сами контракты такие люди не пишут.
>>3276303 Если Workerman это PHP, to UWS это Node.js. Если я буду писать бекенд на UWS, то я буду взаимодейтствовать только с Node.js и JavaScript. Если я пишу бекенд на Ноде без UWS, то я с написанными на C/C++ V8 и libuv тоже не взаимодействую. >µWebSockets is exposed to Node.js as a simple-to-use, native V8 addon.
>>3276317 >UWS тоже ка си++ расширение для ноды работает Заменяя сетевой стек Ноды. Получается, что ты сравниваешь уже не Ноду с PHP. Нода медленнее PHP, даже если PHP без асинхронности.
>>3276318 >Нода медленнее PHP, даже если PHP без асинхронности Если ты забыл, изначальное утверждение было конкретно про бекенд на ноде, а не просто нода. Про превосходство в перформансе у бекенда на ноде всё ясно тут: >>3276275
>>3276318 Ты как попугай говоришь про сетевой стек не ведая что ивент луп и организует в этот сетевой стек. Как у тебя сокеты селектятс если не через этот ивентлуп. У тебя в твоем васермане тоже стек заменяется получается. Точнее не заменяется а даже добавляется. Потому что без него пыха не может делать мультиплексинг сокетов
>>3276324 В процитированном тобой посте из бекенд фреймворков только Fastify, плюс ты привёл цифры из Composite Score, где в PHP учтены все результаты с workerman и swoole, а не только голый PHP. Ты, похоже, пытаешься троллить непробиваемой тупостью и твердолобостью. Так что я дополню что имел в виду в одном из своих первых постов >>3273070 Тут имелась в виду коммерческая разработка бекенда на JS/TS, которая делается на ноде, хотя если начинать бессмысленно меряться хуями, то важно именно JS/TS, чтобы не было кукареков про "Bun не считается". Но я всё-таки имел в виду коммерческую разработку, которая делается именно на ноде, и именно на популярных инструментах (Express, Nest, Fastify, иногда что-то типа Moleculer...). Поэтому очевидным образом ведётся речь о том, что типичный бекенд на ноде (Nest-Fastify) будет быстрее бекенда на Фастапи/Рельсах/Симфони и т.п., что легко подтверждается. Ну а ты дольствуйся тем, что голый ПХП чуть-чуть быстрее голой Ноды, хотя стоит к нему навесить Симфони с Ларой, то начинается заметное падение перформанса по бенчмаркам, даже если привасянить к основному фреймворку твой не являющийся PHP workerman.
>>3276332 >В процитированном тобой посте из бекенд фреймворков только Fastify А, ошибся, там Webman, а не Workerman. Ну тогда добавляй в сравнение Elysia, или UWS и hyperexpress.
>>3276339 Я уже много лет пишу на этом языке и по моим наблюдениям он только развивается, как и его экосистема. Но раст и сишарп крутые, не спорю, только зачем мне туда переходить, если мне и тут хорошо, да и микросервис на расте вполне смогу написать при необходимости.
>>3276343 >В чем заключается крутизна раста? Зачем он нужен, когда есть тот же C++? Тупорылые вопросы. А зачем нужен язык Х? Чтобы люди имели выбор! Или все обязаны использовать то, что ты используешь? Rust - это современный язык. Он блять появился не во время sourceforge и svn, когда трава была зелёной, а бородатые одмены писали баш скрипты вручную. С++ это мамонт программирования. Там каждая крохотуленька ебёт мозги, особенно окружение - надо autoconf настраивать, тесты, линтеры. Достоинство rust'а в том, что мне не надо об этом думать. Я не думаю о всех этих макросах, мейкфайлах, и т.д. Я просто сел и у меня уже все тесты, линтеры подхватились и настроились на раз-два. Мне не надо думать "а все ли зависимости установлены?". Если я ставлю вручную какую-то либу в С++, типа armadillo, мне надо ещё установить зависимости к зависимостям блять. Или если я в коде не там поставил указатель в С++, придётся гадать миллион лет, почему программа крашится. Такого не бывает в расте. С++ это дико переусложнённый язык.
>>3276400 В своё время он заборол AppleScript и VBScript, поэтому корпораты его ненавидят, выкатывают то Dart, то TypeScript, то ещё какую-нибудь парашу.
>>3276496 А каких апи не хватает? Недавно вот тестирование добавили, ещё экспериментальную поддержку тайпскрипта, вебсокеты и фетч без внешних зависимостей, watch mode (как в nodemon)
>>3276809 Ты троллишь просто, а не орёшь. Добавлять в принципе нужды даже и не было, потому что с самого начала для этого было много сторонних инструментов в экосистеме, ими и продолжают пользоваться. Их даже слишком много. Jest, Vitest, uvu, Supertest, RTL, Cypress, Enzyme, Mocha, Chai, Jasmine, Puppeteer, Playwright, Ava, WebdriverIO, @web/test-runner...