Создание самого большого списка полезных библиотек с открытым исходным кодом

TL;DR

Каждый день мы видим «крутые» списки GitHub. Они великолепны.
Основная проблема в том, что иногда их нужно обновлять.
Сопровождающим нужно больше времени, иначе они уходят из компании.
Это также должно отражать полезность.

Я решил составить список, который будет делать две вещи.

  • Помогите новым библиотекам набрать обороты.
  • Пусть люди голосуют за свою любимую библиотеку.

Прежде чем мы начнем

Я очень рад рассказать вам, как я его создаю.
Но сначала, если у вас есть репозиторий GitHub, пожалуйста, добавьте его на наш сайт здесь.
Позже вы сможете найти его здесь:
https://github.com/github-20k/awesome-opensource

Хотел сэкономить 🤑 💰

У меня есть технический уровень создания собственной CMS и размещения ее на AWS — я позабочусь о масштабировании и CI/CD. Но это займет у меня массу времени, а также денег.

Поэтому я купил хостинг WordPress за 2 доллара в месяц у DreamHost.

Не упадите со стула — да, он медленный, и да, он не выдержит значительного трафика. Поэтому я использовал его + кэшировал почти все возможные результаты на сайте (включая поиск).

Преимущество WordPress в том, что вы можете использовать их API из коробки с помощью GET — /wp-json/wp/v2/posts; Кроме того, добавление расширенного подключаемого модуля настраиваемого поля автоматически отражается на результатах.

Ограничение 🙅🏻‍♂️

  • Медленный; все должно кэшироваться.
  • Невозможно выполнить «поиск».
  • Долгое время сборки (все кешируется).
  • Нет обновлений в реальном времени.
  • Почти невозможно реализовать бесконечную прокрутку (должна быть основана на нумерации страниц)

NextJS спешит на помощь

Я выбрал NextJS. У них отличный механизм SSG для кэширования всех страниц. Я не использовал новый подход к маршрутизатору приложений, я не считаю, что он хорошо работает, но я сделал учебник о нем.

Я все закэшировал 🤣
У нас семь маршрутов

  • Список трендов (/page/1)
  • Новый список (/новый/1)
  • Список категорий (/productivity/1)
  • Список языков (/language/javascript/1)
  • Список категорий + языков (/language/javascript/category/productivity/1)
  • Информация о сайте
  • Общий поиск (объясню, как реализовал)
  • И генерировать твиты (мы поговорим об этом позже)

Вы, наверное, можете себе представить, что список «Категории + Языки» самый большой, и это правда; если бы я добавил еще один такой фильтр, у меня были бы тысячи страниц.

Бесплатный план Vercel, играйте спокойно, когда не занимаетесь фоновой обработкой.

Но если вам нужны фоновые процессы, у вас возникнут проблемы с API.

Бессерверная функция — в бесплатной версии ограничение 10 секунд, в версии Pro 60 секунд.

Зачем мне API, если все кешируется

Спасибо, Нево, за вопрос.

Я хотел, чтобы люди добавляли свои собственные библиотеки.

Для этого мне нужно сделать несколько вещей:

  • Используйте GitHub GraphQL для получения информации о репозитории — аватар, владелец и URL-адрес домашней страницы.
  • Используйте ChatGPT 😉 в файле README.md, чтобы обобщить его.
  • Вставьте все в WordPress.

Вы, наверное, догадываетесь, что использование ChatGPT для длинных текстов требует времени.

Поэтому я решил сделать две вещи:

  • Выполните первое задание (GitHub GraphQL) синхронизации с одним из путей /API. (около 10 секунд)
  • Используйте Serverlessq, чтобы поместить всю информацию в очередь, выполняющую другой маршрут API. В случае сбоя он повторит попытку три раза (около 40 секунд).

Механизм голосования 👆🏻 ⬆️

Я сохраняю количество голосов за WordPress; это простой запрос API, который добавляет +1 к записи.
Я знаю — это атомарное действие, очереди нет, и это может привести к взаимоблокировке. Когда я добираюсь до времени, на сайт приходит огромный трафик. Я поставлю его в очередь.
А пока меня беспокоит более серьезное дело.

Как показать новое количество голосов без повторного рендеринга страницы?

Я начал пробовать сложные вещи с кэшированием и API. Но тут меня осенило — Супабаза.

Супабаза

Я делал гениальные вещи — до сих пор горжусь собой.
Я создал новую таблицу в Supabase под названием «голоса» и добавил дату подсчета голосов.
Я также добавил дополнительный реквизит в NextJS getStaticProps, называемый датой — и установите там текущую дату.

Поэтому каждый раз, когда у меня создается новая сборка кеша, страница получает новую дату. Но я просто использую старую дату, если нет новой сборки.

Оставалось только попросить Supabase — отдать мне все голоса после этой даты.

Затем я просто показываю Кэшированные голоса + Голоса Supabase.

И когда будет новая сборка, я, вероятно, получу от Supabase, что последних голосов 0.

Получить твит!

В последнее время я видел, как многие технические авторитеты составляли списки десяти лучших библиотек; Я подумал, что смогу помочь лидерам мнений и владельцам библиотек, позволив влиятельным лицам создавать списки на веб-сайте и публиковать их в Твиттере.

Построить HTML с правой стороны было легко; проблема, с которой я столкнулся, заключалась в том, как сделать картинку в конце.

Я искал Remotion, но проблема в том, что он плохо работает с Vercel.

Я решил сэкономить вычислительную мощность, используя html2canvas и позволив пользователю отображать изображения.

Дело в том, что если вы рендерите изображения, и они находятся в другом домене, вы получите проблему CORS, поэтому я немного переписал все фотографии:

Вот и все! Я надеюсь, что это было полезно для вас!

Можете ли вы мне помочь?

Отметьте репозиторий GitHub, чтобы больше людей могли ознакомиться с превосходными новыми инструментами 😎



Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .