Lemmy Lemmy 15 січня 2023, 01:06

Стан розробки UJournal 3.0

При­віт, хочу поді­ли­ти­ся тим як про­хо­дить роз­роб­ка бекен­да для UJ 3.0.

Я не пишу бага­то апдей­тів, тому що бага­то займа­ю­ся архі­те­кту­рою бекен­ду, а це потре­бує бага­то часу для того щоб про­те­сту­ва­ти та обка­та­ти бібліо­те­ки, та щоб навчи­ти­ся зв’я­зу­ва­ти все разом.

Виді­лив насту­пні пріорітети:

  1. Інде­кса­ція пошу­ко­ви­ми системами
  2. Швид­кість інтерфейса
  3. Опти­мі­за­ція графіки
  4. Само­мо­де­ра­ція
  5. Ста­біль­ність та швид­кість розробки

Для того щоб сайт добре інде­ксу­вав­ся я вико­ри­сто­вую NextJS та сер­вер­ний рендерінг.

Сер­вер­ний рен­де­рінг також покри­щить швид­кість від­ма­льов­ки інтер­фей­са. Тепер немає пла­шек-плей­схол­де­рів які зараз пока­зу­ю­ться перед загруз­кою контента.

Гра­фі­ка опти­мі­зу­є­ться дво­ма спосо­ба­ми: на клі­єн­ті і на сер­ве­рі. На клі­єн­ті у той момент коли дода­є­ться кар­тин­ка від­бу­ва­є­ться зжи­ма­н­ня до макси­маль­но­го роз­мі­ру 1 МБ. На сер­ве­рі усі кар­тин­ки від­прав­ля­ю­ться на CDN (типу AWS S3). Такі опти­мі­за­ції дають можли­вість заван­та­жу­ва­ти мень­ший об’єм інфор­ма­ції та інфор­ма­ція йде з єди­но­го місця, яке можно опти­мі­зу­ва­ти вже на рів­ні CloudFlare.

Само­мо­де­ра­ція є важли­вим прі­о­рі­те­том. Ми вже має­мо рей­тинг поста, але тепер є окре­мі нала­шту­ва­н­ня для того щоб при­би­ра­ти пости з низь­ким рей­тин­гом зі стрі­чки. Ще дода­є­тсья можли­вість ігно­ру­ва­ти людей та теги, що дає можли­вість нала­шту­ва­ти сайт під себе. Ще обмір­ко­вую фун­кцію Поскар­жи­ти­ся”. Хоче­ться макси­маль­но авто­ма­ти­зу­ва­ти цю фун­кцію, щоб люди самі могли бло­ку­ва­ти шкі­дли­вий кон­тент. В голо­ві три­маю такі при­кла­ди як: теле­грам бот, який пока­зує голо­су­ва­н­ня при яко­му люди­на бло­ку­є­ться коли набе­ре біль­шість голо­сів від уча­сни­ків” та така сама фун­кція /​votekick з гри Counter-Strike”. Поки ще напев­но не можу ска­за­ти за яким кри­те­рі­єм оби­ра­ти людей котрі змо­жуть заба­ни­ти люди­ну, але можли­во, цей крі­те­рій буде рей­тинг кори­сту­ва­ча. Тоб­то від 5% до 20% людей з най­ви­щим рей­тин­гом авто­ма­ти­чно отри­му­ють можли­вість голо­су­ва­ти за бло­ку­ва­н­ня інших людей, але іні­ці­а­то­ром голо­су­ва­н­ня може ста­ти будь хто.

Ста­біль­ність та швид­кість роз­роб­ки. Тут най­глов­ні­шим є обра­ні інстру­мен­ти. Прі­о­рі­те­тним крі­те­рі­єм у вибо­рі інстру­мен­та для мене є під­трим­ка цим інстру­мен­том TypeScript. Напри­клад, най­улю­бле­ні­шим інстру­мен­том для мене ста­ла ORM Prisma. Чому? Тому що є можли­вість опи­са­ти схе­му бази даних та збе­ріг­ти її в коді і тре­ка­ти змі­ни в Git, але най­го­лов­ні­шим є те що Prisma вміє гене­ру­ва­ти мігра­ції, попе­ре­джу­ва­ти якщо є загро­за вида­ле­н­ня даних, під­три­мує типи даних на рів­ні кода. Тоб­то коли я роблю змі­ну в схе­мі БД, то VSCode авто­ма­ти­чно під­сві­чує всі місця де тре­ба зро­би­ти рефа­кто­рінг. Це дуже силь­но під­ви­щує ста­біль­ність дода­тка. Можу рекомендувати.

Ще одним інстру­мен­том, або мабуть архі­те­ктур­ним прин­ци­пом, є чер­ги. Я дуже сил­ньно від­чув користь з вико­ри­ста­н­ня черг, тому що вони дають можли­вість не роби­ти всю робо­ту в одно­му місці, а від­кла­да­ти її і обро­бля­ти в іншо­му місці. Також вони дозво­ля­ють пла­ну­ва­ти важли­ві систем­ні зада­чі. Це такий собі Cron, але з людя­ним інтер­фей­сом та можли­ві­стю від­слід­ку­ва­ти різні процеси.

Який пото­чний стан роз­роб­ки? Остан­нє що я реа­лі­зу­вав: це систе­му спо­ві­щень. При дода­ван­ні від­по­віді та реа­кції на пост від­прав­ля­є­ться еле­ктро­ний лист зі спи­ском нових сповіщень.

Також в пла­нах є дода­ва­н­ня спо­ві­щень, які будуть при­хо­ди­ти у вигля­ді Push пові­дом­ле­н­ня, зві­сно якщо кори­сту­вач дозво­лив це у браузері.

Якщо зро­би­ти загаль­ний під­су­мок на якій ста­дії роз­роб­ка, то я доро­бив всі основ­ні роз­ді­ли: Пости, Люди, Теги, Спо­ві­ще­н­ня, Нала­шту­ва­н­ня, Про­філь. Фун­кціо­наль­но сайт пра­цює. Можно ска­за­ти, що біль­шість шля­ху прой­де­но. Зараз насту­пним кро­ком є: реа­лі­за­ція стрі­чки Від­по­віді, Дай­дже­сту за тиждень та впро­ва­дже­н­ня дизай­ну.

Хочу пока­за­ти скрін, який з пер­шо­го погля­ду не вра­жає дизай­ном, але тому що пер­шим прі­о­рі­те­том є бекенд та фун­кціо­нал, а не дизайн.

Можу скза­ти, що під­хід, коли роби­ться спо­ча­тку пов­ні­стю фун­кціо­нал (без дизай­ну), є дуже вда­лим, з мого погля­ду, тому що я не від­во­лі­ка­юсь на при­кра­ше­н­ня інтер­фей­су чи шрі­фти, а скон­цен­тро­ва­ний на функціях.

Можу тіль­ки поба­жа­ти собі успі­ху в подаль­шій роз­роб­ці, а вам бажаю тер­пі­н­ня та сил. Потро­шку йде­мо впе­ред, наша мета рух. Всім тепла у ці зимо­ві тиждні!

  • 22
  • 6
  • 15

6 коментарів

  • arshat arshat 3 роки тому

    Добри­день! нова вер­сія кра­ще ніж lemmy. хоро­ша робо­та. Чи буде­те публі­ку­ва­ти в гітхаб? чи про­да­є­те скрипт? хочу зро­би­ти пла­тфор­му казах­ською мовою. Дякую!

    • 0
  • Іван Мазепа Іван Мазепа 3 роки тому

    Можу тіль­ки поба­жа­ти собі успі­ху в подаль­шій розробці

    Долу­ча­юсь до тво­їх поба­жань. Щиро дякую за твою працю
    Upd: див­но, що в мене цей пост тіль­ки зараз в стрі­чці виплив, зараз бачу йому місяць. 

    • 0
  • Псіноморф Псіноморф 3 роки тому

    @lemmy@ujournal.com​.ua @GoodComedian@ujournal.com​.ua
    кажи <s>паляница</s> мені, будь ласка
    як коре­ктно поста­ви­ти, ска­жі­мо, ||спой­лер||
    я вже RTFM’ed всю доку­мен­та­цію на markdown, markup і навіть на lemmy
    і затестив
    пра­цю­ва­ло ж( ти щось зламав?

    • 0
  • Борзон Гуся Борзон Гуся 3 роки тому

    Дякую за роботу!
    Може колись буде час дода­ти можли­вість від­прав­ля­ти репорт на помил­ку в текс­ті по Ctrl+Enter, було б супер 🥸

    • 0