HHVM so với PHP 8
Công cụ PHP được tăng tốc từ Facebook tự hào có những cải tiến về hiệu suất, nhưng nút cổ chai thực sự vẫn là chính các ứng dụng Show
Pixabay Nóng hổi sau đợt phát hành beta cho phiên bản 7. 0 của ngôn ngữ PHP, dự án HHVM của Facebook -- một công cụ PHP tốc độ cao -- cũng có một bản phát hành điểm mới. Điểm chuẩn do Facebook công bố cho thấy những cải tiến về hiệu suất cho HHVM so với cả phiên bản trước và công cụ PHP gốc. Nhưng nhiều gói PHP không tận dụng được toàn bộ phạm vi chức năng do HHVM cung cấp -- hoặc có các bộ thử nghiệm không thành công với HHVM, nghĩa là nó vẫn không phải là sự thay thế chung cho stock PHP [ Nghệ thuật lập trình đang thay đổi nhanh chóng. Chúng tôi giúp bạn điều hướng những gì hấp dẫn trong lập trình và những gì đang nguội lạnh, đồng thời cung cấp thông tin chuyên sâu về các công nghệ đang thay đổi cách thức hoạt động của các nhà phát triển. . Theo kịp các chủ đề nóng trong lập trình với InfoWorld's. ]Tuy nhiên, không phải tất cả đó là lỗi của HHVM Phải đi nhanh hơn, phải đi nhanh hơnĐược giới thiệu vào năm 2013, HHVM sử dụng trình biên dịch just-in-time (JIT) để tăng tốc độ thực thi mã PHP. Mức tăng khác nhau tùy thuộc vào ứng dụng, nhưng bộ điểm chuẩn mới nhất do Facebook phát hành đặt HHVM nhanh hơn từ hai đến bốn lần so với PHP 5 và từ 1. 1 đối 1. Nhanh gấp 5 lần so với PHP 7 FacebookĐiểm chuẩn hiệu suất cho HHVM so với. các phiên bản khác nhau của PHP với nhiều ứng dụng phổ biến. Có thể tăng tốc nhiều hơn, nhưng chủ yếu là với các ứng dụng sử dụng I/O không đồng bộ thay vì bất kỳ thay đổi nào trong chính công cụ PHP Điều đó nói lên rằng, bất kỳ ai mong muốn sử dụng HHVM và tự động nhận được tốc độ và quy mô giống như Facebook từ các ứng dụng PHP của họ chắc chắn sẽ thất vọng, phần lớn là do cách nhiều ứng dụng PHP hiện có được xây dựng. Trong phân tích về điểm chuẩn của HHVM, Facebook đã lưu ý: "[N]một trong những khung [đã thử nghiệm] này [Drupal, Mediawiki, WordPress] tận dụng kiến trúc I/O không đồng bộ có sẵn trong HHVM (i. e. , không đồng bộ). " Do đó, các ứng dụng bị ràng buộc bởi hoạt động I/O đồng bộ chỉ có thể tăng tốc rất nhiều bằng cách tối ưu hóa mức sử dụng CPU của chúng. Tại một số điểm, I/O cũng phải được tối ưu hóa -- và điều đó thuộc về tác giả của ứng dụng PHP, không phải tác giả của công cụ PHP Đánh nhiều hơn một bức tườngĐể hỗ trợ khẳng định này, Facebook đã thực hiện thử nghiệm tối ưu hóa WordPress của riêng mình để sử dụng các truy vấn cơ sở dữ liệu không đồng bộ. Công ty nhận thấy rằng sự thay đổi như vậy "có thể chứng minh hiệu suất đạt được trong cả RPS [yêu cầu mỗi giây] và thời gian phản hồi. " (Số hiệu suất chi tiết đã được hứa hẹn vào một ngày sau đó. ) Một trở ngại khác có thể xảy ra đối với việc hoán đổi bán buôn PHP cho HHVM. Nhiều gói PHP, như được cung cấp thông qua Trình soạn thảo, chưa vượt qua kiểm tra tự động khi chạy trong HHVM Trang web Hỗ trợ HHVM trong Dự án PHP theo dõi các gói Trình soạn thảo và trong khi nhiều tùy chọn phổ biến thử nghiệm thành công trong HHVM, một số chỉ hoạt động một phần -- và những tùy chọn khác hoàn toàn không hoạt động. Điều này làm cho HHVM trở nên hữu ích để chạy các ứng dụng và khung được sử dụng phổ biến nhất (chẳng hạn như WordPress đã đề cập ở trên), nhưng các ứng dụng PHP ít phổ biến hơn có thể không may mắn như vậy Theo thời gian, HHVM có thể đạt được ảnh hưởng lớn nhất không phải bằng cách thay thế PHP mà là nguồn ý tưởng về cách triển khai các lần lặp lại trong tương lai của công cụ PHP gốc. Miễn là phần lớn các ứng dụng PHP không được hiện đại hóa, công cụ chứng khoán sẽ là lựa chọn tốt nhất của hầu hết mọi người Có liên quan
Serdar Yegulalp là một nhà văn cao cấp tại InfoWorld, tập trung vào học máy, container hóa, devops, hệ sinh thái Python và đánh giá định kỳ Slack ra mắt vào năm 2014 với phần phụ trợ PHP 5. Cùng với một số công ty khác, chúng tôi đã chuyển sang HHVM vào năm 2016 vì nó chạy mã PHP của chúng tôi nhanh hơn. Chúng tôi ở lại với HHVM vì nó cung cấp một ngôn ngữ hoàn toàn mới. Hack (có thể tìm kiếm với tên Hacklang) Hack làm cho các nhà phát triển của chúng tôi nhanh hơn bằng cách cải thiện năng suất thông qua công cụ tốt hơn. Hack bắt đầu như một siêu bộ của PHP, giữ lại những phần tốt nhất của nó như quy trình chỉnh sửa-làm mới và mô hình bộ nhớ hướng yêu cầu cho phép phát triển nhanh chóng. Ngoài một số cải tiến về chất lượng cuộc sống, Hack còn bổ sung hệ thống loại tốt hơn và trình kiểm tra loại tĩnh, giúp bắt lỗi và cho phép các nhà phát triển viết mã và tái cấu trúc một cách tự tin hơn Trong bài đăng này, chúng tôi sẽ nói về cách thức và lý do chúng tôi chuyển sang Hack, những lợi ích mà nó mang lại cho chúng tôi và những điều cần xem xét cho cơ sở mã của riêng bạn Kiểm tra loại tĩnh là một công cụ thay đổi trò chơiHệ thống loại của PHP đã trải qua một chặng đường dài kể từ PHP 5, khi không thể chú thích các loại trả về, thuộc tính lớp hoặc loại vô hướng. Những lỗ hổng còn lại, chẳng hạn như thiếu thuốc generic, có thể được giải quyết trong tương lai. Nhưng lỗ hổng lớn nhất của nó là các kiểu chỉ được kiểm tra khi chạy. Đây là thời gian tốn kém nhất để tìm hiểu về các lỗi liên quan đến loại, bằng cách phá vỡ bộ kiểm tra hoặc tệ hơn - báo cáo người dùng hoặc nhật ký lỗi sản xuất Với Hack, quá trình kiểm tra loại diễn ra tĩnh (không cần chạy mã) và khi bạn nhập. Thay đổi chữ ký của một chức năng với hàng trăm trang web cuộc gọi và bạn sẽ thấy lỗi cho những trang cần cập nhật trước khi nhấn lưu Đây là một công cụ thay đổi cuộc chơi về năng suất — sự khác biệt giữa việc tìm ra lỗi trong một phần nghìn giây sau khi nhập so với việc chờ đợi một bộ kiểm tra toàn diện (hoặc phát hiện ra sau khi triển khai) là điều khó có thể phóng đại. Nó giống như sự khác biệt về năng suất giữa việc phát triển các trang web bằng PHP so với. C. Với Hack, bạn không cần cố gắng chạy mã cho đến khi trình kiểm tra loại vượt qua và sau đó mã thường chỉ hoạt động. Điều này cho phép các nhà phát triển Slack tự tin xây dựng và tái cấu trúc, tập trung các nỗ lực thử nghiệm vào các khu vực có giá trị cao hơn như lỗi logic mà việc nhập tĩnh không thể giúp ngăn chặn Có thể kiểm tra loại tĩnh trong PHP bằng các gói cộng đồng và nếu bạn đang sử dụng PHP thì tôi thực sự khuyên bạn nên sử dụng một trong các gói này. Tuy nhiên, trình kiểm tra loại của Hack có lợi thế là hệ thống loại đầy đủ tính năng hơn nhiều để làm việc với. Hack được xây dựng từ đầu để cho phép kiểm tra kiểu tĩnh, với các tính năng mà PHP thiếu như generics, shapes, enums, hack arrays và một thư viện chuẩn được đánh máy tốt để cho phép phân tích tĩnh nghiêm ngặt Nhập dần dần cho phép di chuyểnChúng tôi đã bắt đầu với Hack in, coi tất cả các giá trị chưa nhập là loại "bất kỳ", có thể sử dụng cho mọi mục đích. TypeScript lấy. Điều này cho phép di chuyển gia tăng—thêm các loại theo thời gian. Khi các tệp được nhập đầy đủ, chúng tôi đã thay đổi chúng thành chế độ nghiêm ngặt mặc định để chúng giữ nguyên như vậy Đáng ngạc nhiên là việc dần dần thêm các loại vào một cơ sở mã được gõ yếu khiến tôi suy nghĩ kỹ hơn về an toàn của loại so với khi tôi làm việc với các ngôn ngữ được gõ mạnh như Java hoặc Go. Thay vì yêu cầu chạy trình biên dịch, các kiểu là một quyết định có ý thức để thêm giá trị vào cơ sở mã. Chúng tôi phải biện minh cho việc dành thời gian thêm các loại bằng cách quan sát cách chúng thay đổi cuộc sống làm việc của chúng tôi. Một số phần của cơ sở mã dễ nhập, nhưng những phần khác yêu cầu tái cấu trúc để kích hoạt an toàn loại Chúng tôi không chỉ tìm thấy và ngăn chặn lỗi mà các loại còn đóng vai trò là một dạng tài liệu nội tuyến có thể xác minh (không giống như các khối nhận xét), giúp mọi người đọc và hiểu mã. Chúng cũng đóng vai trò là hợp đồng giữa các phần khác nhau của cơ sở mã. Điều này rất quan trọng đối với năng suất trong một cơ sở mã lớn, được chia sẻ như phần phụ trợ của Slack Hệ thống loại của Hack có một tính năng đặc biệt, Shapes, đã gây sốt như cháy rừng ở Slack và tôi tin rằng đó là lý do chúng tôi không bao giờ nhìn lại khi giới thiệu Hack vào cơ sở mã của mình Hình dạng giúp đại diện cho các cấu trúc phức tạpĐáng ngạc nhiên là loại 2 của PHP có thể hoạt động như một danh sách (một tập hợp các giá trị được sắp xếp theo thứ tự) và một bản đồ (một tập hợp các cặp giá trị chính) cùng một lúc. Hầu hết các ngôn ngữ lập trình đều sử dụng các kiểu riêng biệt cho các. Theo kinh nghiệm của tôi, đây là nguồn lỗi vô tận trong mã PHP, đặc biệt là khi các hàm như 3 xử lý các mảng dạng danh sách và dạng bản đồ khác nhauHack cải thiện điều này bằng cách tách chúng thành các loại khác nhau và sử dụng chung chung để mô tả các loại khóa và giá trị của chúng. Mảng dạng danh sách chứa các chuỗi là 4 và mảng dạng bản đồ có khóa chuỗi và giá trị số nguyên là 5Nhưng còn những dict chứa nhiều loại thì sao? 6 là chú thích loại hợp lệ nhưng không đặc biệt hữu ích, chú thích này cho biết chính tả chứa 7 khóa và giá trị của bất kỳ loại nàoNhập hình dạng. Một 0 là một mảng chứa các khóa đã biết với các loại cụ thể. Các phím có thể là tùy chọn nếu đứng trước 1. Các định nghĩa hình dạng ví dụ này đại diện cho các đối số của một yêu cầu http POST, có nhiều trường tùy chọn
Chữ ký hàm này sử dụng hình dạng đó để nhập 2
Một trang web cuộc gọi có thể trông như thế này
Điều này không chỉ giúp đảm bảo các loại chính xác được sử dụng cho từng trường mà còn giúp tránh lỗi chính tả đối với tên của các khóa cả trong trang gọi và trong thân hàm nơi hình được truy cập. Điều này làm cho hình dạng có tác động nhiều hơn đến năng suất của nhà phát triển so với chú thích loại 2 đơn giản. Trước khi định hình, việc tập hợp một lời gọi đến một chức năng như vậy sẽ yêu cầu đọc nội dung của nó hoặc một khối tài liệu lớn (có thể không được cập nhật đầy đủ) để hiểu tên, loại dự kiến và “tùy chọn so với. bắt buộc" trạng thái cho mỗi đối sốHình dạng được sử dụng cho nhiều trường hợp sử dụng khác nhau tại Slack, bao gồm
Async/await cho phép đồng thời đơn giảnKhi nhiều tính năng được thêm vào Slack, mỗi yêu cầu có xu hướng có nhiều việc phải làm hơn. Để duy trì trải nghiệm người dùng linh hoạt, đồng thời là một giải pháp phổ biến — thực hiện nhiều việc cùng lúc trong một yêu cầu Trong nhiều ngôn ngữ lập trình, việc thêm đồng thời có nghĩa là thêm độ phức tạp đáng kể với mutexes, cấu trúc dữ liệu an toàn cho luồng hoặc lệnh gọi lại. Những điều này làm chậm các nhà phát triển, làm cho mã khó suy luận và gỡ lỗi hơn Hack là một trong số một số ngôn ngữ triển khai mẫu Async/await cho đa nhiệm mà không cần đa luồng. Async/await là một khái niệm trừu tượng đơn giản cho phép tạm dừng các chức năng trong khi chờ I/O, giải phóng thời gian chạy để lên lịch cho các tác vụ khác. Chỉ cần thêm các từ khóa 4 và 5 và làm theo một vài nguyên tắc, mã có thể được di chuyển để tận dụng tính đồng thời mà không phá vỡ mô hình tinh thần về cách thức hoạt động của mãDưới đây là một ví dụ sử dụng khối mã 6 để tìm nạp dữ liệu từ hai nguồn cùng một lúc. Những lần tìm nạp này trước đây được thực hiện tuần tự. Việc thêm 5 và 6 giúp mã dễ đọc đồng thời cho phép quá trình tìm nạp diễn ra đồng thời 1Phá vỡ khả năng tương thích PHP giải phóng Hack để phát triểnHHVM đã đi một chặng đường dài kể từ khi Slack bắt đầu sử dụng nó. Phá vỡ khả năng tương thích với PHP là một quyết định gây tranh cãi, yêu cầu chúng tôi loại bỏ mọi dòng mã PHP cuối cùng và các phần phụ thuộc khỏi cơ sở mã của chúng tôi, nhưng đã cho phép cải thiện đáng kể hiệu quả và tính hợp lý cho ngôn ngữ. Kể từ HHVM 4. 0 đã loại bỏ hỗ trợ PHP, các nhà phát triển đã nhanh chóng loại bỏ "PHPism" cản trở sự an toàn và/hoặc hiệu suất của loại, đồng thời thêm các tính năng mới hữu ích. Theo kịp các bản cập nhật này trong một cơ sở mã lớn gần như là một công việc toàn thời gian Nhược điểm lớn nhất của việc rời bỏ cộng đồng PHP là mất đi hệ sinh thái mở rộng gồm các gói mã nguồn mở trên Packagist. May mắn thay, các dự án Hack vẫn có thể xuất bản trên Packagist và có một số dự án chất lượng cao
Nhìn về phía trướcKhi Hack tự giải phóng mình khỏi quá khứ PHP, tôi rất vui khi thấy nó trở thành ngôn ngữ hạng nhất theo đúng nghĩa của nó. Mặc dù việc chuyển dần cơ sở mã PHP sang Hack là không khả thi, nhưng tôi hy vọng sẽ thấy nhiều nhà phát triển chọn Hack cho các dự án mới khi ngôn ngữ này ổn định hơn, đặc biệt nếu họ đã quen thuộc với PHP và đang tìm kiếm thứ gì đó tốt hơn Có một xu hướng chung trong ngành là thêm tính năng kiểm tra kiểu tĩnh vào các ngôn ngữ được diễn giải, với nhiều tùy chọn cho Python, JavaScript và Ruby. Việc kết hợp sự tiện lợi của các ngôn ngữ được giải thích với kiểm tra kiểu tĩnh rất đáng để xem xét đối với các cơ sở mã thuộc mọi quy mô Scott Sandler là Kỹ sư chính trong nhóm Cơ sở hạ tầng cốt lõi tại Slack. Slack đang thuê kỹ sư phụ trợ HHVM có thể chạy PHP không?hhvm(1) (hay còn gọi là Máy ảo HipHop) là một máy ảo nguồn mở được thiết kế để thực thi các chương trình viết bằng Hack và PHP .
HHVM dùng để làm gì?HHVM là một máy ảo mã nguồn mở được thiết kế để thực thi các chương trình được viết bằng Hack . HHVM sử dụng phương pháp biên dịch đúng lúc (JIT) để đạt được hiệu suất thời gian chạy tuyệt vời trong khi vẫn duy trì tính linh hoạt phát triển tuyệt vời. HHVM hỗ trợ ngôn ngữ lập trình Hack.
PHP HHVM là gì?Máy ảo HipHop (HHVM) là một máy ảo nguồn mở dựa trên quá trình biên dịch just-in-time (JIT) đóng vai trò là công cụ thực thi cho ngôn ngữ lập trình Hack< . .
PHP 8 có tốt hơn PHP 7 không?Nhóm đằng sau việc phát hành PHP 8 tự hào về thông báo của họ về hiệu suất tốt hơn, cú pháp tốt hơn và an toàn loại được cải thiện. PHP 8 nhanh hơn PHP 7 , cú pháp yêu cầu ít mã hơn và hỗ trợ gõ tốt hơn. Ba loại cải tiến này cung cấp một bản phát hành phiên bản chính mạnh mẽ của PHP. |