কিভাবে আমরা ওয়েবে গুগল আর্থ নিয়ে আসছি

WebAssembly-এর মাধ্যমে Google Earth-এ ক্রস-ব্রাউজার অ্যাক্সেস উন্নত করা।

জর্ডন মেয়ার্স
Jordon Mears

একটি আদর্শ বিশ্বে, প্রযুক্তি নির্বিশেষে বিকাশকারীরা তৈরি করা প্রতিটি অ্যাপ্লিকেশন ব্রাউজারে উপলব্ধ হবে। কিন্তু ওয়েবে প্রকল্পগুলি আনার ক্ষেত্রে বাধা রয়েছে, তারা যে প্রযুক্তি দিয়ে তৈরি করা হয়েছিল এবং সেই প্রযুক্তিটি বিভিন্ন ব্রাউজার বিক্রেতাদের দ্বারা কতটা ভালভাবে সমর্থিত তার উপর নির্ভর করে। WebAssembly (Wasm) হল W3C দ্বারা প্রমিত একটি কম্পাইল টার্গেট যা ওয়েবে জাভাস্ক্রিপ্ট ব্যতীত অন্য ভাষা থেকে কোডবেস চালানোর অনুমতি দিয়ে এই সমস্যাটি সমাধান করতে সাহায্য করে।

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

কেন আমরা Google Earth এর জন্য WebAssembly বেছে নিয়েছি

আমরা মূলত Google আর্থের বেশিরভাগ C++ এ লিখেছিলাম কারণ এটি একটি ডেস্কটপ অ্যাপ্লিকেশন যা ইনস্টল করার উদ্দেশ্যে ছিল। তারপরে আমরা এটিকে অ্যান্ড্রয়েড এবং iOS-এ পোর্ট করতে সক্ষম হয়েছিলাম কারণ স্মার্টফোনগুলি ধরে নিয়েছিল, NDK এবং Objective-C++ ব্যবহার করে আমাদের বেশিরভাগ C++ কোডবেস ধরে রেখেছিল। 2017 সালে, যখন আমরা পৃথিবীকে ওয়েবে নিয়ে এসেছি, তখন আমরা C++ কোড কম্পাইল করতে এবং Chrome ব্রাউজারে চালাতে নেটিভ ক্লায়েন্ট (NaCl) ব্যবহার করেছি।

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

আইফেল টাওয়ার দেখানো পৃথিবীর একটি স্ক্রিনশট

থ্রেডিং উপর একটি থ্রেড

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

মাল্টি-থ্রেডেড WebAssembly SharedArrayBuffer নামে একটি ব্রাউজার বৈশিষ্ট্যের উপর নির্ভর করে, যা স্পেকটার এবং মেল্টডাউন নিরাপত্তা দুর্বলতা প্রকাশের পর ব্রাউজার থেকে টেনে নেওয়া হয়েছিল। আক্রমণ থেকে সম্ভাব্য ক্ষয়ক্ষতি কমাতে, Chrome এর নিরাপত্তা দল সমস্ত ডেস্কটপ অপারেটিং সিস্টেমের জন্য Chrome-এ সাইট আইসোলেশন চালু করেছে । সাইট আইসোলেশন প্রতিটি রেন্ডারার প্রক্রিয়াকে একটি একক সাইটের নথিতে সীমাবদ্ধ করে। এই নিরাপত্তা বৈশিষ্ট্যের সাথে, Chrome ডেস্কটপের জন্য SharedArrayBuffer পুনরায়-সক্ষম করেছে—যা আমাদেরকে Chrome-এর জন্য আর্থের সাথে মাল্টি-থ্রেডেড WebAssembly ব্যবহার করার অনুমতি দিয়েছে।

SharedArrayBuffer পুনরায় সক্ষম করার জন্য অন্যান্য ব্রাউজার সাইট বিচ্ছিন্নতা বা অন্যান্য প্রশমনে কাজ করছে। ইতিমধ্যে, আর্থ সেই ব্রাউজারগুলিতে একক-থ্রেডেড রান করে।

WebAssembly কিভাবে বিভিন্ন ব্রাউজারে কাজ করে

আমরা আর্থ পোর্টিং ব্রাউজারগুলিতে WebAssembly সমর্থনের অবস্থা সম্পর্কে অনেক কিছু শিখেছি। আপনি যদি WebAssembly ব্যবহার করে অ্যাপ্লিকেশন বিকাশ করতে যাচ্ছেন, তাহলে বিভিন্ন ব্রাউজারে WebAssembly কিভাবে কাজ করে তার বর্তমান অবস্থা বোঝা গুরুত্বপূর্ণ।

প্রান্ত

এজ এইচটিএমএল রেন্ডারার থেকে ক্রোমিয়াম-ভিত্তিক রেন্ডারারে যাওয়ার জন্য মাইক্রোসফ্টের পছন্দের উপর ভিত্তি করে এজ দুটি স্বতন্ত্র বিকাশের অভিজ্ঞতা হওয়ার দ্বারপ্রান্তে রয়েছে৷ এই মুহুর্তে, WebAssembly-এ Google Earth বিটা WebGL2-এর জন্য সমর্থনের অভাবে এজের বর্তমান পাবলিক সংস্করণে চলবে না। Chromium-এর উপর ভিত্তি করে Edge-এর নতুন সংস্করণ, অদূর ভবিষ্যতে জাহাজে আসার পর এটি ঠিক করা হবে। ইতিমধ্যে, আপনি এজের ক্যানারি সংস্করণটি ডাউনলোড করতে পারেন এবং দেখতে পারেন যে পৃথিবী বেশ ভাল কাজ করে।

ক্রোম

ডেস্কটপে মাল্টি-থ্রেডিং সহ WebAssembly-এর জন্য Chrome-এর দৃঢ় সমর্থন রয়েছে, ফলে আপনি আশা করতে পারেন আর্থ মসৃণ হবে। যাইহোক, আমরা WebAssembly-এ মাল্টি-থ্রেডিংয়ের সাথে গতিশীল মেমরি বরাদ্দের জন্য Chrome সমর্থন যোগ করার অপেক্ষায় রয়েছি। ততক্ষণ পর্যন্ত, আর্থ সীমিত পরিমাণে মেমরি (যেমন 32-বিট মেশিন) সহ ডিভাইসগুলিতে শুরু করতে ব্যর্থ হতে পারে।

ফায়ারফক্স

ফায়ারফক্স WebAssembly-এর জন্য ভাল সমর্থন অফার করে, কিন্তু মাল্টি-থ্রেডিংয়ের জন্য সমর্থন নিষ্ক্রিয় করেছে। ফলস্বরূপ, আপনি পৃথিবীর সাথে একটি ধীর অভিজ্ঞতা আশা করতে পারেন। আমরা Mozilla ভবিষ্যতের সংস্করণে মাল্টি-থ্রেডিংয়ের জন্য সমর্থন ফিরিয়ে আনার অপেক্ষায় আছি। উল্টোদিকে, ফায়ারফক্স গতিশীল মেমরি বরাদ্দ সমর্থন করে।

অপেরা

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

সাফারি

Safari এর WebAssembly এর শক্তিশালী বাস্তবায়ন রয়েছে, কিন্তু এটি WebGL2 এর জন্য সম্পূর্ণ সমর্থনের অভাব রয়েছে। অতএব, WebAssembly সহ আর্থ সাফারিতে চলে না। বিশেষত, আমাদের কিছু শেডারের GLSL 1.2 প্রয়োজন। WebGL2 এর জন্য আরও ভাল সমর্থন যোগ হলে আমরা আশা করি সাফারিতেও আর্থ উপলব্ধ হবে।

WebAssembly বৈশিষ্ট্য আরো গ্রহণের জন্য উন্মুখ

পৃথিবীকে ওয়েবে উপলব্ধ করার জন্য এটি একটি দীর্ঘ পথ হয়েছে৷ প্রায় ছয় বছর আগে, আমরা একটি প্রাথমিক asm.js- ভিত্তিক অভ্যন্তরীণ ডেমো দিয়ে শুরু করেছি যা বছরের পর বছর ধরে রক্ষণাবেক্ষণ এবং প্রসারিত হয়েছিল। তখন এটিকে পৃথিবীর একটি ওয়েব অ্যাসেম্বলি বিল্ডে রূপান্তরিত করা হয়, কারণ WebAssembly W3C গৃহীত মান হয়ে ওঠে।

আমরা এখনও WebAssembly এবং আর্থ জন্য যেতে একটি উপায় আছে. বিশেষত, আমরা Emscripten ব্যবহার করে LLVM ব্যাকএন্ডে যেতে চাই (C++ কোডের বাইরে WebAssembly তৈরির টুলচেইন)। এই পরিবর্তনটি ভবিষ্যতের SIMD সমর্থন সক্ষম করবে, সেইসাথে সোর্স-ভাষা কোডের জন্য সোর্স ম্যাপের মতো শক্তিশালী ডিবাগিং টুল। অন্যান্য জিনিস যা আমরা দেখতে আশা করি তা হল অফস্ক্রিন ক্যানভাস গ্রহণ এবং WebAssembly-এ গতিশীল মেমরি বরাদ্দের জন্য সম্পূর্ণ সমর্থন। কিন্তু আমরা জানি আমরা সঠিক পথে আছি: ওয়েব অ্যাসেম্বলি হল ওয়েবে পৃথিবীর দীর্ঘমেয়াদী ভবিষ্যত।

আমাদের বিটা চেষ্টা করার জন্য একটি মুহূর্ত সময় নিন. পৃথিবীতে সরাসরি প্রতিক্রিয়া জানিয়ে এটি আপনার জন্য কীভাবে কাজ করে তা আমাদের জানান।