169 похожих чатов

Подскажите Когда я объявляю переменные внутри метода способом let или var,

какое в них отличие?

И нужно ли после выполнения метода уничтожать переменные? TypeScript умеет делать очистку памяти автоматически?

19 ответов

15 просмотров

var - function-scope const/let - block {} scope Используйте const в 95% случаев, потом let, если надо менять переменную, и var, если хотите попасть в ад

Влад- Автор вопроса
Raman Yazvinski
var - function-scope const/let - block {} scope Ис...

а за что в аду горят var? чем плох скоуп на всю функцию?

Влад
а за что в аду горят var? чем плох скоуп на всю фу...

Потому что это не cool, крутые devs используют new синтаксис А если серьезно, просто забудьте про var, он не нужен уже. Если умеете им пользоваться - пишите, но блочная видимость const/let просто-напросто понятнее. Любой шарпист или джавист разберется с первой секунды, а про var им гуглить придется

Влад- Автор вопроса
Raman Yazvinski
Потому что это не cool, крутые devs используют new...

Спасибо за разъяснения. А можете еще пояснить как тайпскрипт работает с памятью? Нужно ли мне уничтожать объявленные переменные?

Влад
Спасибо за разъяснения. А можете еще пояснить как ...

ts не работает с памятью никак - он компилится в js. Переменные уничтожать не надо, а вот обнуление полей в классах видел неоднократно

Влад- Автор вопроса
Raman Yazvinski
ts не работает с памятью никак - он компилится в j...

понял, спасибо А подскажите как лучше сделать У меня 8 типов сущностей. Думаю создавать ли отдельные BehaviorSubject для каждого типа сущностей. Или сделать один BehaviorSubject в котором будет массив сущностей { 1: [array of objects], 2: [array of objects], ... 8: [array of objects], } Какой способ лучше? В каком случае будет BehaviorSubject будет потреблять меньше ресурсов и легче будет найти нужный объект?

Влад
понял, спасибо А подскажите как лучше сделать У ...

Вы сильное переоцениваете влияние решения на производительность Решать будет количество подписок (в т.ч. и rx-операторов в цепочке) и количество эмитов у сабжектов. Если бы была серьезная просадка по производительности, то сделал бы в одном сабжекте, но я не верю, что у вас тот случай Короче, выбирайте удобный вам способ

Влад- Автор вопроса
Raman Yazvinski
Вы сильное переоцениваете влияние решения на произ...

У меня есть категории, заголовки, комментарии, и еще 5 типов сущностей. Все они загружаются на 1 странице, которая состоит из множества компонент которые подписаны на сабджект. Объектов всего около 10 тыс, но на 1 странице загружается по 100-200 шт. Поэтому подписок выходит много. А еще приложение фоном слушает сокет, и может обновить какой-то объект, который пришел с сервера. В этом случае что может быстрее вызвать просадку по производительности: количество подписок, или большое количество данных в 1 сабджекте?

Влад
У меня есть категории, заголовки, комментарии, и е...

Количество подписок. Данные всего лишь хранятся в объектах/массивах, с ними ничего особо не происходит, просто ссылки на них бегают туда-сюда, а они копеечные

Влад
У меня есть категории, заголовки, комментарии, и е...

А вообще есть вкладка performance в devTools, там можете глянуть, что и сколько по времени выполняется

Влад
У меня есть категории, заголовки, комментарии, и е...

И еще, если данные организованы откровенно всрато, то есть лишние map, for, лишние ивенты в цепочках, то хранение в одном сабжекте может привести к низкой производительности https://www.learnrxjs.io/learn-rxjs/operators/filtering/distinctuntilchanged - думаю, он вам пригодится

Влад- Автор вопроса
Raman Yazvinski
И еще, если данные организованы откровенно всрато,...

У меня с сервера приходит массив объектов. Я сортирую их по типу и при выводе на экран я ищу в цикле те объекты, у которых нужный id или parent_id, это достаточно всрато? Как можно улучшить Спасибо за ссылку, пригодится

Влад
У меня с сервера приходит массив объектов. Я сорти...

Если поиск происходит постоянно, то сделайте map-ы, ключ-значение И еще, может ваш случай как раз, НИКОГДА не делайте байндинг к тяжелым функциям [item]="findItem()", где findItem пробегается по тысяче элементов - так нельзя

Влад- Автор вопроса
Raman Yazvinski
Если поиск происходит постоянно, то сделайте map-ы...

мэппинг к сожалению не получится, потому что ключем для поиска может выступать 2 разных поля, а может и другие критерии будут Вот какой алгоритм я сделал: 1) Сортирую по типу выходящие данные, выходит так: { 'categories': [тут массив объектов категорий] 'posts': [тут массив объектов публикаций] } 2) Дальше я подписываюсь в компоненте на сабж, и если пришло изменение, то тут: - Если нужно найти текущий объект категории, тогда циклом ищу в subj.caterories, выхожу break при совпадении - Если нужно найти все дочерние публикации в текущей категории, то тут прохожу по всем объектам в subj.posts и выбираю все у которых parent_id == category.id. И так же с комментариями, изображениями и тд. Получается что поиск происходит при инициализации компонента и при обновлении сабжа. Можно как-то улучшить такой алгоритм?

Влад
мэппинг к сожалению не получится, потому что ключе...

Если сабжект обновляется нечасто, то я не знаю, что можно сделать Если часто, то distinctUntilChanged или filter вам помогут. Или используйте какую-нибудь реализацию стора (ngrx/ngxs/akita), потому что они и есть большой оптимизированный сабжект

Влад
мэппинг к сожалению не получится, потому что ключе...

Как я и говорил, сделайте замеры в devTools/performance, посмотрите, что выполняется дольше всего

Влад- Автор вопроса
Raman Yazvinski
Если сабжект обновляется нечасто, то я не знаю, чт...

угу, спасибо за советы, я просто еще не вкурсе как делать замеры, только начал изучать фронт, обязательно разберусь А можете подсказать еще, вот я в каждом компоненте написал subscription.unsubscribe() при ngOnDestroy. Но мне непонятно в каких случаях прекращается подписка. Когда я иду на другой роут? А если на другом роуте те же компоненты, то происходит отписка от старых и подписка заново или продолжит слушать старую подписку тоже? А если у меня компонент открывается при условии *ngIf="!hideComments", тогда при hideComments == false подписка прекратиться?

Влад
угу, спасибо за советы, я просто еще не вкурсе как...

Почитайте про жизненный цикл компонентов Если компонент отображается через ngIf, то есть удаляется и появляется - компонент пересоздается, весь код в хуках выполняется заново. Роутинг - то же самое, если компонент пропадает из dom, то он умирает, вызывается ngOnDestroy Если на новом роуте те же компоненты - надо смотреть конфигурацию path1/:param1 => MyComponent1------ в таком случае зависит от настроек роутера, по умолчанию он будет использовать тот же компонент и не будет пересоздавать В остальных случаях создастся новый компонент, а старый умрет

Влад- Автор вопроса
Raman Yazvinski
Почитайте про жизненный цикл компонентов Если комп...

это много прояснило, спасибо большое за разъяснения

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта