Một developer đã chia sẻ hành trình của họ từ việc vật lộn với các framework website truyền thống đến việc xây dựng toàn bộ trang web của mình thành một file nhị phân Go duy nhất. Cách tiếp cận này đã khơi mào các cuộc thảo luận về sự đánh đổi giữa tính đơn giản và các phương pháp phát triển web thông thường.
Developer này ban đầu đã thử các trình tạo trang web tĩnh phổ biến như Hugo , Jekyll và Ghost , nhưng cảm thấy không hài lòng do chúng có quá nhiều dependency và yêu cầu bảo trì. Các giá trị cốt lõi của họ tập trung vào những hệ thống mà họ có thể hiểu và duy trì một cách độc lập, với vòng phản hồi cực kỳ nhanh và độ tin cậy lâu dài.
Ưu điểm của ngôn ngữ Go cho các trang web đơn binary:
- Dễ dàng bảo trì bởi một người duy nhất
- Nhấn mạnh vào việc có ít phụ thuộc
- Cú pháp ngôn ngữ tương đối đơn giản
- Đảm bảo tương thích ngược
- Tạo ra các file binary được biên dịch tĩnh một cách dễ dàng
- Tốc độ biên dịch nhanh (dưới 10 giây)
- Thư viện chuẩn được phát triển tốt
Vấn Đề Với Các Trình Tạo Trang Web Tĩnh
Các trình tạo trang web tĩnh truyền thống đi kèm với một mạng lưới các dependency có thể bị hỏng theo thời gian. Ví dụ, Hugo dựa vào tính khả dụng của dịch vụ GitHub Pages , sự phát triển liên tục của dự án Hugo , tài liệu cộng đồng, hệ sinh thái plugin và các cơ chế triển khai. Developer này nhận thấy điều này tạo ra quá nhiều điểm lỗi tiềm ẩn cho một trang web cá nhân được thiết kế để tồn tại nhiều năm mà không cần bảo trì.
Các thành viên cộng đồng đã chia sẻ những trải nghiệm tương tự, với một số developer tạo ra các giải pháp tùy chỉnh của riêng họ. Một người bình luận đã đề cập đến việc xây dựng một chương trình Go với DSL tùy chỉnh widget builder như một sự thỏa hiệp giữa tính tùy chỉnh và sự đơn giản của markdown. Một developer khác đã chuyển từ Pelican của Python sang Next.js sau khi gặp phải các vấn đề về tùy chỉnh template.
Các phụ thuộc của Trình tạo trang web tĩnh (Ví dụ Hugo ):
- Tính khả dụng của dịch vụ GitHub Pages
- Tính khả thi của sản phẩm GitHub Pages
- Dự án Hugo với hơn 1,200 phụ thuộc
- Tài liệu cộng đồng Hugo
- Tính tương thích của hệ sinh thái plugin Hugo
- Tính nhất quán trong biên dịch nhị phân Hugo
- Cơ chế triển khai GitHub Pages
- Tính ổn định của ngôn ngữ Golang
Lợi Ích Của Cách Tiếp Cận Single Binary
Website dạng single binary mang lại một số ưu điểm so với các trình tạo trang tĩnh. Việc tạo nội dung động trở nên đơn giản - hiển thị địa chỉ IP của người truy cập chỉ cần bốn dòng code Go , trong khi các trang tĩnh sẽ cần JavaScript và các dependency bên ngoài. Quá trình triển khai sử dụng một shell script đơn giản để kiểm tra cập nhật git và tự động rebuild trang web.
Tuy nhiên, cách tiếp cận này đã nhận được một số chỉ trích. Một số developer chỉ ra rằng PHP có thể đạt được kết quả tương tự với độ phức tạp code thậm chí còn ít hơn. Khả năng truy cập của trang web kết quả cũng bị đặt câu hỏi, với người đọc lưu ý các vấn đề về định dạng mobile và khả năng tương thích với screen reader.
So sánh hiệu suất:
- Single Binary ( Go ): Hiển thị IP động chỉ với 4 dòng code
- Static Site: Yêu cầu JavaScript , các dependency bên ngoài, và xử lý tương thích trình duyệt
- .NET Kestrel: Render HTML động trong <100 microsecond bao gồm cả các truy vấn cơ sở dữ liệu
- Triển khai: Shell script đơn giản với tích hợp git và tự động rebuild
Ưu Điểm Về Hiệu Suất Và Triển Khai
Cách tiếp cận single binary có thể mang lại những lợi ích hiệu suất ấn tượng. Một developer đã đề cập đến việc đạt được việc render trang HTML động trong vòng dưới 100 microsecond bằng cách sử dụng máy chủ Kestrel của .NET , bao gồm cả quản lý trạng thái session và các truy vấn cơ sở dữ liệu. Mức hiệu suất này có thể xử lý các đợt tăng lưu lượng truy cập và các cuộc tấn công DDoS nhỏ mà không cần cơ sở hạ tầng bổ sung.
Sự đơn giản trong triển khai không thể phủ nhận - việc sao chép một file lên máy chủ và chạy nó loại bỏ nhu cầu cài đặt runtime hoặc đóng gói phức tạp. Điều này phù hợp với mục tiêu của developer ban đầu là giảm dependency và chi phí bảo trì.
Phản Ứng Cộng Đồng Và Các Lựa Chọn Thay Thế
Cộng đồng developer đã có phản ứng trái chiều với cách tiếp cận này. Trong khi một số đánh giá cao tính đơn giản và khả năng kiểm soát mà nó mang lại, những người khác lại cho rằng đây là việc over-engineering một vấn đề mà các công cụ hiện có đã giải quyết một cách thỏa đáng. Một số developer đã đề xuất các lựa chọn thay thế như Redbean , đóng gói các trang web thành các file thực thi đơn lẻ, hoặc sử dụng các framework nhẹ trong các ngôn ngữ ưa thích.
Tôi nghĩ phần lớn điều này chỉ là để tác giả tự giải trí, thích thú và vui vẻ. Ngoài ra, golang có lẽ là chiếc búa yêu thích của họ. Việc tự mình hun khói brisket hoặc làm đồ nội thất bằng nghề mộc không hiệu quả đối với tôi, nhưng tôi thích nó.
Developer ban đầu đã thừa nhận cách tiếp cận này không dành cho tất cả mọi người và khuyến khích những người khác sử dụng bất kỳ ngôn ngữ nào họ thích nhất. Họ hiện đang làm việc trên một hệ thống wiki mới sẽ thay thế trang web hiện tại của họ, duy trì triết lý single binary trong khi thêm các tính năng như chỉnh sửa dựa trên web và liên kết trang tự động.
Cuộc thảo luận làm nổi bật một căng thẳng rộng hơn trong phát triển web giữa việc sử dụng các công cụ đã được thiết lập với những phức tạp vốn có của chúng và việc xây dựng các giải pháp tùy chỉnh phù hợp với các nhu cầu và giá trị cụ thể. Mặc dù cách tiếp cận single binary có thể không phù hợp với mọi dự án, nó chứng minh cách các developer có thể ưu tiên khả năng bảo trì lâu dài và sự hài lòng cá nhân hơn là sự khôn ngoan thông thường.
Tham khảo: my website is one binary