O Google Calendar é uma aplicação de calendário CRUD simples com uma API REST poderosa. O cliente é uma obra-prima de contenção, com uma framework frontend simples. A API é primitivaO Google Calendar é uma aplicação de calendário CRUD simples com uma API REST poderosa. O cliente é uma obra-prima de contenção, com uma framework frontend simples. A API é primitiva

A Arma Secreta de Engenharia do Google Calendar: Contenção

2026/01/05 03:00
Leu 5 min
Para enviar feedbacks ou expressar preocupações a respeito deste conteúdo, contate-nos em crypto.news@mexc.com

A sua API primitiva permite agendamentos para a internet, e o seu cliente é uma obra-prima de contenção.

Como funciona o Google Calendar e o que podemos aprender com ele enquanto engenheiros.

Arquitetura


Framework Frontend: Nenhum (!). Apenas algumas bibliotecas internas para coisas como autenticação e utilitários partilhados.

Estilização Frontend: Nomes de classes CSS, invocados por JS.

Armazenamento Frontend: Cache Storage, IndexedDB (modo offline), CDN (imagens e fontes).

Armazenamento API: Spanner DB.

APIs Externas: Google Meet, Google Contacts, Google Auth.

Serviços: heartbeat, eventing, notificações.

Outro: Um compilador interno que faz o JS descarregar e executar mais rápido.

Problemas Interessantes


Claro, um calendário é uma grande aplicação CRUD. Mas não se deixe enganar — houve muitos problemas técnicos exigentes que tiveram de ser resolvidos.

API de Calendário

  • REST+JSON desde 2011 (originalmente feed estilo REST+RSS)
  • Modelo de dados baseia-se fortemente em strings de recorrência iCalendar RFC 5545 (Microsoft e Apple usam objetos proprietários)
  • Os clientes podem observar/subscrever para receber uma notificação webhook quando os eventos mudam
  • Suporta sincronizações incrementais para velocidade…mas também requer que trate expirações e re-sincronizações por conta própria
  • Usa quotas e limites de taxa para reduzir problemas de desempenho
  • Poderosa mas primitiva. Dar-lhe-ão o suficiente para fazer o que precisar, mas não vão descobrir isso por si.

Layout HTML

Sim, estruturar HTML pode ser realmente interessante! Como as visualizações do calendário são ricas em conteúdo, grandes problemas de desempenho ocorrem se os elementos não estiverem isolados.

Aqui estão as camadas HTML mais importantes:

  • A grade: linha de dia inteiro, colunas de dia, eventos programados, contentor
  • O evento de pré-visualização, que não pode ser bloqueado numa linha/coluna
  • A camada de arrastar. Isto permite-lhe arrastar e largar tarefas para a grade
  • Formulários: flutuantes junto a eventos na grade e expandidos num diálogo de ecrã completo
  • Toasts: Para mensagens de confirmação

Algoritmos Frontend

Cada cliente de calendário tem alguns algoritmos interessantes

  • Posição do evento: o comprimento, altura e coordenadas (X, Y) de cada div de evento. Para calcular isto, precisa de ter em conta a duração do evento e a escala de visualização.
  • Comprimentos de eventos de dia inteiro: A largura e coordenadas Y, que precisam de ser ajustadas com base nos eventos circundantes.
  • Eventos sobrepostos: como ajustar eventos quando partilham horários. A implementação do Gcal é mais sofisticada em comparação com a do Outlook (que divide cada evento ao meio). Pseudo-código abaixo.

// lógica de eventos sobrepostos if start or end of targetEvent overlaps with any(events): if start and end of targetEvent = start and end of any(events): orderEventsAlphabeticallyByTitle() if start of targetEvent = start of any(events) and end != end of any(events): orderByDuration() //eventos mais longos vão atrás de eventos mais curtos if start or end of targetEvent != start or end of any(events): if targetEvent overlaps multiple events: targetEventGoesInFrontOfEvents() else: orderEventsByStart() //eventos que começam mais cedo vão atrás

\

Veja o repositório Compass para a nossa implementação completa destes algoritmos.

Serviços

Estes são os cavalos de trabalho externos que permitem que o código do cliente permaneça simples e confiável

  • Serviço Heartbeat — Permite que o GCal seja confiável e volte para o modo offline graciosamente
  • Serviço Eventing — eventos estilo pub/sub que alimentam os webhooks para clientes. Isto permite que outras aplicações construam sobre a API do GCal.
  • Serviço de Notificações — coordenar o timing das suas notificações pré-evento. O cliente poderia fazer isto sozinho em teoria, mas seria menos confiável.

[

\

Conclusões


Construir uma aplicação CRUD de escala global pode parecer direto a partir do diagrama de arquitetura, mas essa simplicidade ainda exige um alto nível de execução.

  • Fiabilidade da API: Como tantas aplicações dependem da sincronização bidirecional com o GCal de um utilizador, a API precisa de ser simples, extensível e confiável. Se eles cometerem um erro, quebram um exército de outras aplicações a jusante.
  • Segurança de dados: Os dados do calendário são extremamente sensíveis. Eles dependem fortemente de funções baseadas em âmbito para garantir que apenas as pessoas/aplicações que autoriza podem aceder aos seus dados.
  • Monitorização de serviços: Verificações de saúde, registo e sincronização estão a acontecer sem parar nos bastidores.

Dadas as exigências de escala, pode facilitar a sua vida simplesmente não fazendo coisas.

  • Não precisa de usar a stack em tendência. Imagine se eles largassem tudo para reescrever a sua aplicação em Angular. Depois React. Depois Svelte. Depois NextJS. Depois HTMX. Todos esses vieram depois do lançamento do Google Calendar. O GCal escolheu JS, mudou para a faixa da direita e tem navegado a 64MPH há décadas. Ninguém se importa.
  • Não precisa de publicar em todas as plataformas. Abra a aplicação de desktop do Google Calendar agora. Vou esperar.
  • Não precisa de acompanhar as tendências de estilização. Bootstrap. Bulma. styled-components. Tailwind. Nomes de classes CSS.
  • Não precisa de ter a melhor UX. Modo escuro. Formulários que conservam espaço. Modo claro #FFFFFF. Formulários de página completa.
  • Não precisa de ter o melhor desempenho. A sua pontuação lighthouse em Desempenho é 31/100.

Tal como na vida, compensa conhecer-se a si próprio ao lançar produtos.

O Google Calendar não está a tentar ser a aplicação moderna que assistentes executivos usam para agendar 40 reuniões por dia (É para isso que serve o Vimcal).

O Google Calendar pretende ser uma aplicação simples que qualquer um dos seus 2 mil milhões de utilizadores pode operar sem orientação. Tem uma pontuação de 88/100 em acessibilidade. A interface não muda. Não fica offline, e tem suporte offline se isso acontecer.

Simplesmente funciona.

Isso é suficiente.


Para receber estes mergulhos profundos na sua caixa de entrada, subscreva a minha newsletter, Fullstack Engineer.

\

Isenção de responsabilidade: Os artigos republicados neste site são provenientes de plataformas públicas e são fornecidos apenas para fins informativos. Eles não refletem necessariamente a opinião da MEXC. Todos os direitos permanecem com os autores originais. Se você acredita que algum conteúdo infringe direitos de terceiros, entre em contato pelo e-mail crypto.news@mexc.com para solicitar a remoção. A MEXC não oferece garantias quanto à precisão, integridade ou atualidade das informações e não se responsabiliza por quaisquer ações tomadas com base no conteúdo fornecido. O conteúdo não constitui aconselhamento financeiro, jurídico ou profissional, nem deve ser considerado uma recomendação ou endosso por parte da MEXC.

USD1 Genesis: 0 Fees + 12% APR

USD1 Genesis: 0 Fees + 12% APRUSD1 Genesis: 0 Fees + 12% APR

New users: stake for up to 600% APR. Limited time!