其原始的 API 為網路排程提供了可能,而其客戶端則是克制美學的傑作。
Google 日曆如何運作,以及我們作為工程師可以從中學到什麼。
前端框架:無(!)。只有一些內部函式庫用於身份驗證和共享工具等功能。
前端樣式:CSS 類別名稱,由 JS 調用。
前端儲存:Cache Storage、IndexedDB(離線模式)、CDN(圖片和字型)。
API 儲存:Spanner DB。
外部 APIs:Google Meet、Google Contacts、Google Auth。
服務:心跳、事件處理、通知。
其他:一個內部編譯器,使 JS 下載和運行更快。
有趣的問題
當然,日曆是一個大型的 CRUD 應用程式。但別讓這個迷惑你——有許多艱鉅的技術問題必須解決。
是的,構建 HTML 實際上可能很有趣!由於日曆檢視包含豐富的內容,如果元素沒有隔離,會出現重大效能問題。
以下是最重要的 HTML 層級:
每個日曆客戶端都有一些精妙的演算法
// 重疊事件邏輯 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() //最長的事件在較短事件後面 if start or end of targetEvent != start or end of any(events): if targetEvent overlaps multiple events: targetEventGoesInFrontOfEvents() else: orderEventsByStart() //較早開始的事件在後面
\
請參閱 Compass 儲存庫以獲取這些演算法的完整實作。
這些是外部工作引擎,使客戶端程式碼保持簡單和可靠
[
\
建構全球規模的 CRUD 應用程式從架構圖看起來可能很直接,但這種簡單性仍然需要高水準的執行。
考慮到規模需求,您可以透過簡單地不做某些事情來讓自己的生活更輕鬆。
就像在生活中一樣,在交付產品時認識自己是值得的。
Google 日曆並不試圖成為行政助理每天用來安排 40 次會議的現代應用程式(那是 Vimcal 的用途)。
Google 日曆旨在成為一個簡單的應用程式,其 20 億使用者中的任何一個都可以在沒有手把手指導的情況下操作。它在無障礙性方面得分 88/100。UI 不會改變。它不會當機,如果當機了也有離線支援。
它就是能用。
這就足夠了。
要在您的收件匣中獲得這些深入分析,請訂閱我的電子報 Fullstack Engineer。
\