其原始API为互联网启用了日程安排功能,而其客户端是克制的杰作。
Google日历如何运作,以及我们作为工程师可以从中学到什么。
前端框架:无(!)。只有一些内部库用于身份验证和共享工具等功能。
前端样式:CSS类名,由JS调用。
前端存储:缓存存储、IndexedDB(离线模式)、CDN(图像和字体)。
API存储:Spanner数据库。
外部API:Google Meet、Google通讯录、Google身份验证。
服务:心跳、事件处理、通知。
其他:使JS下载和运行更快的内部编译器。
有趣的问题
当然,日历是一个大型CRUD应用程序。但不要被这愚弄——有许多艰巨的技术问题必须解决。
是的,构建HTML实际上可以很有趣!由于日历视图内容丰富,如果元素未隔离,则会出现重大性能问题。
以下是最重要的HTML层:
每个日历客户端都有一些有趣的算法
// overlapping events logic 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() //longest events go behind shorter events if start or end of targetEvent != start or end of any(events): if targetEvent overlaps multiple events: targetEventGoesInFrontOfEvents() else: orderEventsByStart() //events that start earlier go behind
\
请参阅Compass存储库以获取这些算法的完整实现。
这些是允许客户端代码保持简单和可靠的外部主力
[
\
构建全球规模的CRUD应用程序从架构图看起来可能很简单,但这种简单性仍然需要高水平的执行。
鉴于规模需求,您可以通过简单地不做某些事情来让自己的生活更轻松。
就像生活中一样,发布产品时认识自己是值得的。
Google日历并不试图成为执行助理用来每天安排40次会议的现代应用程序(这就是Vimcal的用途)。
Google日历的目标是成为其20亿用户中的任何一个都可以在没有手把手指导的情况下操作的简单应用程序。它在可访问性方面获得88/100分。UI不会改变。它不会宕机,如果宕机了,它有离线支持。
它就是能用。
这就足够了。
要在收件箱中获取这些深入分析,请订阅我的新闻通讯Fullstack Engineer。
\


