Thế là đã 2 tuần kể từ ngày triển khai dự án mạng xã hội sách Reader.vn với nhiều ấn tượng khó quên trong sự nghiệp làm web của mình cũng như nhiều thành tựu nho nhỏ ban đầu cho một mạng xã hội ngách. Tối nay mới có thời gian viết 1 bài để chia sẻ đến các bạn.
Đây có lẽ là loạt bài đầu tiên trong chuỗi bài viết chia sẻ những kinh nghiệm, kỹ thuật mà mình gặp phải trong quá trình triển khai mạng xã hội sách Reader.vn mà mình nghĩ các bạn triển khai ứng dụng web tầm trung dài hạn nào có thể cũng sẽ gặp phải.
Nhân việc hôm qua mình vừa triển khai xong hệ thống thống kê cho website (1/5 mà code điên cuồng cho quên buồn đó mà :D) nên mình chia sẻ một số nhận xét và quan sát về khía cạnh triển khai thống kê cho website.
Tại sao phải thống kê?
Có lẽ nhiều người cũng hỏi tại sao phải quan tâm đến các thống kê làm gì? Thật là ngớ ngẫn và thiếu sót nếu một hệ thống phục vụ cho người dùng mà lại không thống kê việc sử dụng website của người dùng.
Việc theo dõi các số liệu thống kê giúp bạn đưa ra những chiến lược hợp lý hơn cho website, cũng như kiểm nghiệm tính hiệu quả của các thay đổi, cập nhật trên website của bạn.
Ngoài ra, đây là hệ thống không thể thiếu để đo tình trạng sức khỏe của ứng dụng của bạn. Bạn hoàn toàn biết được nó có khỏe mạnh, ốm yếu hay có vấn đề hay không đều phụ thuộc vào thông số bạn lưu lại và thống kê.
Nếu hệ thống của bạn chưa có thống kê gì cả, nếu bạn còn quan tâm đến người dùng của mình, hãy gắn ngay một hệ thống thống kê để biết tình trạng sức khỏe của ứng dụng của mình.
Có bao nhiêu loại thống kê?
Trả lời câu hỏi này tùy thuộc vào cách bạn phân loại mà thôi, riêng mình có phân thành 2 loại, đó là thống kê out-site và thống kê in-site. Out-site analytic giúp thống kê các thông tin chung về truy cập, người dùng như trình duyệt, lượt truy cập, lãnh thổ và nhiều thông tin khác. In-site analytic giúp thống kê các thông tin đặc thù mà chỉ có ứng dụng của bạn mới có như số lượng blog, comment…
Thống kê Out-site (Out-site web analytic):
Out-site web analytic là hình thức thống kê mà mình không chứa thông tin thống kê và dựa vào một dịch vụ bên thứ 3 để thống kê. Cách triển khai kiểu thống kê này cũng khá đơn giản, hầu như là thêm 1 đoạn Javascript để request tới nơi cung cấp dịch vụ thống kê.
Đặc thù của loại thống kê này là can thiệp ở phía Client, tức là cái gì người dùng thấy thì thống kê thấy, hệ thống thống kê không can thiệp sâu hơn được vì chỉ can thiệp đến tầng HTML, Javascript mà thôi.
Google Analytic là một nơi rất tốt để triển khai Out-site analytic, với nhiều thông tin để bạn phân tích và đưa ra nhiều cải tiến hơn cho website. Ngoài ra cũng có nhiều website cung cấp dịch vụ thống kê này.
Mặc dù nói Out-site analytic nhưng hiện cũng có 1 số thư viện mình có thể cài đặt bên trong hệ thống của mình, giống như là tự triển khai 1 cái Google Analytic để dành riêng. Ví dụ như Open source Piwik và một số thư viện phân tích clickheat, clickmap…
Thống kê In-site (In-site web analytic):
In-site web analytic là hình thức thống kê mà bạn can thiệp sâu vào ứng dụng của mình và thống kê bất cứ thông tin gì mà bạn muốn, code triển khai thống kê dạng này sẽ nằm cùng với ngôn ngữ lập trình của bạn (PHP, ASP…).
Theo kinh nghiệm triển khai thì trong kiểu thống kê này cũng có thể phân thành 2 dạng con là : Collector Analytic và Hook Analytic.
Collector Analytic
Kiểu thống kê loại này bạn không cần can thiệp vào code ở mỗi chức năng mà có thể dựa vào table kết quả đã có thông tin về thời gian diễn ra hoạt động, mỗi lần cần thống kê thì bạn chạy 1 script collector để tổng hợp các thông tin cần thống kê.
VD: table USER có 1 field là “date_registered”, do đó tất cả record đều có thông tin ngày đăng ký, để lấy thông tin số lượng user mỗi ngày, mỗi tuần thì không cần can thiệp code analytic mỗi khi có thành viên đăng ký mà chỉ cần chạy script collector khi nào bạn muốn để có thông tin.
Thống kê kiểu Collector sẽ giúp ứng dụng bạn chạy trơn tru mà không thêm xử lý nào, và khi nào cần lấy thông tin thống kê thì collect từ các table với thông tin ngày tạo, ngày cập nhật…
Lời khuyên: các table nên có 1 field ngày tạo để lưu ngày tạo record, field này ngoài việc phục vụ dữ liệu hiển thị, nó còn giúp việc collect thông tin thống kê theo thời gian về sau.
Hook Analytic
– Kiểu thống kê này bạn cần can thiệp vào code ở những nơi bạn muốn lưu thông tin. Vì tính đặc thù của nó nên không thể lưu vào table với field thời gian tạo. Kiểu thống kê này sẽ ảnh hưởng đến Performance của ứng dụng chính vì phải xử lý thêm thông tin thống kê.
– VD: để thống kê số login trong 1 ngày, bắt buộc phải Hook vào đoạn code xử lý login thành công và phải tạo thêm table để lưu thông tin dạng Hook này. Sau đó, có thể dùng Collector để lấy thông tin và đưa vào thống kê.
Lời khuyên: Mặc dù thống kê là tốt nhưng đừng lạm dụng kiểu Hook vì sẽ ảnh hưởng đến performance của xử lý, vì có thể tốn thời gian để thực hiện 1 hoặc 1 vài câu query INSERT, mà tương tác với Database là một trong những thắt cổ chai của ứng dụng web lớn.
Hiển thị số liệu thống kê
Đối với các số liệu In-site và nằm trong database của bạn thì bạn phải tìm cho mình cách để hiển thị thông tin sao cho có ý nghĩa với bạn hơn. Nếu số liệu mà bạn vẽ dạng bảng để hiện các số liệu thì không ổn tí nào.
Để hiển thị dữ liệu, hiện có nhiều thư viện giúp bạn làm việc này. Thử google một số từ liên quan tới chart và open source thì bạn sẽ thấy thôi. Có 2 dạng chart là Flash và Image. Dạng flash thì có động đậy tí xíu còn dạng Image thì sử dụng thư viện đồ họa (gd2) của php để render hình.
Mình đã chọn 1 thư viện PHP vì ít ra mình có thể can thiệp sâu vào API của nó hơn và pchart.net là 1 open source đáp ứng đầy đủ yêu cầu của mình. Hiện tại Reader.vn đang sử dụng thư viện từ website pchart.net. Dùng thư viện này không đơn giản lắm, bù lại nó có API rất phong phú và documentation đầy đủ.
Hy vọng bài viết này giúp ích cho những bạn nào đang gặp vấn đề về triển khai thống kê cho ứng dụng web của mình. Mong nhận được chia sẻ từ các bạn.
Hi anh, em cũng đang sử dụng piwik để thông kê website của mình, tuy nhiên chỉ xử lí thống kê outside mà anh nói, qua bài này em biết được thêm nhiều thứ nữa, cám ơn bài viết rất có ích của anh 😀
pchart có hỗ trợ unicode không Tuấn?
À, nó cho load font, vậy là dùng unicode được!
Mỗi lần vào bloghoctap.com mình lại biết thêm nhiều kỹ thuật mới! Cảm ơn bạn nhiều! Happy coding!
Thanks về bài viết hay. Riêng về Reader.vn thì tình hình phát triển thế nào rồi?
Reader.vn phát triển tốt anh 🙂
Hi anh, bài viết của anh rất hữu ích. Tuy nhiên việc ghi lại thông tin thống kê không nhất thiết phải ghi vào DB. Theo em có thể ghi lại thành file log, sau đó sẽ có hệ thống riêng để phân tích các file log này. Do vậy ko phải lo vấn đề nút thắt cổ chai ở DB.
Cảm ơn bạn. Mình đang cần cái này.
Từ hồi giờ cứ nghĩ chỉ có thống kê của Google Analytic, ai dè còn có các hình thức thống kê khác. Cảm ơn bạn đã chia sẻ
Bài viết của bạn rất bổ ích. Cảm ơn nhiều.
blog này rất hay và bổ ích