Почему onebox кэшируется в постах?

Одна из вещей, которая немного беспокоит меня в Onebox, заключается в том, что содержимое Onebox кэшируется в посте и не меняется при изменении полей, пока пост не будет отредактирован.

Например, мы создаем OneBox из аккаунта, а через неделю пользователь меняет свою биографию…

Повторная загрузка Onebox при каждом просмотре страницы значительно замедлила бы работу. Бесполезно загружать Onebox заново, если он не изменился. Поскольку невозможно узнать, изменился ли он, принудительная пересборка поста (с помощью гаечного ключа или через редактирование) — это правильное решение. Если вы знаете, что в определённой категории, вероятно, есть Onebox, которые нужно регулярно обновлять, вы можете создать плагин, который, например, ежедневно будет пересоздавать все темы в этой категории.

6 лайков

Как правило, Onebox-результаты кэшируются, чтобы вы могли ограничить частоту запросов к внешним сайтам на локальном уровне и избежать блокировки! (Хотя, конечно, кэширование также дает преимущество в производительности!) Чтобы обойти кэш в редких случаях, просто добавьте фиктивный параметр запроса, например:

?myname=isbill

или что-то подобное в конец ссылки.

Это заставит систему обновить данные.

7 лайков

Кэширование Onebox абсолютно необходимо для внешнего контента, и не предполагается, что оно будет обновляться. Я имел в виду внутренние Onebox. Как я упоминал в примере выше, ожидается, что Onebox, созданный пользователем, будет обновляться на всех сайтах при изменении биографии этого человека.

Кроме того, Onebox для внутреннего контента должны кэшироваться, и это необходимо для снижения нагрузки. Однако, возможно, не будет лишним индексировать внутренние Onebox где-либо, и если исходная запись изменится, для них будет запланирована задача обновления.

В текущей ситуации, если Discourse обновит форматирование Onebox (для внутренних случаев), в старых сообщениях он всё ещё будет отображаться с тем же шаблоном. Эта проблема будет решена, если мы будем кэшировать содержимое Onebox в формате JSON в сообщении и форматировать его на стороне клиента.

3 лайка

Я внедряю поддержку Onebox на свой сайт, но редактирование поста не обновляет кэш Onebox. Также я не вижу опции «перестроить после публикации» в моём меню гаечного ключа.

Однако добавление фиктивного параметра запроса работает, хотя при возврате к исходному URL снова появляется кэшированная версия.

Неужели я упускаю какую-то настройку или трюк?

Моя версия: Discourse 2.5.5

Будьте осторожны: иногда использование CDN в качестве прокси перед сайтом и включение кэширующего слоя в прокси может вызвать проблемы. Если вы используете CDN в качестве прокси (например, Cloudflare), отключите его и проверьте проблему снова.

Я не знаком с CDN и не использую Cloudflare. Я просто добавляю метаданные og: на свой сайт для реализации OpenGraph и, следовательно, Onebox.

В результате я вношу много изменений на своём сайте и хочу посмотреть, как они отображаются при ссылке из Discourse.

Я заметил, что редактирование поста не заставляет onebox обновлять ссылку. Добавление ?x=1 к URL обновляет его.

Должен ли onebox повторно сканировать целевой URL каждый раз при редактировании поста?

Я не вижу большого отклика на эту тему… Мне это кажется ошибкой. Разве нет чекбокса для включения или отключения обновления onebox?

В качестве примера альтернативного подхода можно привести страницу, где вы можете проверить свои мета-данные, чтобы увидеть, что получится, но она также служит интерфейсом для кэша Facebook.

Забавно, что их тег OpenGraph, похоже, сломан! :slight_smile:

Если вы попробуете ввести URL в этом инструменте, он загрузит результаты из кэша, а затем предоставит кнопку, с помощью которой можно повторно просканировать сайт и обновить их кэш.

Это могло бы стать хорошим вариантом для данного инструмента… Возможно, кнопка, которая появляется при наведении курсора на URL, находящийся в кэше?

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

Мы также ищем способ обновлять onebox-блоки, в нашем случае — onebox-блоки других тем на нашем форуме.

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

Было бы здорово, если бы существовала настройка для автоматического обновления onebox-блоков, если они соответствуют домену нашего форума и/или относятся к категории, в которой будет применяться данный сценарий (вики/документация).

4 лайка

По мере того как я внедряю поддержку OpenGraph на своём основном сайте (подключённом к Discourse через SSO), я всё чаще сталкиваюсь с этой проблемой.

Один трюк, который действительно помогает, — это то, что я больше не вставляю реальный URL сразу, а если и вставляю, то не всегда. Вместо этого я использую приём, предложенный выше пользователем @merefield:

Я добавляю ?n=1 в конец каждого URL при первом упоминании. Если onebox выглядит плохо, я могу обновить страницу, затем увеличить переменную N и повторять процесс, пока всё не будет выглядеть хорошо.

Когда я закончу, любой, кто вставит просто URL, получит финальную версию скрапинга страницы, а не первую.

3 лайка