Next.js-এর স্ক্রিপ্ট কম্পোনেন্টের পিছনে থাকা ভিশন বুঝুন, যা থার্ড-পার্টি স্ক্রিপ্টের লোডিং অপ্টিমাইজ করার জন্য একটি বিল্ট-ইন সমাধান প্রদান করে।
মোবাইল ও ডেস্কটপে দেখানো ওয়েবসাইটের প্রায় ৪৫% অনুরোধ হল থার্ড-পার্টি অনুরোধ যার মধ্যে ৩৩% হল স্ক্রিপ্ট। থার্ড-পার্টি স্ক্রিপ্টের সাইজ, লেটেন্সি ও লোডিংয়ের সময় সাইটের পারফর্ম্যান্সকে উল্লেখযোগ্যভাবে প্রভাবিত করতে পারে। Next.js স্ক্রিপ্ট কম্পোনেন্ট বেকড-ইন সেরা পদ্ধতি এবং ডিফল্ট সহ আসে যা ডেভেলপারদের তাদের অ্যাপ্লিকেশনে থার্ড-পার্টি স্ক্রিপ্ট চালু করতে সাহায্য করে এবং একই সাথে সম্ভাব্য পারফর্ম্যান্স সংক্রান্ত সমস্যা সমাধান করে।
থার্ড-পার্টি স্ক্রিপ্ট এবং পারফর্ম্যান্সের উপর সেটির প্রভাব
থার্ড-পার্টি স্ক্রিপ্ট ওয়েব ডেভেলপারদের সাধারণ ফিচার প্রয়োগ করার জন্য আগে থেকে থাকা সমাধান ব্যবহার করতে এবং ডেভেলপমেন্টের সময় কমাতে সাহায্য করে। কিন্তু এই স্ক্রিপ্টের ক্রিয়েটরদের সাধারণত কোনও ইনসেনটিভ থাকে না যার জন্য তারা যে ওয়েবসাইটে স্ক্রিপ্ট ব্যবহার করা হচ্ছে তার পারফর্ম্যান্সের উপর প্রভাব বিবেচনা করবেন। এইসব স্ক্রিপ্ট ডেভেলপারদের কাছেও ব্ল্যাকবক্সের মতো যারা এগুলি ব্যবহার করেন।
বিভিন্ন ধরনের থার্ড-পার্টি অনুরোধের ক্ষেত্রে ওয়েবসাইট দ্বারা ডাউনলোড করা থার্ড-পার্টি বাইট-এর একটি উল্লেখযোগ্য অংশ হল স্ক্রিপ্ট। ডিফল্ট হিসেবে, ব্রাউজার ডকুমেন্টে স্ক্রিপ্টের অবস্থানের উপর ভিত্তি করে সেগুলিকে অগ্রাধিকার দেয়, যা ব্যবহারকারীর অভিজ্ঞতার জন্য গুরুত্বপূর্ণ স্ক্রিপ্টগুলি আবিষ্কার বা কার্যকর করতে দেরি করতে পারে।
লেআউটের জন্য প্রয়োজনীয় থার্ড-পার্টি লাইব্রেরিগুলি পৃষ্ঠাটি রেন্ডার করার জন্য আগেই লোড করা উচিত। প্রাথমিক রেন্ডারের জন্য প্রয়োজন নেই এমন থার্ড-পার্টিকে স্থগিত করা উচিত যাতে তারা মূল থ্রেডে অন্যান্য প্রসেসিং ব্লক না করে। রেন্ডার-ব্লকিং বা প্রধান থ্রেড ব্লকিং স্ক্রিপ্ট ফ্ল্যাগ করার জন্য Lighthouse-এ দুটি অডিট আছে।
আপনার পৃষ্ঠার রিসোর্স লোডিং সিকোয়েন্স বিবেচনা করা গুরুত্বপূর্ণ যাতে গুরুত্বপূর্ণ রিসোর্স লোড হতে দেরি না হয় এবং গুরুত্বহীন রিসোর্স গুরুত্বপূর্ণ রিসোর্সকে ব্লক না করে।
থার্ড-পার্টির প্রভাব কমানোর জন্য পেশাদার পদ্ধতি থাকলেও, ব্যবহার করা প্রতিটি থার্ড-পার্টির জন্য সেগুলি কীভাবে প্রয়োগ করতে হয় তা সবাই নাও জানতে পারেন। এটি জটিল হতে পারে কারণ:
- গড়ে, ওয়েবসাইটগুলি মোবাইল এবং ডেস্কটপে স্ক্রিপ্ট সহ ২১ থেকে ২৩টি বিভিন্ন থার্ড-পার্টি ব্যবহার করে। প্রতিটির জন্য ব্যবহার ও সাজেশন আলাদা হতে পারে।
- কোনও নির্দিষ্ট ফ্রেমওয়ার্ক বা UI লাইব্রেরি ব্যবহার করা হয়েছে কিনা তার উপর ভিত্তি করে অনেক থার্ড-পার্টি প্রয়োগ করার পদ্ধতি আলাদা হতে পারে।
- নতুন থার্ড-পার্টি লাইব্রেরি প্রায়ই নিয়ে আসা হয়।
- একই থার্ড-পার্টির সাথে সম্পর্কিত বিভিন্ন ব্যবসার প্রয়োজনীয়তা ডেভেলপারদের জন্য এর ব্যবহারকে স্ট্যান্ডার্ডাইজ করা কঠিন করে তোলে।
থার্ড-পার্টি স্ক্রিপ্টের উপর Aurora-র ফোকাস
ওপেন সোর্স ওয়েব ফ্রেমওয়ার্ক ও টুলের সাথে Aurora-এর কোলাবরেশনের অংশ হল, ডেভেলপারদের পারফর্ম্যান্স, অ্যাক্সেসিবিলিটি, নিরাপত্তা ও মোবাইল রেডিনেসের মতো ব্যবহারকারীর অভিজ্ঞতার বিভিন্ন দিক উন্নত করতে সাহায্য করার জন্য শক্তিশালী ডিফল্ট ও মতামতযুক্ত টুলিং প্রদান করা। ২০২১ সালে, আমরা ফ্রেমওয়ার্ক স্ট্যাককে ব্যবহারকারীর অভিজ্ঞতা এবং তাদের Core Web Vitals মেট্রিক উন্নত করতে সাহায্য করার উপর ফোকাস করেছি।
ফ্রেমওয়ার্কের পারফর্ম্যান্স উন্নত করার লক্ষ্য পূরণের জন্য সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপগুলির মধ্যে একটি হল Next.js-এ থার্ড-পার্টি স্ক্রিপ্টের আদর্শ লোডিং সিকোয়েন্স নিয়ে গবেষণা করা। Next.js-এর মতো ফ্রেমওয়ার্কগুলি অনন্যভাবে উপযোগী ডিফল্ট এবং ফিচার প্রদান করার জন্য উপযুক্ত যা ডেভেলপারদের থার্ড-পার্টি সহ রিসোর্সগুলি দক্ষতার সাথে লোড করতে সাহায্য করে। কোন থার্ড-পার্টি বিভিন্ন ফ্রেমওয়ার্ক জুড়ে সবচেয়ে বেশি ব্লক রেন্ডারিং করে তা খুঁজে বের করতে আমরা বিস্তারিত HTTP আর্কাইভ এবং Lighthouse ডেটা স্টাডি করেছি।
অ্যাপ্লিকেশনে ব্যবহৃত থার্ড-পার্টি স্ক্রিপ্ট ব্লক করার মূল-থ্রেডের সমস্যা সমাধান করতে, আমরা স্ক্রিপ্ট কম্পোনেন্ট তৈরি করেছি। থার্ড-পার্টি স্ক্রিপ্ট লোড করার জন্য ডেভেলপারদের আরও ভালো কন্ট্রোল প্রদান করতে, কম্পোনেন্টটি সিকোয়েন্সিং ফিচার এনক্যাপসুলেট করে।
ফ্রেমওয়ার্ক কম্পোনেন্ট ছাড়াই থার্ড-পার্টি স্ক্রিপ্ট সিকোয়েন্স করা
রেন্ডার-ব্লকিং স্ক্রিপ্টের প্রভাব কমাতে উপলভ্য নির্দেশিকা থার্ড-পার্টি স্ক্রিপ্ট দক্ষতার সাথে লোড এবং সিকোয়েন্স করার জন্য নিম্নলিখিত পদ্ধতিগুলি প্রদান করে:
<script>ট্যাগের সাথেasyncবাdeferঅ্যাট্রিবিউট ব্যবহার করুন যা ব্রাউজারকে ডকুমেন্ট পার্সার ব্লক না করেই অপ্রয়োজনীয় থার্ড-পার্টি স্ক্রিপ্ট লোড করতে বলে। প্রাথমিক পৃষ্ঠা লোড বা প্রথম ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য প্রয়োজন নেই এমন স্ক্রিপ্টগুলিকে নন-ক্রিটিক্যাল হিসেবে বিবেচনা করা যেতে পারে।<script src="https://example.com/script1.js" defer></script> <script src="https://example.com/script2.js" async></script>আগে থেকে কানেক্ট করা এবং ডিএনএস-প্রিফেচ ব্যবহার করে প্রয়োজনীয় অরিজিনের সাথে আগে থেকে কানেকশন তৈরি করুন। এটি গুরুত্বপূর্ণ স্ক্রিপ্ট আগে ডাউনলোড শুরু করার অনুমতি দেয়।
<head> <link rel="preconnect" href="http://PreconnThis.com"> <link rel="dns-prefetch" href="http://PrefetchThis.com"> </head>মূল পৃষ্ঠার কন্টেন্ট লোড হওয়া শেষ হওয়ার পরে বা ব্যবহারকারী পৃষ্ঠার যে অংশে থার্ড-পার্টি রিসোর্স ও এম্বেড করা কন্টেন্ট আছে সেখানে স্ক্রল করে গেলে, সেগুলি ধীরে ধীরে লোড করুন।
Next.js স্ক্রিপ্ট কম্পোনেন্ট
Next.js স্ক্রিপ্ট কম্পোনেন্ট স্ক্রিপ্ট সিকোয়েন্স করার জন্য উপরের পদ্ধতিগুলি প্রয়োগ করে এবং ডেভেলপারদের তাদের লোডিং স্ট্র্যাটেজি নির্ধারণ করার জন্য একটি টেমপ্লেট প্রদান করে। উপযুক্ত স্ট্র্যাটেজি নির্দিষ্ট করা হয়ে গেলে, এটি অন্যান্য গুরুত্বপূর্ণ রিসোর্স ব্লক না করেই অপ্টিমালভাবে লোড হবে।
স্ক্রিপ্ট কম্পোনেন্ট HTML <script> ট্যাগের উপর ভিত্তি করে তৈরি করা হয় এবং স্ট্র্যাটেজি অ্যাট্রিবিউট ব্যবহার করে থার্ড-পার্টি স্ক্রিপ্টের জন্য লোডিং প্রায়োরিটি সেট করার বিকল্প প্রদান করে।
// Example for beforeInteractive:
<Script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=IntersectionObserverEntry%2CIntersectionObserver" strategy="beforeInteractive" />
// Example for afterInteractive (default):
<Script src="https://example.com/samplescript.js" />
// Example for lazyonload:
<Script src="https://connect.facebook.net/en_US/sdk.js" strategy="lazyOnload" />
স্ট্র্যাটেজি অ্যাট্রিবিউটে তিনটি ভ্যালু থাকতে পারে।
beforeInteractive: পৃষ্ঠা ইন্টার্যাক্টিভ হওয়ার আগে যেসব গুরুত্বপূর্ণ স্ক্রিপ্ট এক্সিকিউট করা উচিত, সেগুলির জন্য এই বিকল্প ব্যবহার করা যেতে পারে। Next.js নিশ্চিত করে যে এই ধরনের স্ক্রিপ্ট সার্ভারে প্রাথমিক HTML-এ ইনজেক্ট করা হয়েছে এবং অন্যান্য সেল্ফ-বান্ডেল করা জাভাস্ক্রিপ্টের আগে এক্সিকিউট করা হয়েছে। সম্মতি ম্যানেজমেন্ট, বট শনাক্তকরণ স্ক্রিপ্ট বা গুরুত্বপূর্ণ কন্টেন্ট রেন্ডার করার জন্য প্রয়োজনীয় সহায়ক লাইব্রেরি এই কৌশলের জন্য উপযুক্ত।afterInteractive: এটি হল প্রয়োগ করা ডিফল্ট স্ট্র্যাটেজি এবং এটি defer অ্যাট্রিবিউট সহ স্ক্রিপ্ট লোড করার সমতুল্য। পৃষ্ঠাটি ইন্টার্যাক্টিভ হওয়ার পরে ব্রাউজার রান করতে পারে এমন স্ক্রিপ্টের জন্য এটি ব্যবহার করা উচিত—যেমন, অ্যানালিটিক্স স্ক্রিপ্ট। Next.js ক্লায়েন্ট-সাইডে এইসব স্ক্রিপ্ট ইনজেক্ট করে এবং পৃষ্ঠা হাইড্রেট হওয়ার পরে সেগুলি রান করে। তাই, অন্যভাবে নির্দিষ্ট না করা হলে, স্ক্রিপ্ট কম্পোনেন্ট ব্যবহার করে সংজ্ঞায়িত সমস্ত থার্ড-পার্টি স্ক্রিপ্ট Next.js দ্বারা স্থগিত করা হয়, যার ফলে একটি শক্তিশালী ডিফল্ট প্রদান করা হয়।lazyOnload: ব্রাউজার অলস অবস্থায় থাকলে, কম-অগ্রাধিকারের স্ক্রিপ্ট ধীরে ধীরে লোড করার জন্য এই বিকল্প ব্যবহার করা হতে পারে। পৃষ্ঠাটি ইন্টার্যাক্টিভ হওয়ার সাথে সাথেই এই ধরনের স্ক্রিপ্টের মাধ্যমে প্রদান করা কার্যকারিতার প্রয়োজন হয় না—যেমন, চ্যাট বা সোশ্যাল মিডিয়া প্লাগ-ইন।
ডেভেলপাররা Next.js-কে বলতে পারেন যে তাদের অ্যাপ্লিকেশন কীভাবে কৌশলটি নির্দিষ্ট করে একটি স্ক্রিপ্ট ব্যবহার করে। এটি ফ্রেমওয়ার্ককে স্ক্রিপ্ট লোড করার জন্য অপ্টিমাইজেশন এবং সেরা পদ্ধতি প্রয়োগ করার অনুমতি দেয় এবং একই সাথে সেরা লোডিং সিকোয়েন্স নিশ্চিত করে।
স্ক্রিপ্ট কম্পোনেন্ট ব্যবহার করে, ডেভেলপাররা থার্ড-পার্টি স্ক্রিপ্ট দেরিতে লোড করার জন্য অ্যাপ্লিকেশনের যেকোনও জায়গায় এবং গুরুত্বপূর্ণ স্ক্রিপ্টের জন্য ডকুমেন্ট লেভেলে থার্ড-পার্টি স্ক্রিপ্ট প্লেস করতে পারেন। এর অর্থ হল, স্ক্রিপ্ট কম্পোনেন্টটি স্ক্রিপ্ট ব্যবহার করে কম্পোনেন্টের সাথে সহ-অবস্থিত হতে পারে। হাইড্রেশনের পরে, ব্যবহৃত কৌশলের উপর নির্ভর করে, প্রাথমিকভাবে রেন্ডার করা ডকুমেন্টের শুরুতে বা বডির নিচে স্ক্রিপ্টটি ইনজেক্ট করা হবে।
প্রভাব পরিমাপ করা
আমরা Next.js কমার্স অ্যাপ এবং স্টার্টার ব্লগ-এর জন্য টেমপ্লেট ব্যবহার করে দুটি ডেমো অ্যাপ তৈরি করেছি যা থার্ড-পার্টি স্ক্রিপ্ট অন্তর্ভুক্ত করার প্রভাব পরিমাপ করতে সাহায্য করেছে। Google Tag Manager এবং সোশ্যাল মিডিয়া এম্বেডের জন্য সাধারণত ব্যবহৃত থার্ড-পার্টি প্রথমে সরাসরি এইসব অ্যাপের পৃষ্ঠায় এবং তারপরে স্ক্রিপ্ট কম্পোনেন্টের মাধ্যমে অন্তর্ভুক্ত করা হয়েছিল। তারপর আমরা WebPageTest-এ এই পৃষ্ঠাগুলির পারফর্ম্যান্স তুলনা করেছি।
Next.js কমার্স অ্যাপে থার্ড-পার্টি স্ক্রিপ্ট
নিচে দেখানো ডেমোর জন্য কমার্স অ্যাপ টেমপ্লেটে থার্ড-পার্টি স্ক্রিপ্ট যোগ করা হয়েছে।
নিচের তুলনা থেকে Next.js commerce starter-kit-এর দুটি ভার্সনের ভিজ্যুয়াল প্রগ্রেস দেখানো হয়েছে। যেমন দেখা গেছে, সঠিক লোডিং স্ট্র্যাটেজি সহ স্ক্রিপ্ট কম্পোনেন্ট চালু থাকলে LCP প্রায় ১ সেকেন্ড আগে ঘটে।
Next.js ব্লগে থার্ড-পার্টি স্ক্রিপ্ট
নিচে দেখানো ডেমো ব্লগ অ্যাপে থার্ড-পার্টি স্ক্রিপ্ট যোগ করা হয়েছে।
| আগে | পরে |
|---|---|
| এসিঙ্ক সহ Google Tag Manager | চারটি স্ক্রিপ্টের প্রতিটির জন্য স্ট্র্যাটেজি = lazyonload সহ স্ক্রিপ্ট কম্পোনেন্ট |
| এসিঙ্ক সহ Twitter ফলো বোতাম | |
| অ্যাসিঙ্ক বা ডিফার ছাড়া YouTube-এর 'সাবস্ক্রাইব করুন' বোতাম | |
| অ্যাসিঙ্ক বা ডিফার ছাড়া LinkedIn ফলো বোতাম |
ভিডিওতে যেমন দেখানো হয়েছে, স্ক্রিপ্ট কম্পোনেন্ট ছাড়া পৃষ্ঠায় ফার্স্ট কন্টেন্টফুল পেন্ট (FCP) ০.৯ সেকেন্ডে এবং স্ক্রিপ্ট কম্পোনেন্ট সহ ০.৪ সেকেন্ডে হয়।
স্ক্রিপ্ট কম্পোনেন্টের জন্য পরবর্তী পদক্ষেপ কী
afterInteractive এবং lazyOnload-এর জন্য স্ট্র্যাটেজি বিকল্পগুলি রেন্ডার-ব্লকিং স্ক্রিপ্টের উপর উল্লেখযোগ্য নিয়ন্ত্রণ প্রদান করে, আমরা অন্যান্য বিকল্পগুলিও অন্বেষণ করছি যা স্ক্রিপ্ট কম্পোনেন্টের উপযোগিতা বাড়াবে।
ওয়েব ওয়ার্কার ব্যবহার করা হচ্ছে
ব্যাকগ্রাউন্ড থ্রেডে স্বাধীন স্ক্রিপ্ট চালানোর জন্য ওয়েব ওয়ার্কার ব্যবহার করা যেতে পারে, যা ইউজার ইন্টারফেস টাস্ক প্রসেস করার জন্য প্রধান থ্রেডকে মুক্ত করতে এবং পারফর্ম্যান্স উন্নত করতে পারে। মূল থ্রেড থেকে UI-এর কাজ নয়, বরং জাভাস্ক্রিপ্ট প্রসেসিং অফলোড করার জন্য ওয়েব ওয়ার্কার সবচেয়ে উপযুক্ত। গ্রাহক সহায়তা বা মার্কেটিংয়ের জন্য ব্যবহৃত স্ক্রিপ্ট, যা সাধারণত UI-এর সাথে ইন্টার্যাক্ট করে না, ব্যাকগ্রাউন্ড থ্রেডে এক্সিকিউশনের জন্য উপযুক্ত হতে পারে। একটি লাইটওয়েট থার্ড-পার্টি লাইব্রেরি—PartyTown—এই ধরনের স্ক্রিপ্টকে ওয়েব ওয়ার্কারে আলাদা করার জন্য ব্যবহার করা হতে পারে।
Next.js স্ক্রিপ্ট কম্পোনেন্টের বর্তমান প্রয়োগের সাথে, আমরা স্ট্র্যাটেজি afterInteractive বা lazyOnload-এ সেট করে মূল থ্রেডে এইসব স্ক্রিপ্ট ডিফার করার সাজেশন দিই। ভবিষ্যতে, আমরা একটি নতুন স্ট্র্যাটেজি বিকল্প, 'worker', চালু করার প্রস্তাব করছি, যা Next.js-কে PartyTown বা ওয়েব ওয়ার্কারদের উপর স্ক্রিপ্ট চালানোর জন্য একটি কাস্টম সমাধান ব্যবহার করার অনুমতি দেবে। এই RFC-এর ব্যাপারে ডেভেলপারদের মতামতকে আমরা স্বাগত জানাই।
CLS কমানো
বিজ্ঞাপন, ভিডিও বা সোশ্যাল মিডিয়া ফিড এম্বেডের মতো থার্ড-পার্টি এম্বেড ধীরে ধীরে লোড করার সময় লেআউট শিফ্ট হতে পারে। এটি ব্যবহারকারীর অভিজ্ঞতা এবং পৃষ্ঠার জন্য Cumulative Layout Shift (CLS) মেট্রিককে প্রভাবিত করে। যে কন্টেনারে এম্বেড লোড হবে সেটির সাইজ নির্দিষ্ট করে CLS কমানো যেতে পারে।
স্ক্রিপ্ট কম্পোনেন্ট ব্যবহার করে এমন এম্বেড লোড করা হতে পারে যা লে-আউট শিফ্টের কারণ হতে পারে। আমরা কনফিগারেশন বিকল্প প্রদান করার জন্য এটি বাড়ানোর কথা বিবেচনা করছি যা CLS কমাতে সাহায্য করবে। এটি স্ক্রিপ্ট কম্পোনেন্টের মধ্যে বা সহযোগী কম্পোনেন্ট হিসেবে উপলভ্য হতে পারে।
র্যাপার কম্পোনেন্ট
Google Analytics বা Google Tag Manager (GTM)-এর মতো জনপ্রিয় থার্ড-পার্টি স্ক্রিপ্ট অন্তর্ভুক্ত করার জন্য সিনট্যাক্স ও লোডিং স্ট্র্যাটেজি সাধারণত নির্দিষ্ট থাকে। প্রতিটি ধরনের স্ক্রিপ্টের জন্য এগুলি আলাদা র্যাপার কম্পোনেন্টে আরও এনক্যাপসুলেট করা যেতে পারে। ডেভেলপারদের কাছে অ্যাপ্লিকেশন-নির্দিষ্ট অ্যাট্রিবিউটের (যেমন ট্র্যাকিং আইডি) শুধুমাত্র একটি ন্যূনতম সেট উপলভ্য থাকবে। র্যাপার কম্পোনেন্ট ডেভেলপারদের এইভাবে সাহায্য করবে:
- এর ফলে, তারা জনপ্রিয় স্ক্রিপ্ট ট্যাগ আরও সহজে যোগ করতে পারবেন।
- ফ্রেমওয়ার্ক যাতে ব্যাকগ্রাউন্ডে সবচেয়ে উপযুক্ত স্ট্র্যাটেজি ব্যবহার করে তা নিশ্চিত করা।
উপসংহার
থার্ড-পার্টি স্ক্রিপ্ট সাধারণত ব্যবহারকারী ওয়েবসাইটে নির্দিষ্ট ফিচার অন্তর্ভুক্ত করার জন্য তৈরি করা হয়। অপ্রয়োজনীয় স্ক্রিপ্টের প্রভাব কমাতে, আমরা সেগুলি পরে লোড করার সাজেশন দিই—যা Next.js স্ক্রিপ্ট কম্পোনেন্ট ডিফল্ট হিসেবে করে। ডেভেলপাররা নিশ্চিত যে অন্তর্ভুক্ত স্ক্রিপ্টগুলি গুরুত্বপূর্ণ কার্যকারিতাকে বিলম্বিত করবে না যদি না তারা স্পষ্টভাবে beforeInteractive কৌশল প্রয়োগ করে। Next.js স্ক্রিপ্ট কম্পোনেন্টের মতো, ফ্রেমওয়ার্ক ডেভেলপাররা অন্যান্য ফ্রেমওয়ার্কে এইসব ফিচার তৈরি করার কথাও বিবেচনা করতে পারেন। আমরা Nuxt.js টিমের সাথে একই ধরনের কম্পোনেন্ট নিয়ে আসার জন্য সক্রিয়ভাবে এক্সপ্লোর করছি। মতামতের উপর ভিত্তি করে, আমরা স্ক্রিপ্ট কম্পোনেন্ট আরও উন্নত করার আশা রাখি যাতে আরও বেশি ব্যবহারের ক্ষেত্রে এটি কাজে লাগানো যায়।
কৃতজ্ঞতা স্বীকার
এই পোস্টে মতামত দেওয়ার জন্য Kara Erickson, Janicklas Ralph, Katie Hempenius, Philip Walton, Jeremy Wagner এবং Addy Osmani-কে ধন্যবাদ।