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

Google Sheets হল Google-এর প্রথম পণ্যগুলির মধ্যে একটি যা Chrome এ WasmGC ব্যবহার করে৷ এই পদক্ষেপটি 2022 সালে ঘোষণা করা হয়েছিল, এবং অপ্টিমাইজেশানগুলিতে রিয়েল-টাইম প্রতিক্রিয়া প্রদানের জন্য শীট এবং ক্রোম টিম মানিককরণ, প্রকৌশল এবং টুলিং-এ অংশীদারিত্ব করেছে। এই অংশীদারিত্বটি একটি নজির স্থাপন করেছে যে কীভাবে Google-এর ইঞ্জিনিয়ারিং দলগুলি WasmGC-তে চলমান আরও Google অ্যাপের জন্য Chrome-এর সাথে কার্যকরভাবে কাজ করতে পারে৷

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

গুগল শীট গণনা ইঞ্জিনটি মূলত জাভাতে লেখা হয়েছিল এবং 2006 সালে চালু হয়েছিল। পণ্যের প্রথম দিনগুলিতে, সমস্ত গণনা সার্ভারে হয়েছিল। যাইহোক, 2013 থেকে, ইঞ্জিনটি জাভাস্ক্রিপ্ট ব্যবহার করে ব্রাউজারে চলছে। এটি মূলত Google Web Toolkit ( GWT ) এর মাধ্যমে এবং পরে জাভা টু ক্লোজার জাভাস্ক্রিপ্ট ট্রান্সপিলার ( J2CL ) এর মাধ্যমে সম্পন্ন হয়েছিল। JavaScript গণনা ইঞ্জিন একটি ওয়েব ওয়ার্কারে চলে এবং একটি MessageChannel ব্যবহার করে প্রধান থ্রেডের সাথে যোগাযোগ করে।

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

জাভাস্ক্রিপ্ট জাভা থেকে ধীর কেন?

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

সমাধান: WasmGC

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

Chrome-এর সাথে Google Workspace পার্টনার

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

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

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

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

শীট ওয়াসমের প্রাথমিক সংস্করণটি জাভাস্ক্রিপ্টের তুলনায় প্রায় দুই গুণ ধীরগতির গণনার কার্যকারিতা দেখিয়েছে। যাইহোক, এটি একটি নতুন স্পেসিফিকেশন, নতুন কম্পাইলার এবং বেশ কয়েকটি নতুন লাইব্রেরির জন্য খারাপ ফলাফল নয়। এই বিন্দু থেকে, পত্রক দল অপ্টিমাইজ করা শুরু করে৷ তারা যে অপ্টিমাইজেশনগুলি খুঁজে পেয়েছে তার মধ্যে কয়েকটি বিভাগ আবির্ভূত হয়েছে:

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

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

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

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

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

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

উপসংহার

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

স্বীকৃতি

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