কেন Google পত্রক তার গণনা কর্মীকে JavaScript থেকে WasmGC-তে পোর্ট করেছে৷

গুগল শিটস হল গুগলের প্রথম পণ্যগুলির মধ্যে একটি যেখানে ক্রোমে WasmGC ব্যবহার করা হয়েছে। এই পদক্ষেপটি ২০২২ সালে ঘোষণা করা হয়েছিল এবং শিটস এবং ক্রোম টিম অপ্টিমাইজেশনের উপর রিয়েল-টাইম প্রতিক্রিয়া প্রদানের জন্য স্ট্যান্ডার্ডাইজেশন, ইঞ্জিনিয়ারিং এবং টুলিং-এ অংশীদারিত্ব করেছে। এই অংশীদারিত্ব গুগলের ইঞ্জিনিয়ারিং টিমগুলি কীভাবে ক্রোমের সাথে কার্যকরভাবে কাজ করতে পারে যাতে WasmGC-তে আরও বেশি গুগল অ্যাপ চালানো যায় তার জন্য একটি নজির স্থাপন করেছে।

চ্যালেঞ্জ: জাভাস্ক্রিপ্ট

গুগল শিটস ক্যালকুলেশন ইঞ্জিনটি মূলত জাভাতে লেখা হয়েছিল এবং ২০০৬ সালে চালু হয়েছিল। পণ্যটির প্রথম দিকে, সমস্ত গণনা সার্ভারে করা হত। তবে, ২০১৩ সাল থেকে, ইঞ্জিনটি জাভাস্ক্রিপ্ট ব্যবহার করে ব্রাউজারে চালানো শুরু করে। এটি মূলত গুগল ওয়েব টুলকিট ( GWT ) এবং পরে জাভা টু ক্লোজার জাভাস্ক্রিপ্ট ট্রান্সপাইলার ( J2CL ) এর মাধ্যমে সম্পন্ন করা হয়েছিল। জাভাস্ক্রিপ্ট ক্যালকুলেশন ইঞ্জিনটি একটি ওয়েব ওয়ার্কারে চলে এবং একটি MessageChannel ব্যবহার করে মূল থ্রেডের সাথে যোগাযোগ করে।

সার্ভার থেকে ব্যবহারকারীদের গণনা ইঞ্জিনের জাভাস্ক্রিপ্ট সংস্করণে (এবং পরে GWT থেকে J2CL-তে) স্থানান্তর করা একটি গুরুত্বপূর্ণ কাজ ছিল যার জন্য সতর্কতার সাথে যাচাইকরণের প্রয়োজন ছিল। জাভাস্ক্রিপ্ট গণনা ইঞ্জিন যাতে জাভা সংস্করণের মতো একই ফলাফল তৈরি করে তা নিশ্চিত করার জন্য, Sheets টিম একটি অভ্যন্তরীণ যাচাইকরণ প্রক্রিয়া তৈরি করেছে। এই প্রক্রিয়াটি শিটের একটি বৃহৎ সংগ্রহ প্রক্রিয়া করতে পারে এবং গণনা ইঞ্জিনের একাধিক সংস্করণের মধ্যে ফলাফল অভিন্ন কিনা তা যাচাই করতে পারে। Sheets টিম Sheets-এ পরিবর্তনগুলি যাচাই করার জন্য নিয়মিত এই টুলটি ব্যবহার করে। কিন্তু দলটি কেবল সেই গণনার ফলাফল তুলনা করেনি, তারা ক্লায়েন্টে জাভাস্ক্রিপ্ট এবং সার্ভারে জাভার মধ্যে কর্মক্ষমতাও তুলনা করেছে। তারা দেখেছে যে গণনা ইঞ্জিনের জাভাস্ক্রিপ্ট সংস্করণ জাভা সংস্করণের তুলনায় তিনগুণেরও বেশি ধীর ছিল।

জাভাস্ক্রিপ্ট জাভার চেয়ে ধীর কেন?

জাভাস্ক্রিপ্ট একটি ঢিলেঢালা টাইপ করা, গতিশীল ভাষার জন্য দ্রুত। গত ১৫ বছরে জাস্ট-ইন-টাইম (JIT) কম্পাইলারগুলিতে (যেমন, ম্যাগলেভ , স্পার্কপ্লাগ এবং টার্বোফ্যান ) প্রচুর বিনিয়োগ জাভাস্ক্রিপ্টের কর্মক্ষমতা বৃদ্ধি করেছে। তবে, জাভাস্ক্রিপ্টের ঢিলেঢালা টাইপ এবং গতিশীল আচরণ JIT কম্পাইলারদের জন্য সর্বোত্তম কোড তৈরি করা চ্যালেঞ্জিং করে তোলে। এর অর্থ হল জাভাস্ক্রিপ্ট এখনও জাভা এবং C++ এর মতো ভাষার তুলনায় কাঁচা থ্রুপুটের জন্য পিছিয়ে। টাইপস্ক্রিপ্ট জাভাস্ক্রিপ্টে টাইপ সুরক্ষা যোগ করে, কিন্তু এই ধরণের তথ্য বিকাশকে সহজ করার জন্য ডিজাইন করা হয়েছে, কম্পাইলারদের সর্বোত্তম কোড তৈরি করার জন্য প্রয়োজনীয় ধরণের গ্যারান্টি প্রদান করার জন্য নয়। গুগল শিটের মতো ক্ষেত্রে, যেখানে বড় স্প্রেডশিট গণনা করতে দশ সেকেন্ড সময় নিতে পারে, জাভাস্ক্রিপ্ট দ্রুত, কিন্তু যথেষ্ট দ্রুত নয়।

সমাধান: WasmGC

WasmGC হল বিদ্যমান WebAssembly স্পেসিফিকেশনের একটি এক্সটেনশন যা আবর্জনা সংগ্রহ করা ভাষা (যেমন জাভা) সংকলনের জন্য প্রয়োজনীয় আদিম উপাদান যোগ করে। উদাহরণস্বরূপ, WasmGC প্রকার নির্ধারণ এবং আবর্জনা সংগ্রহ করা ডেটা স্ট্রাকচার বরাদ্দ করার জন্য নির্দেশাবলী যোগ করে। WasmGC আবর্জনা সংগ্রহ করা ভাষাগুলির জন্য Wasm যা করেছে (উদাহরণস্বরূপ, ফটোশপ বা গুগল আর্থ ), যা তাদের কাছাকাছি স্থানীয় গতিতে ওয়েবে নিয়ে আসে। Google-এ, আমরা বিশ্বাস করি যে আবর্জনা সংগ্রহ করা ভাষাগুলির জনপ্রিয়তার কারণে WasmGC Wasm-এর চেয়ে আরও বেশি প্রভাবশালী হওয়ার সম্ভাবনা রাখে।

গুগল ওয়ার্কস্পেস ক্রোমের সাথে অংশীদারিত্ব করেছে

২০১৯ সালে WasmGC MVP খসড়া স্পেসিফিকেশন প্রকাশিত হয়। ২০২০ সালের শেষের দিকে, Google Workspace এবং Chrome Sheets গণনা ইঞ্জিন ব্যবহার করে WasmGC মূল্যায়নের জন্য অংশীদারিত্ব করে। Workspace-এর মাল্টিপ্ল্যাটফর্ম টিমের কম্পাইলার এবং ট্রান্সপাইলার তৈরি এবং অপ্টিমাইজ করার ক্ষেত্রে উল্লেখযোগ্য দক্ষতা রয়েছে। Workspace-এর একটি অংশ Sheets, WasmGC মূল্যায়নের জন্য একটি আদর্শ প্রার্থী হিসেবে চিহ্নিত হয়েছে: এটি কর্মক্ষমতা-সংবেদনশীল এবং শক্তিশালী কর্মক্ষমতা এবং সঠিকতা যাচাইকরণ প্রক্রিয়া রয়েছে। Chrome-এর WasmGC রানটাইম তৈরি এবং অপ্টিমাইজ করার জন্য V8 টিম রয়েছে এবং সেই সাথে Binaryen-এর জন্য অগ্রিম-সময় (AOT) অপ্টিমাইজেশন তৈরিতে অবদানকারীও রয়েছে। Chrome এবং Workspace-এর মধ্যে, WasmGC টুলচেইন তৈরি এবং অপ্টিমাইজ করার জন্য প্রয়োজনীয় সমস্ত দক্ষতা রয়েছে, যেখানে Google Sheets একটি আদর্শ টেস্টবেড।

প্রথম প্রোটোটাইপ

২০২১ সালের মাঝামাঝি সময়ে, দলগুলির কাছে একটি কার্যকরী জাভা থেকে ওয়াসমজিসি কম্পাইলার ছিল। একই বছরের শেষের দিকে, তাদের কাছে গুগল শিটের একটি প্রোটোটাইপ সংস্করণ ছিল যা ওয়াসমজিসি হিসাবে কাজ করছিল এবং গণনা করছিল। পথে, তারা অনেক চ্যালেঞ্জের মুখোমুখি হয়েছিল। প্রোফাইলিং এবং হিপ ডাম্প নেওয়ার জন্য টুলিং বিদ্যমান ছিল না এবং এটি তৈরি করতে হয়েছিল। বিদ্যমান বাস্তবায়ন অনেক জাভাস্ক্রিপ্ট লাইব্রেরির উপর নির্ভর করেছিল যার জন্য ওয়াসমজিসির জন্য প্রতিস্থাপন খুঁজে বের করতে বা লিখতে হয়েছিল। স্পেসিফিকেশন, কম্পাইলার এবং নতুন লাইব্রেরির পরীক্ষামূলক প্রকৃতির কারণে ওয়াসম গণনা ইঞ্জিনের সঠিকতা যাচাই করা একটি সময়সাপেক্ষ প্রচেষ্টা ছিল। কিন্তু শিটের যাচাইকরণ প্রক্রিয়া আবারও অত্যন্ত সহায়ক ছিল। দলগুলি শেষ পর্যন্ত সবকিছু কাজ করতে শুরু করে এবং ২০২২ সালের গোড়ার দিকে পারফরম্যান্স ডেটা আসতে শুরু করে।

অতিরিক্ত অপ্টিমাইজেশন

Sheets Wasm-এর প্রাথমিক সংস্করণটি জাভাস্ক্রিপ্টের তুলনায় প্রায় দ্বিগুণ ধীরগতিতে গণনার পারফর্ম্যান্স দেখিয়েছিল। তবে, এটি একটি নতুন স্পেসিফিকেশন, নতুন কম্পাইলার এবং বেশ কয়েকটি নতুন লাইব্রেরির জন্য খারাপ ফলাফল নয়। এই বিন্দু থেকে, Sheets টিম অপ্টিমাইজেশন শুরু করে। তারা যে অপ্টিমাইজেশনগুলি খুঁজে পেয়েছে তার মধ্যে কয়েকটি বিভাগ উঠে এসেছে:

  • জাভা ভার্চুয়াল মেশিন (JVM) এবং V8-তে ইতিমধ্যে বিদ্যমান কোর অপ্টিমাইজেশনের প্রতিলিপি তৈরি করা।
  • অত্যন্ত অপ্টিমাইজ করা ব্রাউজার API ব্যবহার করা।
  • জাভাস্ক্রিপ্ট-নির্দিষ্ট কোডিং প্যাটার্ন অপসারণ করা হচ্ছে।

প্রথমত, শীটস টিমকে অন্যান্য টুলচেইনে ইতিমধ্যেই বিদ্যমান অপ্টিমাইজেশনগুলি প্রতিলিপি করতে হয়েছিল। এর সর্বোত্তম উদাহরণ হল ভার্চুয়াল পদ্ধতি প্রেরণ অপ্টিমাইজ করা, যা দীর্ঘদিন ধরে JVM এবং V8 দ্বারা অপ্টিমাইজ করা হয়েছে, কিন্তু WasmGC-এর জন্য কিছুই বিদ্যমান ছিল না। অনুমানমূলক ইনলাইনিং এবং ডিভার্চুয়ালাইজেশন বাস্তবায়ন - দুটি খুব সাধারণ অপ্টিমাইজেশন - ক্রোমে গণনার সময় প্রায় 40% বাড়িয়েছে।

দ্বিতীয়ত, এমন কিছু ক্ষেত্রে আছে যেখানে ব্রাউজার API গুলি অপ্টিমাইজড নেটিভ বাস্তবায়ন দ্বারা সমর্থিত যা Wasm ব্যবহারের সাথে প্রতিযোগিতা করা কঠিন। স্ট্রিং এবং রেগুলার এক্সপ্রেশন দুটি ভালো উদাহরণ। বিশেষ করে, রেগুলার এক্সপ্রেশনের সাথে, দলটি Chrome-এ re2j (WasmGC-তে কম্পাইল করা) থেকে RegExp ব্রাউজার API-তে স্যুইচ করার সময় রেগুলার এক্সপ্রেশন অপারেশনের প্রায় 100 গুণ গতি দেখেছে, যা প্রতিটি রেগুলার এক্সপ্রেশনকে তার নিজস্ব মেশিন কোডে কম্পাইল করতে পারে।

অবশেষে, তারা দেখতে পেল যে বছরের পর বছর ধরে অপ্টিমাইজ করার ফলে কোডবেস জাভাস্ক্রিপ্টে অতিরিক্ত ফিট হয়ে গেছে। উদাহরণস্বরূপ, তাদের Sheets-এ একটি মূল ডেটা স্ট্রাকচার ছিল যা অ্যারে এবং মানচিত্রের মধ্যে রেখাগুলিকে ঝাপসা করে দিচ্ছিল। এটি জাভাস্ক্রিপ্টে দক্ষ, যা স্বয়ংক্রিয়ভাবে স্পার্স অ্যারেগুলিকে মানচিত্র হিসাবে মডেল করে, কিন্তু অন্যান্য প্ল্যাটফর্মগুলিতে ধীর। তাই তাদের কোডটি আরও প্ল্যাটফর্ম-অজ্ঞেয়বাদী উপায়ে পুনর্লিখন করতে হয়েছিল। WebAssembly সম্পর্কে টিমটি এটি পছন্দ করে এমন আরেকটি জিনিস: এটি মাল্টিপ্ল্যাটফর্ম অ্যাপ্লিকেশনগুলিকে ওয়েবে ভাল পারফরম্যান্স পেতে সহজ করে তোলে। আপনাকে আপনার সম্পূর্ণ অ্যাপ্লিকেশনটিকে জাভাস্ক্রিপ্টের স্বতন্ত্র বৈশিষ্ট্যের সাথে বাঁকতে হবে না।

চূড়ান্ত ফলাফল

এই সমস্ত অপ্টিমাইজেশনের পরে, Sheets-এর চূড়ান্ত WasmGC সংস্করণটি JavaScript-এর তুলনায় প্রায় দ্বিগুণ দ্রুত গণনা কর্মক্ষমতা অর্জন করে, যা প্রাথমিক WasmGC সংস্করণের শুরুর দিক থেকে চারগুণ উন্নতির প্রতিনিধিত্ব করে।

উপসংহার

WasmGC একটি শক্তিশালী প্রযুক্তি যা ডেভেলপারদের ওয়েব অ্যাপ্লিকেশন তৈরির পদ্ধতিকে আরও উন্নত করার সম্ভাবনা রাখে। আগামী বছরগুলিতে, Google-এ, আমরা আশা করি WasmGC শেয়ার্ড মেমোরি মাল্টিথ্রেডিং সমর্থন করার জন্য এবং একক থ্রেডেড কর্মক্ষমতা আরও উন্নত করার জন্য এগিয়ে যাবে। আমরা সমস্ত ওয়েব ডেভেলপারদের তাদের পরবর্তী উচ্চ-কার্যক্ষমতা প্রকল্পের জন্য WasmGC ব্যবহার করার কথা বিবেচনা করার জন্য উৎসাহিত করি। আমাদের সাথে যোগ দিন এবং একসাথে ওয়েবকে একটি দ্রুত, মসৃণ জায়গা করে তুলুন!

স্বীকৃতি

WasmGC বাস্তবায়ন এবং এই কেস স্টাডিতে যারা কাজ করেছেন তাদের ধন্যবাদ: দিওয়াস অধিকারী, ম্যাথিউ অ্যালব্রাইট, কেসেনিয়া বুকিনা, জুলিয়েন ড্রামাইক্স, অসীম ফজল, মাইকেল ফ্রেডেরিক, গোকটুগ গোকডোগান, জ্যানিস গু, অ্যাডাম ক্লেইন, মানোস কৌকাউটোস, জ্যাকব কুমেরো, ম্যাথিয়াস লিডটকে, থমাস লাইভলি, রবার্তো লুবলিনারম্যান, বিশ্রুত মেহতা, থমাস ন্যাটেস্টাড, জোশ পার্লস্টাইন, জোয়াকিম পেরোটি, ক্রিস রুয়েনেস, স্টিভেন সাভিয়ানো, ডেরেক শুফ, টিম সিয়ার্স, মাইকেল থমাস, ইউয়ান তিয়ান, ফিলিপ ওয়েইস, ম্যাসন উ, অ্যালন জাকাই এবং ইমানুয়েল জিগলার।