Sử dụng npm trong dự án php
Trong khi mức độ phổ biến của Node. js đang tăng, lực kéo của PHP đang giảm. Với bối cảnh đó, bài đăng này sẽ giải thích chi tiết về 5 khía cạnh thực tế cần biết khi sử dụng Node. js cho nhà phát triển PHP. Đây sẽ là những điều không ai nói hoặc viết về, đã đến lúc bắt đầu Show
Mục lụcNút. js dành cho nhà phát triển PHP (không phải Node. js so với PHP)Phần này là danh sách những thứ mà bạn với tư cách là nhà phát triển PHP phải biết và học cách sử dụng Node. js hiệu quả. Ngược lại, bài đăng này không phải là Nút. js vs PHP viết lên nơi PHP bị bash. Tôi đã sử dụng cả hai ngôn ngữ. Tôi bắt đầu viết thêm Node. j vào năm 2016. Khi tôi bắt đầu, tôi gặp một số khó khăn vì tôi đã quen với PHP trong công việc hơn 7 năm trước đó. Có một cuốn sách được phát hành vào cuối năm 2012 về Node. js cho nhà phát triển PHP Bài đăng trên blog này sẽ không nói về PHP hay Node là gì. js là gì, bạn có thể đọc về nó trong các bài viết khác. Tôi cũng sẽ không nói nhiều về Non-Blocking I/O hay event loop. Tuy nhiên, một số nội dung sẽ được lướt qua khi thảo luận về các khía cạnh thực tế của việc viết Node tốt. mã js Nút. js cho các nhà phát triển PHP về khía cạnh thực tếPHP đã tồn tại từ năm 1995 và được cho là vẫn được sử dụng bởi 79. % trang web được giám sát bởi W3tech (tôi thực sự không thể nói nếu đó là toàn bộ internet). Vì vậy, rất có thể bạn đã sử dụng PHP hoặc triển khai thứ gì đó được viết bằng PHP. Ví dụ với xu hướng phát triển
Mặt khác, nút. js được phát hành vào năm 2009. Các công ty công nghệ lớn như Linked In và Paypal bắt đầu áp dụng nó từ năm 2011 đến 2013 vì nhiều lý do như microservice. Theo khảo sát nhà phát triển Stack Overflow của
Không có gì bí mật khi Node. js đang trở nên rất phổ biến trong 5 năm qua Vì vậy, là một nhà phát triển PHP, đây là 5 điều thiết thực cần biết để trở thành một Node tuyệt vời. kỹ sư phần mềm js. Nút. js dành cho nhà phát triển PHP tương tự ở một số khía cạnh nhưng cũng khác ở một số khía cạnh khác, một số được mô tả bên dưới Nút. js thực thi mã không đồng bộ và không tuần tựĐây là một hành vi đánh lừa rất nhiều nhà phát triển PHP. Trong PHP, mã chạy theo thứ tự, ở dòng đầu tiên 1 rồi 2, v.v. Trong Javascript và đặc biệt là trong Node. js có thể không phải như vậy. Bạn có khả năng có thể đặt mọi thứ ở chế độ nền bằng cách sử dụng tốt các lời hứa và cuộc gọi lại Dưới đây là một ví dụ về mã đã sửa đổi với lời giải thích được lấy từ kho mã nguồn mở của tôi
Nếu bạn nhìn kỹ hơn, thì
Không có cách nào khác để làm điều gì đó như thế này trong PHP. Đây là điều đầu tiên khiến các nhà phát triển PHP bối rối. Nó làm cho Node khó hiểu hơn. js cho nhà phát triển PHP. Hành vi thực thi mã không đồng bộ này cũng làm cho việc tìm đúng dấu vết ngăn xếp khó khăn hơn trong trường hợp có lỗi trong Node. js Thành thật mà nói, vào năm 2020, bạn có thể dễ dàng sử dụng async đang chờ. Mặc dù nó là đường cú pháp trên Promises, nhưng nó làm cho việc lập trình không đồng bộ trở nên dễ dàng hơn rất nhiều. Khi tôi bắt đầu ở kỷ nguyên Node 4/6 vào khoảng năm 2016 với các cuộc gọi lại và Lời hứa, đó hoàn toàn là một trò chơi bóng khác. Tuy nhiên, hãy cẩn thận khi không sử dụng async-await (như trên) và chỉ thực hiện theo lời hứa, sau đó và bắt. Mặc dù vậy, đừng vướng vào địa ngục hứa hẹn trong quá trình này. Địa ngục lời hứa giống như lần lặp lại tiếp theo của địa ngục gọi lại
Một mẹo chuyên nghiệp khác
Đi sâu hơn một chút vào việc thực hiện không tuần tự, lời hứa và sức mạnh của nó đóng một vai trò quan trọng ở đây. Khả năng làm những việc đồng thời là tuyệt vời trong Node. js và javascript nói chung Nút. js hứa hẹn khả năngHứa hẹn không đồng bộ, bạn có thể chạy chúng đồng thời. Có nhiều cách để làm điều đó. Bạn có thể đua 3 lời hứa và nhận kết quả từ lời hứa nhanh nhất. Bạn thậm chí có thể hứa. tất cả nếu một lời hứa bị từ chối, nó sẽ dừng toàn bộ hoạt động. Vui lòng đọc thêm về 0 trong phần so sánh tuyệt vời nàyVới ý nghĩ đó, bạn có thể thử các thư viện NPM khác để hạn chế đồng thời lời hứa hoặc thậm chí lọc qua các lời hứa đồng thời. Bạn có thể làm một số điều đó với ReactPHP. Nhưng nó không có trong PHP gốc, thậm chí không có trong PHP 8. Đây là một cái gì đó mới mẻ để thu hút sự chú ý của bạn trong Node. js cho nhà phát triển PHP Hãy chuyển sang điểm tiếp theo, quy trình không cần phải chết trong Node. js như trong PHP Nút. js chạy lâu, không giống như PHPPHP chết không phải theo nghĩa là nó sẽ không được sử dụng. Theo nghĩa là tất cả các quy trình PHP phải chết. PHP không thực sự được thiết kế cho các tác vụ/quy trình chạy dài. Trong PHP khi một yêu cầu HTTP mới bắt đầu xử lý, sau khi gửi phản hồi trở lại, quy trình sẽ bị hủy. Đó là cách PHP hoạt động. Điều đó tạo ra nhu cầu về FPM và các máy chủ khác. Bạn có thể tranh luận rằng PHP không có máy chủ theo thiết kế hơn 20 năm trước. Tôi để điều đó cho bạn Mặt khác, Nút. js là một quá trình chạy dài. Điều này cho phép bạn chia sẻ thông tin giữa các yêu cầu vì cùng một máy chủ/quy trình đang xử lý nhiều yêu cầu. Với quy trình chạy dài, bạn có thể dễ dàng khai thác những thứ như ghi nhớ trên bộ nhớ và tổng hợp kết nối cho cơ sở dữ liệu. Nó mở ra những khả năng khác như đếm số không. ví dụ về các yêu cầu đồng thời trên quy trình đó Ví dụ ghi nhớNếu bạn không biết Memoization
Nó có thể được sử dụng trong Nút. js nhưng không phải trong PHP nguyên bản. Một số cách giải quyết khác có thể thực hiện được trong PHP như lưu giá trị trả về của hàm trong Redis Dưới đây là một mẫu mã ghi nhớ trên tuyến tốc hành với p-memoize
Ưu điểm rõ ràng của việc này là tải ít hơn trên kho dữ liệu. Trong 1 phút, nó sẽ phản hồi lại với cùng một phản hồi cho cùng một tham số. Đầu ra của hàm 1 được lưu trong bộ nhớ trong một phút. Điều này làm cho phản hồi rất nhanh. Bạn nên đọc thêm về ghi nhớ javascriptVí dụ nhóm kết nối với MySQLMột điều khác không thể xảy ra do quá trình chết trong PHP là tổng hợp kết nối. Theo Wikipedia
Vì vậy, bạn sẽ có 5 kết nối trong một nhóm và nếu bạn muốn chạy 5 truy vấn tới cơ sở dữ liệu thì có thể thực hiện đồng thời. Điều này giúp tiết kiệm thời gian cho cả việc kết nối với cơ sở dữ liệu cũng như chạy truy vấn. Điều này rất dễ thực hiện trong Node. js nhưng không dễ dàng thực hiện được trong PHP
Chẳng hạn, nếu bạn đang sử dụng Kubernetes và ứng dụng của bạn có 5 nhóm với kích thước nhóm kết nối là 2. Điều đó có nghĩa là cơ sở dữ liệu của bạn sẽ luôn có 10 kết nối mở mặc dù không có truy vấn nào được thực hiện Thời gian cho một ví dụ nhóm kết nối với cơ sở dữ liệu MySQL với mô-đun npm
Đoạn mã trên sẽ chạy song song cùng một truy vấn 5 lần với 5 kết nối MySQL được lấy từ nhóm kết nối. Tôi ước tôi có thể làm điều này bằng PHP ngay lập tức Theo kinh nghiệm của tôi, Nút. js hoạt động rất tốt với Mysql. Nếu bạn muốn thử kết nối tổng hợp với Mongo DB, đây là một ví dụ về Mongo
Đây là nơi nút. js dành cho các nhà phát triển PHP cần một chút thay đổi trong suy nghĩ về cách mã được thực thi. Mặt khác, đây là một lợi thế lớn trong Node. js cho nhà phát triển PHP Gỡ lỗi dễ dàng hơn trong Node. js hơn trong PHPGỡ lỗi mã từng dòng là một phần quan trọng trong trải nghiệm của nhà phát triển đối với bất kỳ ngôn ngữ lập trình nào. Để gỡ lỗi mã PHP, bạn có thể sử dụng các tiện ích bổ sung như X-Debug với một số cài đặt IDE. X-Debug là một thách thức để thiết lập, để nói rằng ít nhất. Bạn phải cài đặt nó, kích hoạt tiện ích mở rộng. Sau đó, định cấu hình đúng cách với một IDE như PHPStorm
Mặt khác, chạy trình gỡ lỗi gốc của nút hoặc thậm chí ndb dễ dàng hơn rất nhiều so với PHP và X-debug. Với việc sử dụng VS Code, gỡ lỗi Node. js dễ dàng đến mức ngay cả một người thượng cổ cũng có thể làm được
Sau đó, đặt một số điểm ngắt trên mã VS bằng cách nói 0 và trong loại thiết bị đầu cuối 1BÙM. Nút từng bước của bạn. trình gỡ lỗi js đang chạy tốt trên trình chỉnh sửa Mã VS mà không cần nỗ lực nhiều. Một sự khác biệt tốt so với PHP, không cần cài đặt một tiện ích mở rộng khác, kích hoạt nó và định cấu hình nó để có thể gỡ lỗi chương trình. Không cần cài đặt tiện ích mở rộng bổ sung là một lợi ích được tìm thấy trong Node. js cho nhà phát triển PHP Điểm tiếp theo cũng là về trải nghiệm của nhà phát triển tốt hơn trong khi nâng cấp thậm chí nhiều phiên bản chính của ngôn ngữ Nâng cấp phiên bản chính trong Node. js liền mạch hơn PHPNhảy thậm chí nhiều phiên bản chính trong Node. js là một trải nghiệm liền mạch. Nâng cấp từ PHP 5. x sang PHP 7. x là một quá trình kéo dài từ một tuần đến một tháng tùy thuộc vào quy mô và độ phức tạp của dự án Theo kinh nghiệm cá nhân của tôi, tôi đã nâng cấp Node. js microservice từ phiên bản 0. 12 đến 4 trong quá khứ. Gần đây tôi đã nâng cấp một ứng dụng từ Node. js 10 đến 14. Tất cả nút của tôi. nâng cấp phiên bản chính của js thật dễ dàng Một số gói nhỏ. json là những vấn đề nhỏ duy nhất tôi gặp phải. Sau khi triển khai, hiếm khi có bất kỳ sự cố nào liên quan đến khả năng tương thích mã. Là một phần thưởng bổ sung, hiệu suất thường tốt hơn khi nâng cấp các phiên bản chính Mặt khác, việc nâng cấp PHP không hề dễ dàng. Nâng cấp phiên bản nhỏ cho một ứng dụng từ PHP 5. 4 đến 5. 6 không rườm rà nhiều. Nhưng, đi từ PHP 5. 6 đến 7. 2 cho một ứng dụng tương đối lớn là một nỗi đau. Phải mất một thời gian dài và cần nhiều nhà soạn nhạc. thay đổi json. Đó cũng là một nhiệm vụ khó khăn để kiểm tra nó. Mặt tốt của việc nâng cấp phiên bản chính trong PHP chắc chắn là tăng hiệu suất
Docker hóa một nút. ứng dụng js dễ dàng so với PHPMức độ phổ biến của Docker đã tăng đều đặn trong 5 năm qua. Nó đã thay đổi cách các kỹ sư phần mềm của chúng tôi làm việc kể từ khi phát hành. Bạn cũng nên sử dụng Docker để phát triển cục bộ. Với ý nghĩ đó, Dockerizing một ứng dụng PHP có thể là một nhiệm vụ khó khăn tùy thuộc vào cách các thành phần được bố trí và độ phức tạp của ứng dụng. Ngược lại, để neo một Node. js, nỗ lực ít hơn và quá trình này rất dễ dàng Dưới đây là một ví dụ về dockerfile cho ứng dụng PHP Laravel với Apache
Điều tốt với hình ảnh Docker này cho Laravel là PHP được gói cùng với apache trong cùng một hình ảnh. Có thể tranh luận nếu đây là cách tốt hơn để làm điều đó hơn là chia PHP và Apache thành hai hình ảnh docker Cũng lưu ý bản dựng docker nhiều giai đoạn trong hình ảnh docker ở trên. Cài đặt trình soạn thảo được thực hiện trong một hình ảnh khác và đầu ra được sao chép vào hình ảnh chính. Nếu chúng tôi đã sử dụng PHP-FPM và Nginx trong các hình ảnh docker khác nhau, nó sẽ phức tạp hơn. Sẽ cần phải quản lý hai hình ảnh docker riêng biệt Bây giờ là lúc để xem một Node. js Dockerfile
Là nút. js có một máy chủ web tích hợp, Dockerfile sạch hơn nhiều
Trong bản dựng docker nhiều giai đoạn Dockerfile ở trên được sử dụng để phân tách hình ảnh docker sản xuất và phát triển. Có gói trình quản lý gói (npm) và có máy chủ web như một phần của ngôn ngữ/thời gian chạy là một điều khác biệt trong Node. js cho nhà phát triển PHP. Nếu bạn quan tâm nhiều hơn đến Dockering một nút. js applicaiton từng bước theo hướng dẫn này. Ngoài ra, gật đầu chỉ được cài đặt trong giai đoạn phát triển vì nó sẽ chỉ được sử dụng để phát triển Phần kết luậnKhi sử dụng Nút. js cho các nhà phát triển PHP, nó cần một sự thay đổi nhẹ trong suy nghĩ để khai thác sức mạnh của Node. js tốt. Nút. js không phải là viên đạn bạc. Có những hạn chế và nó cần thích ứng với các cách thực thi mã khác nhau
|