Giới thiệu
Trong bài viết này, chúng ta sẽ tìm hiểu về cấu hình PostHog trong codebase của Codebuff. Chúng ta sẽ xem xét:
- PostHog là gì?
- Tập tin analytics.ts trong Codebuff.
Tôi đã nghiên cứu các mẫu được sử dụng trong một dự án mã nguồn mở nổi bật trên Github Trending và viết bài viết này trong tuần này.
PostHog là gì?
PostHog là một nền tảng duy nhất dành cho những người xây dựng sản phẩm. Họ hỗ trợ các kỹ sư sản phẩm phát triển các sản phẩm thành công. Mọi công cụ SaaS mà một kỹ sư sản phẩm cần đều có. Điều này bao gồm các công cụ để xây dựng sản phẩm, giao tiếp với khách hàng và phân tích tất cả dữ liệu của khách hàng.
PostHog cung cấp các ứng dụng theo từng giai đoạn phát triển:
Giai đoạn khởi nghiệp/dự án phụ
Giai đoạn tăng trưởng
Giai đoạn mở rộng
Khám phá tất cả các ứng dụng của họ trong Product OS.
Tập tin analytics.ts trong Codebuff
Tôi đã tìm thấy hàm trackEvent
được gọi trong hàm recreateShell
như dưới đây:
typescript
export const recreateShell = async (cwd: string) => {
persistentProcess = await createPersistentProcess(cwd)
trackEvent(AnalyticsEvent.SHELL_RECREATED, { persistentProcess })
}
Hàm trackEvent
này được nhập khẩu như sau ở đầu tệp:
typescript
import { trackEvent } from '../utils/analytics'
Định nghĩa hàm trackEvent
Hàm trackEvent
được định nghĩa như sau trong tệp utils/analytics.ts:
typescript
export function trackEvent(
event: AnalyticsEvent,
properties?: Record<string, any>,
) {
const distinctId = currentUserId
if (!distinctId) {
return
}
if (!client) {
if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT === 'prod') {
throw new Error('Analytics client not initialized')
}
return
}
if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'prod') {
if (DEBUG_DEV_EVENTS) {
console.log('Analytics event sent', {
event,
properties,
})
}
return
}
client.capture({
distinctId,
event,
properties,
})
}
Khối mã dưới đây ngăn không cho gửi sự kiện ở bất kỳ môi trường nào khác ngoài môi trường sản xuất bằng cách chỉ ghi lại nó:
typescript
if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'prod') {
if (DEBUG_DEV_EVENTS) {
console.log('Analytics event sent', {
event,
properties,
})
}
return
}
Biến client
là một biến toàn cục được khởi tạo như sau:
typescript
let client: PostHog | undefined
...
export function initAnalytics() {
...
client = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_API_KEY, {
host: process.env.NEXT_PUBLIC_POSTHOG_HOST_URL,
enableExceptionAutocapture:
process.env.NEXT_PUBLIC_CB_ENVIRONMENT === 'prod',
})
...
Thực tiễn tốt nhất
- Khởi tạo client trước khi sử dụng: Đảm bảo rằng client đã được khởi tạo trước khi gọi hàm
trackEvent
để tránh lỗi. - Ghi lại các sự kiện trong môi trường phát triển: Khi đang phát triển, có thể ghi lại các sự kiện để kiểm tra mà không gửi chúng đến PostHog.
Những cạm bẫy phổ biến
- Không kiểm tra môi trường: Một số nhà phát triển có thể quên kiểm tra môi trường trước khi gửi sự kiện, dẫn đến việc gửi dữ liệu không mong muốn trong môi trường sản xuất.
- Thiếu thông tin trong properties: Đảm bảo rằng các thuộc tính được cung cấp cho sự kiện đầy đủ và hợp lý để có được số liệu phân tích chính xác.
Mẹo hiệu suất
- Tối ưu hóa số lượng sự kiện gửi đi: Chỉ gửi các sự kiện thật sự cần thiết để giảm tải cho hệ thống và tiết kiệm tài nguyên.
- Sử dụng các batch request: Nếu có nhiều sự kiện, hãy sử dụng batch request để gửi nhiều sự kiện cùng một lúc.
Giải quyết sự cố
- Lỗi không khởi tạo client: Nếu gặp lỗi 'Analytics client not initialized', hãy kiểm tra xem hàm
initAnalytics
đã được gọi chưa. - Sự kiện không được ghi nhận: Kiểm tra xem
distinctId
có hợp lệ hay không và đảm bảo rằng môi trường là 'prod' nếu bạn đang gửi sự kiện.
Về tác giả
Xin chào, tôi là Ramu Narasinga. Tôi nghiên cứu kiến trúc codebase trong các dự án mã nguồn mở lớn.
Email: ramu.narasinga@gmail.com
Muốn học hỏi từ mã nguồn mở? Giải quyết các thách thức được lấy cảm hứng từ các dự án mã nguồn mở.
Tài liệu tham khảo
Câu hỏi thường gặp (FAQ)
1. PostHog có miễn phí không?
PostHog có phiên bản miễn phí nhưng cũng có các gói trả phí với nhiều tính năng hơn.
2. Làm thế nào để tích hợp PostHog vào dự án của tôi?
Bạn có thể tham khảo tài liệu chính thức của PostHog để biết hướng dẫn chi tiết về cách tích hợp.
3. PostHog hỗ trợ những ngôn ngữ lập trình nào?
PostHog hỗ trợ nhiều ngôn ngữ lập trình như JavaScript, Python, Ruby, và nhiều hơn nữa.