ক্লাউডফ্লেয়ারের রকেট লোডার আসলে কীভাবে কাজ করে (এবং কীভাবে কোনও বিকাশকারী সামঞ্জস্যতা নিশ্চিত করতে পারে)?


31

ক্লাউডফ্লারে রকেট লোডার (বিনামূল্যে এবং অর্থ প্রদানের অ্যাকাউন্টে উভয়) নামে একটি গ্রাউন্ড ব্রেকিং প্রযুক্তি রয়েছে । কিন্তু এটি আসলে কীভাবে কাজ করে?

তারা একটি আছে দম্পতি এর পৃষ্ঠাগুলি যে প্রযুক্তি বর্ণনা , কিন্তু না প্রযুক্তিগত বিবরণ অনেক। একটি মূল বৈশিষ্ট্য হ'ল এটি সমস্ত জাভাস্ক্রিপ্ট লোডকে একটি অ-ব্লকিং ফ্যাশনে (অবিচ্ছিন্নভাবে) তোলে , এটি বেশ অবিশ্বাস্য কীর্তি! এর অর্থ এইচটিএমএল / সিএসএস স্ক্রিপ্টগুলি লোড এবং চালানোর জন্য অপেক্ষা না করে রেন্ডার করা যায়।

ক্লাউডফ্লেয়ার রকেট লোডার ডায়াগ্রাম

কীভাবে সম্ভব?

নিশ্চয় এটা কেবল সব পরিবর্তন করতে পারেন <script>ব্যবহার ট্যাগ async="true"বা defer="true"এই কয়েকটি জিনিস বিরতি দেবে ...

  1. স্ক্রিপ্টগুলিকে এখনও সঠিক ক্রমে লোড করা দরকার (উদাহরণস্বরূপ, jQuery লাইব্রেরিটি লোড না হওয়া পর্যন্ত আপনি jQuery প্লাগইনগুলি লোড করতে পারবেন না))
  2. document.write()এই স্ক্রিপ্টগুলিতে কলগুলি কাজ করতে হবে ( দৃশ্যত এগুলি সাধারণত অ্যাসিঙ্ক স্ক্রিপ্টগুলিতে কিছুই করে না )।
  3. ডোমকন্টেন্টলয়েড ইভেন্টের কী হবে? এটির ট্রিগার হওয়ার পরে যদি কিছু স্ক্রিপ্টগুলি লোড হয়ে যায় , তবে তাদের ইভেন্ট হ্যান্ডলাররা কি অবিচ্ছিন্ন হয়ে যায়?

এবং বিকাশকারী হিসাবে, আমার সাইট / স্ক্রিপ্ট / প্লাগইন রকেট লোডারের সাথে সামঞ্জস্যপূর্ণ থাকতে আমি নিশ্চিত হওয়ার জন্য আরও কি কি সচেতন হওয়া প্রয়োজন?

উত্তর:


26

CloudFlare রকেট লোডার বর্ণনা মত এই ...

রকেট লোডার হ'ল একটি সাধারণ-উদ্দেশ্যে অ্যাসিনক্রোনাস জাভাস্ক্রিপ্ট লোডার এবং একটি হালকা ওজনের ভার্চুয়াল ব্রাউজার যা উইন্ডো.অনলোডের পরে কোনও জাভাস্ক্রিপ্ট কোড নিরাপদে চালাতে পারে।

রকেট লোডার একগুচ্ছ কাজ করে:

  1. এটি নিশ্চিত করে যে আপনার পৃষ্ঠার সমস্ত স্ক্রিপ্ট আপনার পৃষ্ঠার সামগ্রী লোড হওয়া থেকে বিরত রাখবে না;
  2. আপনার পৃষ্ঠায় থাকা সমস্ত স্ক্রিপ্টগুলি তৃতীয় পক্ষের স্ক্রিপ্টগুলি তাত্পর্যপূর্ণভাবে লোড করে;
  3. সমস্ত স্ক্রিপ্ট অনুরোধকে একক অনুরোধে বান্ডিল করে যার উপর একাধিক প্রতিক্রিয়া প্রবাহিত হতে পারে;
  4. স্ক্রিপ্টগুলি আরও বুদ্ধিমানের সাথে সঞ্চয় করতে বেশিরভাগ ব্রাউজার এবং প্রায় সমস্ত স্মার্ট ফোনগুলিতে লোকালস্টোরেজ ব্যবহার করে যাতে প্রয়োজন ব্যতীত সেগুলি পুনরায় সংযুক্ত করা যায় না।

সুতরাং এটি দুর্দান্ত, তবে এটি কীভাবে এটি অর্জন করবে?

আমি নিজের সাইটে ক্লাউডফ্লেয়ার + রকেট লোডার চালিয়ে যা পড়েছি এবং আবিষ্কার করেছি তা থেকে এটি মোটামুটি এভাবে কাজ করে ...

  1. ক্লাউডফ্লেয়ার সার্ভার থেকে যখন কোনও HTML পৃষ্ঠার অনুরোধ করা হয়, এটি মূল ওয়েব হোস্ট থেকে লোড করার পরে, এটি সমস্ত স্ক্রিপ্ট ট্যাগগুলিতে আবার লিখতে থাকে <script type="text/rocketscript">

  2. ব্রাউজারগুলি "পাঠ্য / রকেট স্ক্রিপ্ট" ফর্ম্যাটটি বুঝতে না পারায় স্বাভাবিকভাবে স্ক্রিপ্ট ট্যাগগুলি উপেক্ষা করে

  3. ক্লাউডফ্লেয়ার এছাড়াও cloudflare.min.jsপৃষ্ঠায় একটি অতিরিক্ত স্ক্রিপ্ট ইনজেকশন দেয় যা যাদু সম্পাদন করে ( এখানে ফর্ম্যাট সংস্করণ দেখুন )। প্রাথমিকভাবে ব্রাউজার দ্বারা লোড হওয়া এটিই একমাত্র স্ক্রিপ্ট (অযৌক্তিকভাবে)।

  4. এই স্ক্রিপ্টটি "পাঠ্য / রকেটসক্রিপ্ট" টাইপ সহ যে কোনও স্ক্রিপ্টগুলির জন্য পৃষ্ঠাটি পার্স করে।

  5. এটি তখন ব্রাউজারের স্থানীয় স্টোরেজে এই স্ক্রিপ্টগুলির কোনও ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করে। যদি তা না হয় তবে এটি ক্লাউডফ্লেয়ার সিডিএন থেকে তাদের জন্য (লজিক্যাল বান্ডিলগুলিতে সম্মিলিত) AJAX অনুরোধ করে। আমি কীভাবে এটি স্ক্রিপ্টগুলি একসাথে গোষ্ঠীভুক্ত করতে কাজ করে তা পুরোপুরি নিশ্চিত নই।

  6. সিডিএন সার্ভারগুলি স্ক্রিপ্টগুলি সংগ্রহ করে (যা বেশ কয়েকটি বিভিন্ন সার্ভার থেকে আসতে পারে: গুগল, টুইটার, ফেসবুক, অন্যান্য সিডিএন ইত্যাদি), তাদের ক্যাশে থেকে বা উত্সের সার্ভারগুলি থেকে, এবং তারপরে ফেরত পাঠানোর আগে তাদের একত্রিত, মিনিফাইজ এবং জিজেডআইপি করুন ব্রাউজারে।

  7. এই ভার্চুয়াল ব্রাউজারের জিনিসটি যা তারা উল্লেখ করেছে তা অবশ্যই কিছু জাভাস্ক্রিপ্ট হতে হবে যা এই স্ক্রিপ্টগুলির প্রত্যেকটিকে সঠিক ক্রমে চালিত করে, এই জাতীয় জিনিসগুলি করে:

    • সমস্ত কলগুলিতে ক্যাচ করা document.write()এবং সেই সামগ্রীটিকে পৃষ্ঠায় সঠিক স্থানে ইনজেকশন করা। (সম্ভবত write()কোনও কাস্টম দিয়ে ব্রাউজারের ক্রিয়াটি ওভাররাইট করে ?)
    • যেমন Retriggering ঘটনা DOMContentLoaded এবং লোড

আমি এটির বেশ কার্যত হতবাক হয়েছি (যদিও এটি সম্ভবত সর্বদা হয় না )। তবে সাধারণ পরিস্থিতিতে, আমি মনে করি না যে বিকাশকারীদের তাদের জাভাস্ক্রিপ্ট সামঞ্জস্য করার জন্য বিশেষ কিছু করা দরকার।

এটি একটি সম্প্রদায় উইকি, তাই অনুগ্রহ করে সম্পাদনা করুন এবং অনুপস্থিত যে কোনও অতিরিক্ত বিবরণ যুক্ত করুন।


2
উপরে উল্লিখিত হিসাবে, এর ফলে সমস্যা হতে পারে এবং ফলস্বরূপ অক্ষম করার দরকার হতে পারে, তাই মোতায়েনের আগে পরীক্ষা করুন।
ড্যান

ভার্চুয়াল ব্রাউজার সম্ভবত একটি হল Shadow DOM দাঁড়া মত আধুনিক পরিকাঠামোর দ্বারা কৌণিক, জ্বলন্ত আগুন, নকআউট, ইত্যাদি দ্বারা ব্যবহৃত বেশী মত
কায়সার

3
আমরা যদি কোনও ক্লাউডফেয়ার সক্ষম পৃষ্ঠায় চলে যাই যা এই রকেটস্ক্রিপ্ট জিনিস সক্ষম করেছে, তবে আমরা কনসোলটিতে দেখতে পেলাম যে বাস্তবে document.writeরূপান্তরিত হয়েছে। আমি function (b,d,e,g,h){if(u.getActivated())return c.apply(f,arguments);try{return j[a].apply(f,arguments)}catch(i){return j[a](b,d,e,g,h)}}স্ট্রিং মান হিসাবে পেতে । সুতরাং যে অনুমানটি document.writeওভাররাইট করা হয়েছে তা সত্যই সঠিক indeed
user3459110

উপরোক্ত পোস্টটির ইতালিয়ান অনুবাদ, যদি কেউ আগ্রহী: klayz.com/commune/…
Glauco Zega

5
একটি জিনিস আমি লক্ষ্য করেছি যে রকেট লোডার ডকুমেন্ট.রাইট ব্যবহার করে। ক্রোম 53, ডিভটুলস সমস্যাযুক্ত ডকুমেন্টের জন্য সতর্কতা জারি করে wwrit () বিবৃতি এবং এর ব্যবহারের ফলে একটি সতর্কতা সূচিত হয়। আসলে, ক্লাউডফ্লেয়ারের ডকুমেন্ট.রাইট () এর ব্যবহার 2 জি সংযোগে ক্রোম 53 + দ্বারা অবরুদ্ধ করা হবে। আরও তথ্যের জন্য Chrome ডেভেলপারগণ দেখুন developers.google.com/web/updates/2016/08/...
davemac
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.