#database #web-applications
#База данных #веб-приложения
Вопрос:
Я разрабатываю веб-приложение, на странице которого отображаются обновления и объявления. Я не знаком с тем, как другие веб-сайты выполняют это. Люди хранят свои объявления / обновления в базе данных и просто обновляют свою базу данных всякий раз, когда у них появляется новое объявление?
Каковы стандартные методы, которые люди используют для выполнения чего-то подобного в масштабе?
Комментарии:
1. Должны ли пользователи видеть объявление каждый раз, когда они посещают сайт, или только один раз (например, уведомление).
2. @moeassal Я планировал создать на своем веб-сайте страницу «Обновления», на которой будет отображаться информация об исправлениях и планах на будущее для веб-сайта, а также предоставить пользователям возможность оставлять отзывы о последних изменениях. Пользователи не будут получать уведомления, но смогут посетить эту страницу, чтобы увидеть последние изменения. Я подумал, что жесткое кодирование обновлений в HTML страницы может быть неустойчивым, поэтому я подумал, что их следует откуда-то загружать. Мне было любопытно, как более крупные веб-сайты делали это в масштабе (поскольку на многих сайтах есть страницы «Объявлений» и тому подобное).
3. Я думаю, вы не знаете концепцию «рендеринга». Как вы управляете своим сервером? Какой язык программирования вы используете? Или, может быть, ваш вопрос теоретический, не так ли?
4. @moeassal Это скорее теоретически (вы можете использовать сервер NodeJS Express, если хотите). Мой вопрос заключается в том, что если у вас есть страница объявлений, которая требует частых изменений вручную, должна ли информация, заполняющая эту страницу объявлений, храниться в какой-либо базе данных, на которую администратор может отправлять обновления, или жестко закодирована в HTML страницы (или что-то еще)? Жесткое кодирование это кажется плохой практикой, но необходимость отправлять обновления в базу данных всякий раз, когда вы хотите добавить новое объявление, кажется мучительной.
5. Я бы настоятельно рекомендовал использовать базу данных и иметь модераторов, которые управляют обновлениями и объявлениями, как предлагает @moe. Обновления могут, например, находиться в таблице с UpdateID, updateTitle, updateMessa&e, UpdateStartDate и UpdateEndDate. Обновления будут отображаться между двумя датами, а затем автоматически исчезнут после даты окончания. И если объявления необходимо просмотреть хотя бы один раз, прежде чем исчезнуть, создайте таблицу, более похожую на AnnouncementID, AnnouncementTitle, AnnouncementMessa&e, а затем создайте ссылку на таблицу пользователей с флагом «да» / «нет» в таблице соединителей.
Ответ №1:
По сути, вам нужен серверный сервер, который запускает порт websocket для привязки клиентов. Чтобы клиент отправил свой запрос на публикацию объявления, это может быть сделано через веб-сокет или любой другой API (REST, SOAP, GraphQL).
Затем сервер может сохранить объявления в своей базе данных или / и отправить всем подключенным клиентам уведомление о том, что объявление было добавлено через порт websocket. Затем клиент может обработать ответ от сервера в соответствии со своей логикой.
Чтобы получать объявления для клиентов, которые не были подключены на момент объявления через websocket, вы можете просто ответить всеми объявлениями, сделанными после отключения клиента.
Комментарии:
1. Это лучший ответ. Websockets обычно используется правильно, когда вы хотите «отправить» данные клиенту. С решениями на основе клиентских запросов вам необходимо отслеживать последние полученные уведомления каждого клиента и устанавливать пороговые значения для выбора уведомлений, которые следует предоставлять, когда они попадают в конечную точку запроса. Вы также обычно хотели бы включить их в загрузку страницы. Другим источником, на который вы могли бы обратить внимание, было бы developer.mozilla.or&/en-US/docs/Web/API/Notifications_API /…
Ответ №2:
Существует множество возможных решений, все с разной степенью сложности и гибкости:
1. Жестко закодируйте все на своей HTML-странице
В краткосрочной перспективе это более простое решение, но по мере роста проектов оно будет становиться все сложнее и сложнее. Я бы не советовал делать это даже для небольших проектов.
2. Сохраните список в выделенном источнике данных
Например, создайте в своем проекте файл JSON со следующей структурой:
[
{
"type": "announcement",
"date": "2020-08-18",
"title": "New announcement!",
"content": "Bla bla bla...",
},
{
"type": "update",
"date": "2020-08-18",
"title": "Version 2.1.0",
"content": "Here is the chan&elo&: ...",
},
]
Затем ваше веб-приложение может загрузить этот файл и отобразить его соответствующим образом. Этот подход имеет некоторые преимущества:
- Вам не нужно каждый раз переписывать весь шаблонный html
- Изменения на странице обновления зафиксированы, поэтому их легче просмотреть или отменить
Однако вам все равно нужно вставить html в ваше content
поле, и это может быть проблематично делать каждый раз вручную (особенно если вам нужно добавить изображения, таблицы или более сложные элементы). Кроме того, изменения вносятся в кодовую базу, поэтому их нельзя делегировать специалисту, не занимающемуся техническими вопросами (например, менеджеру по маркетингу).
Кроме того, не очень эффективно каждый раз загружать и анализировать файл json. Вы можете добавить некоторое кэширование, но оно все равно не такое производительное, как база данных
3. Сохраните список вручную в базе данных
Это решение очень похоже на номер (2). Это обеспечивает некоторое улучшение производительности, но большинство других недостатков остаются в силе.
4. Используйте базу данных и реализуйте графический интерфейс для создания / редактирования / публикации объявлений
Идеальным решением является использование базы данных с одновременной реализацией в серверной части ограниченной области, где можно управлять объявлениями с помощью редактора WYSIWYG.
Преимущества:
- Максимальная гибкость, и для этого не требуется каждый раз писать HTML вручную
- Написать и опубликовать объявление может любой, это не обязательно должен быть разработчик
Недостатки:
- Вам необходимо разработать всю систему редактирования / публикации
Ответ №3:
Я не знаю, какой ваш язык программирования или технологии вы используете. Но, я полагаю, вам нужны обновления и объявления в реальном времени. Я предлагаю вам использовать базы данных реального времени, такие как FCM, для обработки этого: https://firebase.&oo&le.com/docs/cloud-messa&in&/concept-options?hl=id
В этом примере он использует NodeJS:
https://thecodebarbarian.com/sendin&-web-push-notifications-from-node-js.html
Ответ №4:
Это зависит от того, как вы хотите с этим справиться. Некоторые используют этот метод хранения в базе данных и ее обновления.
Другой подход заключается в том, что вы можете просто использовать веб-сканер для импорта объявлений / уведомлений, если вы берете ссылки с других веб-сайтов, и вам также не нужно создавать базу данных. Но ваш веб-сайт будет немного медленным, но сэкономит память для базы данных.
Ответ №5:
Стандартным методом размещения текста на веб-страницах без его жесткого кодирования является использование системы управления контентом или CMS. Это может быть большим и сложным, или простым и легковесным.
Подход, который, как я видел, работает лучше всего, заключается в использовании «безголовой CMS», которая предоставляет нетехническим пользователям пользовательский интерфейс для ввода контента и API, который позволяет вашему приложению захватывать этот контент (например, в формате JSON) и отображать его в любой используемой вами среде. Это работает для «Объявлений» или другого текстового содержимого, такого как часто задаваемые вопросы, правила и условия и т.д.
Другой подход заключается в использовании «генератора статических сайтов», который принимает текст в определенном формате и выдает его в виде HTML. Вы могли бы использовать это для построения конвейера для приема «объявлений», написанных в markdown и переданных в Git, которые преобразуются генератором статического сайта в HTML-фрагмент, который затем визуализируется с помощью вашего приложения NodeJS.
Ответ №6:
Как говорилось ранее, CMS (система управления контентом), вероятно, является правильным решением. Если вы еще не решили, как создать свое веб-приложение, я бы настоятельно посоветовал вам использовать веб-фреймворк.
Если вы ищете хорошее решение, я бы порекомендовал Djan&o и Djan&o CMS. Оба хорошо документированы, имеют открытый исходный код и могут масштабироваться по мере необходимости.
Djan&o:
https://docs.djan&oproject.com/en/3.1/contents/
Djan&o CMS: