Author: Ram Viswanathan with Larry Carvalho contributing.
Background: The Client Technologies Evolution
Over the past four decades, client technologies have seen remarkable changes transforming how we interact with digital services. In the 1980s, the graphical user interface (GUI) introduced a user-friendly way to interact with software through windows and icons. The 1990s brought the Internet and web browsers, altering the client-server model. The 2000s saw mobile computing rise with smartphones and apps, enabling access to digital services from anywhere. The 2010s introduced client-side frameworks like Angular, React, and Vue, enhancing web experiences. Edge computing and IoT extended client technologies beyond traditional platforms, embedding them in everyday objects and machinery.
With the arrival of WebAssembly (Wasm) technologies, client-side architectures are bracing for significant changes. What will be the impact of Wasm in the short and long term? Will it loosen JavaScript’s firm grip on client-side technologies? This brief write-up explores the evolution of client-side technologies and does some crystal ball gazing on Wasm and its impact on client-side architectures.
Before we get into client-side technologies, let us understand the history of client-side technologies to date.
The shift from Centralized Computing:
In the 1980s, personal computers (PCs) shifted computing from centralized mainframes to decentralized systems, empowering individual users. Personal applications ran locally on PCs, and connected apps emerged, combining local resources with networked data. While making technology more personal and powerful, PCs led to bloatware and resource-intensive software.
Birth of Internet and Browsers:
The growth of the Internet began with ARPANET and the development of TCP/IP. Internet Service Providers (ISPs) emerged in the 1980s and 1990s, making the Internet accessible to the public. Web browsers like Mosaic and Netscape Navigator revolutionized web browsing. Internet Explorer and browser wars followed. Firefox and Chrome added competition and modern browsers support many web technologies.
Proliferation of Edge Devices:
Internet access evolved from desktops to laptops, WiFi, mobile devices, IoT, and wearables. IoT extended connectivity to everyday objects, and wearables offer information and notifications on the go. These devices have led to an expanding ecosystem of Internet connectivity.
Need for Speed & Efficiency:
HTML technologies matured, enabling rich user experiences, mobile responsiveness, SEO, bandwidth efficiency, real-time applications, API integration, and efficient frontend frameworks. Container technology, like Docker, facilitates microservices architecture, portability, resource efficiency, DevOps, orchestration, isolation, and multi-cloud deployment.
Evolution and Maturity of Client-side Technologies:
Java, JavaScript, and ActiveX have all evolved. Java shifted from client-side applets to server-side and Android development. JavaScript expanded to the server via Node.js and is critical in building front-end experiences. ActiveX was limited to Internet Explorer due to security vulnerabilities. HTML5, CSS3, and ECMAScript specifications standardized client-side technologies, reducing reliance on plugins. WebAssembly offers near-native performance for web applications.
Proliferation of Mobility with Edge Devices:
Technological advances in powerful devices, 5G, miniaturization, and energy efficiency drive mobility. The ubiquity of connected devices in smart cities, industrial IoT, and healthcare contributes to mobility. Evolving users demand instantaneous response, privacy, data-intensive applications, and adaptive learning to enhance mobility.
The Holy Grail of “Write Once, Run Anywhere”:
“Write once, run anywhere” (WORA) is ideal for creating code that runs consistently across multiple platforms. Achieving this goal is challenging due to operating system differences, hardware variability, performance concerns, UI/UX issues, and updates. Technologies like Java, React Native, and Python aim to achieve WORA but often require platform-specific tweaks.
The Arrival of WebAssembly (Wasm):
WebAssembly (Wasm) is a runtime format for high-performance execution in web browsers that addresses the need for better performance, security, portability, interoperability, and language support. Being developed by major technology companies, it has the potential to revolutionize client-side web development for performance-critical tasks. However, it is still early and may only partially replace JavaScript.
Summary: The Future of Wasm is Bright
Client technologies have evolved significantly, impacting how we interact with digital services. The challenges of building applications supporting multiple underlying PC architectures grew with the proliferation of Arm and AMD chips and the changing silicon powering MacBooks moving from Intel to Arm. Increased screen sizes and better resolution accelerated the popularity of mobile devices interacting with websites, increasing the type of solutions built to ensure consistent user experiences. The arrival of Wasm has the potential to further enhance client-side web development, especially for performance-critical applications.
With w3tech reporting that the client-side programming language used by 98.8% of all websites is JavaScript, practitioners are devising ways in which Wasm and JavaScript can co-exist. At the recent Open Source Summit in Europe, Angel Maria De Miguel Meana & Saúl Cabrera delivered a presentation titled: “Why Should You Consider JavaScript on WebAssembly?”. Javy is an open-source project to run JavaScript on WebAssembly hosted by ByteCode Alliance. The session depicted how Javy has a 13x faster startup time than JavaScript isolate. While not a complete replacement for JavaScript, several new emerging standards may lead the way to Wasm becoming a preferred technology for client-side technologies. Stay tuned for another write-up on Wasm.