Una de las cosas que me molestan un poco de Onebox es que el contenido de Onebox se almacena en caché en la publicación y no cambia al modificar los campos hasta que se edita la publicación.
Por ejemplo, creamos un OneBox desde una cuenta, y una semana después el usuario cambia su biografía…
Volver a descargar la Onebox cada vez que se veía una página la ralentizaría bastante. Sería absurdo volver a descargar una Onebox que nunca ha cambiado. No hay forma de saber si ha cambiado, por lo que forzar una reconstrucción de la publicación (con la llave inglesa o editando) es la mejor opción. Si supieras que alguna categoría probablemente tenga Oneboxes que quieras actualizar regularmente, podrías crear un plugin que, por ejemplo, volviera a generar todos los temas de esa categoría diariamente.
En general, los Oneboxes se almacenan en caché porque deseas limitar la tasa de raspado de sitios externos localmente para evitar que te bloqueen. (¡Pero, por supuesto, la caché también ofrece una ventaja de rendimiento!) Para eludir la caché en la ocasión excepcional en que lo necesites, simplemente agrega una cadena de consulta falsa como:
La caché de Onebox es absolutamente necesaria para el contenido externo y no se espera que se actualice. Me refería a los Oneboxes internos. Como mencioné en el ejemplo anterior, se espera que el Onebox creado por un usuario se actualice en todos los sitios al cambiar la biografía de la persona.
Además, los Oneboxes deben almacenarse en caché para el contenido interno, lo cual es necesario para reducir la carga, pero quizás no sea malo tener los Oneboxes internos indexados en algún lugar; si el registro de origen cambia, se programará una tarea de actualización para ellos.
En la situación actual, si Discourse actualiza el formato de los cambios en el Onebox (para casos internos), en las publicaciones antiguas seguirá mostrándose con el mismo patrón. Este problema se resolverá si almacenamos el contenido del Onebox como JSON en la publicación y lo formateamos desde el cliente.
Estoy integrando la compatibilidad con Onebox en mi sitio y al editar una publicación no se actualiza la caché del onebox. Tampoco veo una opción para “reconstrucción posterior a la publicación” en mi menú de la llave inglesa.
Sin embargo, agregar un parámetro de consulta falso sí funciona, aunque si regreso a la URL inicial, vuelve a aparecer la versión en caché.
¿Hay alguna configuración o truco que me esté faltando?
Ten cuidado: a veces, usar una CDN como proxy frente al sitio y activar la capa de caché en el proxy puede causar problemas. Si estás usando una CDN como proxy (como Cloudflare), desactívala temporalmente y vuelve a verificar el problema.
No estoy familiarizado con las CDN y no uso Cloudflare. Solo estoy agregando metadatos og: a mi sitio para implementar OpenGraph y, por lo tanto, Onebox.
Como resultado, estoy realizando muchos cambios en mi propio sitio y quiero ver cómo aparecen cuando se referencian desde Discourse.
Noto que editar una publicación no hace que el onebox actualice el enlace. Agregar un ?x=1 a la URL sí lo hace.
¿Debería el onebox volver a escanear la URL de destino cada vez que se edita una publicación?
No veo mucha adopción de esto… parece un error en mi opinión. ¿A menos que haya un control de casilla para activar y desactivar la actualización de Onebox?
Como ejemplo de un enfoque alternativo, esta página te permite probar tus metadatos para ver lo que obtendrás, pero también es una interfaz frontal para la caché de Facebook.
Es gracioso que su etiqueta OpenGraph parezca estar rota. ¡
Si pruebas una URL en esta herramienta, obtendrás los resultados de la caché y luego te mostrará un botón que puedes usar para volver a extraer el sitio y actualizar su caché.
Eso podría ser una buena opción para esta herramienta… quizás un botón que aparezca al pasar el cursor sobre una URL que está en la caché.
En su estado actual, mis primeras pruebas al implementar esta función siempre mostrarán lo que aparece en ciertos enlaces.
También estamos buscando una manera de actualizar los oneboxes, en nuestro caso, los oneboxes de otros temas en nuestro foro.
Nuestro caso de uso es crear documentación a través del foro, que puede recombinar otras publicaciones de wiki. Pero, dado que se trata de publicaciones de wiki, obviamente no es ideal que el onebox no se mantenga actualizado con las muchas ediciones que es probable que se realicen con el tiempo.
Sería genial si pudiéramos tener una configuración para actualizar automáticamente los oneboxes si coinciden con el dominio de nuestro foro y/o pertenecen a la categoría donde ocurrirá este caso de uso (wiki/docs).
Mientras implemento el soporte de OpenGraph en mi sitio principal (vinculado a Discourse a través de SSO), me encuentro con este problema cada vez con más frecuencia.
Un truco que realmente ayuda es que ya no inserto la URL real de inmediato, si es que alguna vez lo hago. En su lugar, utilizo el truco sugerido por @merefield anteriormente:
Añado un ?n=1 al final de cada URL la primera vez que la referencio. Si el onebox se ve mal, puedo actualizar la página, luego incrementar mi variable N e iterar hasta que se vea bien.
Una vez que termino, cualquier persona que inserte solo la URL obtendrá el raspado final de la página en lugar del primero.