Dark Mode Light Mode

Co zespoły technologiczne muszą wiedzieć o WebAssembly

Wasm to fascynująca technologia z szeregiem zastosowań w całym stosie technologicznym — ale nie daj się zaskoczyć pułapkom. Oto, co zespoły muszą wiedzieć przed przyjęciem WebAssembly.

WebAssembly, czyli Wasm, to otwarty standard definiujący przenośny format kodu binarnego oraz odpowiadający mu format tekstowy dla programów wykonywalnych. Stworzony i utrzymywany przez World Wide Web Consortium (W3C), Wasm został zaprojektowany, aby ułatwić tworzenie aplikacji o wysokiej wydajności na stronach internetowych. Obsługuje wiele języków, jest kompaktowy i szybki, jest wspierany przez wszystkie główne przeglądarki i jest ogólnie bezpieczny.

Jednak, jak każdy standard, Wasm ma potencjalne przeszkody. „Oferuje potężne możliwości uruchamiania kodu o wydajności zbliżonej do natywnej w sieci, ale przynosi również unikalne wyzwania dla organizacji, zwłaszcza podczas faz przyjęcia i integracji” — mówi Max Shak, założyciel i CEO Nerdigital.com, dostawcy technologii i usług marketingu cyfrowego.

Dla organizacji przyjmujących Wasm kluczowe jest zrozumienie wad i potencjalnych przeszkód, które mogą się pojawić podczas jego używania, a także sposobów ich obejścia. Zapytaliśmy deweloperów i liderów technologicznych, czego nauczyli się z używania WebAssembly w swoich projektach.

Sprawdź też: Co to Kubernetes (treść partnera)

5 rzeczy, które zespoły technologiczne muszą wiedzieć przed przyjęciem WebAssembly

  1. Uważaj na problemy z kompatybilnością
  2. Nie zakładaj, że wydajność między przeglądarkami jest oczywista
  3. Będą ryzyka związane z bezpieczeństwem i kompromisy
  4. Debugowanie jest skomplikowane i słabo wspierane
  5. Ekosystem zewnętrzny jest mniejszy, niż myślisz

Uważaj na problemy z kompatybilnością

Strona główna WebAssembly zauważa, że Wasm „jest zaprojektowany, aby utrzymać bezwersyjny, testowany pod kątem funkcji i wstecznie kompatybilny charakter sieci”. Moduły WebAssembly mogą wywoływać i być wywoływane z kontekstu JavaScript i uzyskiwać dostęp do funkcji przeglądarki za pośrednictwem standardowych interfejsów API sieci. Ale to nie znaczy, że Wasm jest wolny od problemów z kompatybilnością. „WebAssembly stanowi unikalne wyzwanie w zakresie zapewnienia kompatybilności z istniejącymi stosami technologicznymi” — mówi Gary Gilkison, główny analityk w Riverbase Cloud, dostawcy usług ulepszania stron internetowych.

„Z mojego doświadczenia z przyjmowaniem oprogramowania wynika, że staranne planowanie i projektowanie modułowe mogą złagodzić ten problem” — mówi Gilkison. W swojej pracy z Wasm skupił się na budowaniu elastycznych systemów z solidnym wsparciem API. To pozwoliło na płynniejszą integrację i zmniejszenie potencjalnych tarć z technologiami takimi jak Wasm, mówi.

Chociaż Wasm jest doskonały do zadań wymagających dużej wydajności, Shak mówi, że jego firma miała trudności z bezproblemową integracją z JavaScript i Modelem Obiektowym Dokumentu (DOM). „Wasm nie ma bezpośredniego dostępu do DOM, co oznacza, że musieliśmy mostkować dane między JavaScript a Wasm, co może wprowadzać znaczne obciążenie i zwiększać złożoność” — mówi.

Aby temu zaradzić, Nerdigital przyjęło strategiczne podejście do decydowania, które części aplikacji potrzebują wysokiej wydajności Wasm, a które można pozostawić JavaScriptowi. „Segmentując zadania takie jak przetwarzanie obrazów i manipulacja danymi dla Wasm, pozostawiając renderowanie interfejsu użytkownika i obsługę zdarzeń JavaScriptowi, znaleźliśmy zrównoważoną integrację” — mówi Shak.

Nie zakładaj, że wydajność między przeglądarkami jest oczywista

Kolejną potencjalną przeszkodą z Wasm jest brak optymalizacji wydajności w różnych przeglądarkach.

„Zapewnienie wydajnej pracy przy użyciu Wasm może być trudne” — mówi Gilkison. „Z moich doświadczeń w zarządzaniu produktami wynika, że podkreślam znaczenie optymalizacji kodu i przeprowadzania dokładnych testów wydajności” — mówi Gilkison. „Równoważenie wymagań wydajnościowych z obciążeniami zasobów jest kluczowe dla zapewnienia płynnego doświadczenia użytkownika”.

WebAssembly „oferuje wydajność zbliżoną do natywnej, ale osiągnięcie spójnej prędkości w różnych środowiskach przeglądarek pozostaje wyzwaniem” — mówi Paul Kromidas, CEO i założyciel Summer, dostawcy usług dla zarządców nieruchomości, właścicieli i inwestorów.

„Niektóre przeglądarki lepiej radzą sobie z określonymi optymalizacjami niż inne, co komplikuje tworzenie jednolitego doświadczenia użytkownika” — mówi Kromidas. „Rozwiązanie tego wymaga rozległych testów między przeglądarkami, wraz z mechanizmami awaryjnymi, które utrzymują funkcjonalność, jeśli nie osiągnięto optymalnej wydajności.

Z tego powodu wiele zespołów deweloperskich buduje modułowe komponenty Wasm, aby dostosować się do unikalnych możliwości każdej przeglądarki, minimalizując potrzebę znaczących przeróbek, gdy pojawiają się rozbieżności.

Będą ryzyka związane z bezpieczeństwem i kompromisy

Wasm wiąże się również z ryzykiem cyberbezpieczeństwa, które może zaskoczyć zespoły deweloperskie, jeśli się go nie spodziewają. „Moc niskopoziomowego wykonywania kodu WebAssembly może stanowić ryzyko bezpieczeństwa, jeśli nie jest odpowiednio zarządzana” — mówi Kromidas.

„Elastyczność Wasm, choć korzystna, może brakować ścisłych protokołów bezpieczeństwa widocznych w tradycyjnym JavaScript, co czyni go podatnym na ataki podczas uruchamiania nieufnego kodu” — mówi Kromidas. „Jednym z efektywnych rozwiązań jest użycie modułów w piaskownicy, które ograniczają dostęp do wrażliwych części systemu. To podejście tworzy warstwową strukturę bezpieczeństwa, która izoluje moduły Wasm, równoważąc wysoką wydajność z niezbędnymi środkami bezpieczeństwa”.

Obawy dotyczące bezpieczeństwa WebAssembly „nie mogą być ignorowane” — mówi Steve Pogson, założyciel dostawcy rozwiązań marketingowych Helm Digital. Technologia wykonuje kod bezpośrednio w przeglądarce, tworząc potencjalne luki. „Rozwiązujemy to, priorytetowo traktując bezpieczne praktyki kodowania i stałe monitorowanie, podobnie jak w przypadku utrzymywania bezpiecznych, zgodnych z SSL witryn e-commerce dla naszych klientów”.

Bezpieczeństwo jest zarówno zaletą, jak i wyzwaniem z Wasm, mówi Shak. „Jego środowisko w piaskownicy jest fantastyczne do ochrony aplikacji przed złośliwym wykonywaniem kodu, ale także ogranicza dostęp do niezbędnych API” — mówi. „Na przykład, uznaliśmy za ograniczające, że Wasm nie mógł łatwo współdziałać z API dla lokalnego przechowywania lub żądań sieciowych bez ich przekierowywania przez JavaScript”.

Nerdigital rozwiązuje to ograniczenie, używając JavaScript jako „przewodu” dla zewnętrznych żądań, tworząc kontrolowany interfejs, który pozwala Wasm na interakcję z niezbędnymi API przez JavaScript. „Ten projekt daje nam większą kontrolę nad tym, jakie dane zewnętrzne są udostępniane Wasm, wzmacniając bezpieczeństwo przy jednoczesnym osiąganiu funkcjonalności” — mówi Shak. „Dodatkowo, stosowaliśmy ścisłe praktyki dotyczące oczyszczania i walidacji wszelkich danych wchodzących i wychodzących z modułów Wasm, zapewniając, że bezpieczeństwo pozostaje najwyższym priorytetem”.

Czytaj też: Databricks zebrał ogromną rundę finansowania w wysokości 10 miliardów dolarów

Debugowanie jest skomplikowane i słabo wspierane

Złożoność debugowania i ograniczone wsparcie narzędzi to dodatkowe przeszkody z Wasm. „Debugowanie w WebAssembly jest często bardziej skomplikowane niż w tradycyjnym JavaScript z powodu braku dojrzałych narzędzi do inspekcji i śledzenia” — mówi Kromidas. „To sprawia, że diagnozowanie problemów z wydajnością i logiką jest wyzwaniem, zwłaszcza dla zespołów mniej zaznajomionych z unikalną architekturą Wasm”.

Aby to przezwyciężyć, wielu deweloperów implementuje szczegółowe logowanie w kodzie Wasm i używa polyfilli w środowiskach deweloperskich, aby wspomóc debugowanie, mówi Kromidas. „To podejście dwutorowe pomaga skutecznie identyfikować problemy, zdobywając cenne informacje bez poświęcania zalet wydajności Wasm” — mówi.

Krajobraz debugowania i narzędzi dla Wasm „często wydaje się mniej dojrzały w porównaniu do innych języków” — mówi Gilkison. „Podczas konsultacji przy projektach SaaS widziałem wartość włączenia zasobów i narzędzi tworzonych przez społeczność. Wykorzystanie forów deweloperskich i zbieranie zbiorowych spostrzeżeń przyczyniło się do przezwyciężenia tych luk w narzędziach”.

„Jednym z największych wyzwań, z jakimi się spotkaliśmy z Wasm, był brak dojrzałych narzędzi do debugowania w porównaniu do JavaScript” — mówi Shak. „Niskopoziomowa natura Wasm oznacza, że pracujesz z maszyną wirtualną opartą na stosie, co sprawia, że komunikaty o błędach są enigmatyczne i trudne do zinterpretowania”.

Debugowanie staje się jeszcze bardziej skomplikowane, gdy problemy wynikają z kompilacji między językami, ponieważ JavaScript i Wasm komunikują się w formacie binarnym, mówi Shak. „Aby to rozwiązać, polegaliśmy na mapach źródeł, aby wypełnić lukę między naszym kodem źródłowym a binariami Wasm” — mówi Shak. „Dodatkowo, podzieliliśmy naszą aplikację na mniejsze, modułowe komponenty, co pozwoliło nam izolować i debugować każdy moduł Wasm niezależnie, co zaoszczędziło nam czasu i problemów”.

Ekosystem zewnętrzny jest mniejszy, niż myślisz

Kiedy Wasm został po raz pierwszy wprowadzony, jego ekosystem szybko się rozrastał. Z czasem wsparcie dla języków programowania kompatybilnych z Wasm również się zwiększyło i Wasm teraz obsługuje wiele języków. Jednak nadal istnieje ograniczona dostępność bibliotek i frameworków, które natywnie wspierają Wasm, mówi Shak.

„Chociaż to się poprawia, nadal jest mniej opcji w porównaniu do JavaScript, co oznacza, że często musieliśmy pisać niestandardowy kod lub czekać, aż ekosystem dojrzeje” — mówi Shak. „Aby wypełnić tę lukę, zaczęliśmy od budowania i dokumentowania wewnętrznych, wielokrotnego użytku komponentów Wasm, co pomogło usprawnić rozwój”.

Społeczność open source dla Wasm rośnie, mówi Shak. „Wnosiliśmy wkład do forów i repozytoriów, co nie tylko wzbogaciło nasze zasoby, ale także pozwoliło nam korzystać z wiedzy innych w tej dziedzinie” — mówi. „Pozostawanie aktywnym w społeczności Wasm utrzymuje nas na bieżąco z nowymi narzędziami, bibliotekami i najlepszymi praktykami, co przyspiesza rozwój naszych projektów opartych na Wasm”.

Potencjał WebAssembly do zwiększenia wydajności sieci „jest niezaprzeczalny, ale nie jest pozbawiony wyzwań” — mówi Shak. „Przyjmując metodyczne podejście do debugowania, modularizacji kodu, strategicznej integracji z JavaScript i czujności w kwestiach bezpieczeństwa, byliśmy w stanie rozwiązać problemy związane z Wasm.

Sprawdź też: Czego specjaliści ds. bezpieczeństwa oczekują od generatywnej AI

„W miarę jak technologia i jej ekosystem dojrzewają, jesteśmy podekscytowani, widząc, jak WebAssembly staje się jeszcze potężniejszym narzędziem dla aplikacji internetowych, i nieustannie doskonalimy nasze strategie, aby wykorzystać jego możliwości, jednocześnie nawigując po jego ograniczeniach”.

Poprzedni artykuł

Databricks zebrał ogromną rundę finansowania w wysokości 10 miliardów dolarów

Następny artykuł

Jak przyjąć podejście zorientowane na bezpieczeństwo przy wdrażaniu AI