Morph, một thư viện fullstack nhúng mới để xây dựng Ứng dụng điều khiển bởi Hypermedia mà không cần bước biên dịch, đã làm dấy lên một cuộc tranh luận sôi nổi giữa các nhà phát triển về ưu điểm của việc kết hợp mã phía máy chủ và phía khách hàng theo cách giống PHP. Thư viện này, chạy trên Hono và hỗ trợ các môi trường Deno, Node và Bun, nhằm đơn giản hóa việc phát triển web bằng cách cho phép các thành phần gọi API của chính nó để trả về hypertext.
Các Runtime Được Hỗ Trợ
- Deno
- Node.js
- Bun
So sánh với PHP
Nhiều nhà phát triển trong cộng đồng đã chỉ ra những điểm tương đồng giữa cách tiếp cận của Morph và mô hình truyền thống của PHP về việc trộn lẫn HTML và mã. Sự so sánh này đã kích hoạt cuộc thảo luận đáng kể về phương pháp phát triển hiện đại so với các mô hình cũ hơn. Một người bình luận đã nhận xét rõ ràng rằng PHP hiện đại đã phát triển theo hướng không còn trộn lẫn logic nghiệp vụ với mẫu giao diện:
PHP hiện đại không được viết theo cách mà logic nghiệp vụ được trộn lẫn với việc tạo mẫu giao diện. Có lý do chính đáng cho điều này.
Quan điểm này phản ánh xu hướng rộng lớn hơn trong ngành về việc tách biệt các mối quan tâm trong phát triển web, nơi logic trình bày được giữ tách biệt với logic nghiệp vụ. Cuộc tranh luận tập trung vào việc liệu cách tiếp cận của Morph có đại diện cho sự thụt lùi về các phương pháp cũ hay là một sự đơn giản hóa thực tế cho một số trường hợp sử dụng nhất định.
Cân nhắc về kiến trúc
Một số nhà phát triển đã nêu lên những lo ngại về cách kiến trúc của Morph sẽ xử lý các thách thức về khả năng mở rộng. Một nhà phát triển lưu ý rằng Morph dường như bỏ qua một trong những điểm bán hàng chính của PHP, phương pháp không chia sẻ gì, đơn luồng, thực thi và quên mà tôi có thể đặt sau bộ cân bằng tải và khởi chạy 100 máy chủ. Điều này nhấn mạnh một cân nhắc quan trọng cho bất kỳ framework web nào: nó hoạt động tốt như thế nào dưới tải và trong môi trường phân tán.
Cuộc thảo luận cũng đề cập đến những gì tạo nên bản chất của phát triển kiểu PHP. Một số người lập luận rằng việc đơn giản trộn lẫn HTML và mã thông qua các template literals được gắn thẻ JavaScript đã đạt được những gì PHP làm, đặt câu hỏi về giá trị bổ sung mà Morph mang lại ngoài một số lợi ích về CSS và tạo mẫu khác.
Nguyên tắc cốt lõi của Morph
- Các thành phần có thể gọi API của chính nó để trả về hypertext
- Tất cả các thành phần được render phía máy chủ với khả năng truy cập ngữ cảnh từ phía máy chủ
- Render và tái render thành phần độc lập
- Cấu trúc phân cấp thành phần với khả năng lồng ghép
- JavaScript phía máy khách tối thiểu hoặc không cần thiết
- Không yêu cầu bước build
- Không cần thiết kế cấu trúc dữ liệu API trước
- Có thể nhúng vào bất kỳ dự án Deno/Node/Bun nào
Phát triển hướng thành phần
Cách tiếp cận của Morph dường như nghiêng nhiều hơn về phát triển hướng thành phần tương tự như các framework như Blazor hoặc Angular, hơn là PHP truyền thống. Thư viện này nhấn mạnh các thành phần được render từ máy chủ có thể được render lại độc lập và lồng ghép vào nhau, tạo thành một hệ thống phân cấp. Mô hình này nhằm kết hợp các lợi ích của việc render phía máy chủ với tính năng động của các ứng dụng trang đơn, đồng thời giảm thiểu JavaScript phía khách hàng.
Đối với các nhà phát triển làm việc trên các dự án nhỏ hơn như bot Telegram, ứng dụng máy tính để bàn, hoặc công cụ nội bộ, Morph cung cấp một trải nghiệm phát triển có thể được tinh giản mà không yêu cầu tách frontend và backend thành các dịch vụ riêng biệt. Sự tập trung của thư viện vào việc không cần bước biên dịch và JavaScript phía khách hàng tối thiểu đặt nó như một giải pháp thay thế cho các framework nặng nề hơn cho các dự án không đòi hỏi sự phức tạp của chúng.
Khi phát triển web tiếp tục phát triển, các công cụ như Morph đại diện cho những thử nghiệm thú vị trong việc tìm sự cân bằng phù hợp giữa trải nghiệm nhà phát triển, hiệu suất và khả năng bảo trì. Liệu cách tiếp cận của nó có được áp dụng rộng rãi hay không sẽ phụ thuộc vào việc nó giải quyết tốt như thế nào các mối quan tâm được nêu ra bởi cộng đồng phát triển trong khi thực hiện lời hứa về sự đơn giản hóa.
Tham khảo: Morph