এইগুলি আমি খনন করতে সক্ষম হয়েছি এমন বিশদ। এটি প্রথমে লক্ষ্য করার মতো যে যদিও জাভাস্ক্রিপ্টটি সাধারণত একটি ভিএম-এর ব্যাখ্যা এবং চালিত হিসাবে বিবেচিত হয় তবে আধুনিক দোভাষীদের ক্ষেত্রে এটি সত্যিকার অর্থে ঘটেনি, যা সরাসরি উত্সটিকে মেশিন কোডে সংকলন করতে থাকে (আইআই ব্যতীত)।
ক্রোম: ভি 8 ইঞ্জিন
ভি 8 এর একটি সংকলন ক্যাশে রয়েছে। এই স্টোরগুলি 5 টি পর্যন্ত জঞ্জাল সংগ্রহের জন্য উত্সের একটি হ্যাশ ব্যবহার করে জাভাস্ক্রিপ্ট সংকলিত। এর অর্থ সোর্স কোডের দুটি অভিন্ন টুকরা সেগুলি কীভাবে অন্তর্ভুক্ত করা হয়েছিল তা নির্বিশেষে মেমরিতে ক্যাশে এন্ট্রি ভাগ করবে। পৃষ্ঠাগুলি পুনরায় লোড করার পরে এই ক্যাশেটি সাফ করা হয় না।
উৎস
আপডেট - 19/03/2015
ক্রোম টিম জাভাস্ক্রিপ্ট স্ট্রিমিং এবং ক্যাশিংয়ের জন্য তাদের নতুন কৌশল সম্পর্কে বিশদ প্রকাশ করেছে ।
- স্ক্রিপ্ট স্ট্রিমিং
স্ক্রিপ্ট স্ট্রিমিং জাভাস্ক্রিপ্ট ফাইলগুলির বিশ্লেষণকে অনুকূল করে। [...]
সংস্করণ ৪১ থেকে শুরু করে, ক্রোম ডাউনলোড শুরু হওয়ার সাথে সাথে একটি আলাদা থ্রেডে অ্যাসিঙ্ক এবং মুলতুবি স্ক্রিপ্টগুলি পার্স করে। এর অর্থ এই যে পার্সিংটি ডাউনলোডটি শেষ হওয়ার পরে মাত্র মিলিসেকেন্ডগুলি সম্পূর্ণ করতে পারে এবং ফলস্বরূপ পৃষ্ঠাগুলি 10% তত দ্রুত লোড হয়।
- কোড ক্যাচিং
সাধারণত, ভি 8 ইঞ্জিন প্রতিটি ভিজিট পৃষ্ঠার জাভাস্ক্রিপ্ট সংকলন করে, প্রসেসরের বোঝার নির্দেশকে রূপান্তরিত করে। সংকলিত কোডটি সংকলনের সময়ে মেশিনের রাজ্য এবং প্রেক্ষাপটের উপর নির্ভরশীল হিসাবে কোনও ব্যবহারকারী পৃষ্ঠা থেকে দূরে নেভিগেট হয়ে গেলে এই সংকলিত কোডটি বাতিল করা হয়।
ক্রোম 42 সংকলিত কোডটির স্থানীয় অনুলিপি সংরক্ষণের একটি উন্নত কৌশলটি প্রবর্তন করে, যাতে ব্যবহারকারী পৃষ্ঠায় ফিরে আসে ডাউনলোডিং, পার্সিং এবং সংকলন পদক্ষেপগুলি সমস্ত এড়িয়ে যেতে পারে। সমস্ত পৃষ্ঠা লোড জুড়ে, এটি ক্রোমকে প্রায় 40% সংকলন সময় এড়াতে দেয় এবং মোবাইল ডিভাইসে মূল্যবান ব্যাটারি সংরক্ষণ করে।
অপেরা: কারাকান ইঞ্জিন
অনুশীলনে এর অর্থ হ'ল যখনই কোনও স্ক্রিপ্ট প্রোগ্রাম সংকলিত হতে চলেছে, যার উত্স কোডটি সম্প্রতি সংকলিত কিছু অন্যান্য প্রোগ্রামের অনুরূপ, আমরা সংকলকটি থেকে পূর্ববর্তী আউটপুটটিকে পুনরায় ব্যবহার করি এবং সংকলনের পদক্ষেপটি পুরোপুরি এড়িয়ে যাই। এই ব্রাউজটি সাধারণত ব্রাউজিং পরিস্থিতিগুলিতে বেশ কার্যকর যেখানে একই সাইট থেকে পৃষ্ঠার পরে একটি পৃষ্ঠা লোড করে, যেমন একটি নিউজ সার্ভিসের বিভিন্ন সংবাদ নিবন্ধ, যেহেতু প্রতিটি পৃষ্ঠা প্রায়শই একই, কখনও কখনও খুব বড় স্ক্রিপ্ট লাইব্রেরি লোড করে।
অতএব জাভাস্ক্রিপ্ট পৃষ্ঠা পুনরায় লোড জুড়ে ক্যাশে করা হয়, একই স্ক্রিপ্টে দুটি অনুরোধ পুনরায় সংকলনের ফলে আসবে না।
উৎস
ফায়ারফক্স: স্পাইডারমোনকি ইঞ্জিন
স্পাইডারমনকি Nanojit
তার নেটিভ ব্যাক-এন্ড হিসাবে ব্যবহার করে , একটি জেআইটি সংকলক। মেশিন কোডটি সংকলনের প্রক্রিয়াটি এখানে দেখা যায় । সংক্ষেপে, এটা মনে হচ্ছে, স্ক্রিপ্ট পুনরায় কম্পাইল করতে তারা লোড করা হয়। তবে, আমরা যদি অভ্যন্তরীণ দিকগুলি ঘুরে দেখি তবে Nanojit
দেখতে পাচ্ছি যে উচ্চতর স্তরের মনিটর jstracer
, যা সংকলন ট্র্যাক করতে ব্যবহৃত হয় তা সংকলনের সময় তিনটি ধাপের মধ্য দিয়ে রূপান্তর করতে পারে, এতে একটি সুবিধা প্রদান করে Nanojit
:
ট্রেস মনিটরের প্রাথমিক অবস্থা পর্যবেক্ষণ করছে। এর অর্থ স্পাইডারমনকি বাইটকোডকে ব্যাখ্যা করছে। প্রতিবার স্পাইডারমনকি একটি পশ্চাদপদ-জাম্প বাইটকোডকে ব্যাখ্যা করে, মনিটর জাম্প-টার্গেট প্রোগ্রাম-কাউন্টার (পিসি) এর মান কতবার লাফিয়ে যায় তার নোট করে। এই নম্বরটিকে পিসির হিট কাউন্ট বলে। যদি কোনও নির্দিষ্ট পিসির হিট গণনা একটি প্রান্তিক মানের কাছে পৌঁছায়, লক্ষ্যটিকে গরম বলে বিবেচনা করা হয়।
যখন মনিটর লক্ষ্য করে যে কোনও পিসি গরম আছে, তখন লক্ষ্য পিসির জন্য দেশী কোডের একটি খণ্ড রয়েছে কিনা তা দেখতে এটি একটি হ্যাশটেবলের টুকরো টুকরো করে। যদি এটি এরকম একটি খণ্ড খুঁজে পায়, তবে এটি সম্পাদন মোডে রূপান্তর করে। অন্যথায় এটি রেকর্ডিং মোডে রূপান্তর করে।
এর অর্থ hot
কোডের টুকরোগুলির জন্য নেটিভ কোডটি ক্যাশে করা হয়। যার অর্থ পুনরায় সংকলনের প্রয়োজন হবে না। এটি পরিষ্কার করা হয় না যে এই হ্যাশ দেশীয় বিভাগগুলি পৃষ্ঠা রিফ্রেশের মধ্যে বজায় রাখা হয়। তবে আমি ধরে নেব যে তারা। কেউ যদি এর জন্য সহায়ক প্রমাণ পেতে পারে তবে দুর্দান্ত।
সম্পাদনা : এটি উল্লেখ করা হয়েছে যে মজিলা বিকাশকারী বরিস জবারস্কি বলেছেন যে গেকো এখনও সঙ্কলিত স্ক্রিপ্টগুলি ক্যাশে করে না । এই এসও উত্তর থেকে নেওয়া ।
সাফারি: জাভাস্ক্রিপ্টকোর / স্কোয়ারেলফিশ ইঞ্জিন
আমি মনে করি যে এই বাস্তবায়নের সর্বোত্তম উত্তর ইতিমধ্যে অন্য কেউ দিয়েছেন ।
আমরা বর্তমানে বাইটকোড (বা নেটিভ কোড) ক্যাশে করি না। এটি এমন একটি
বিকল্প যা আমরা বিবেচনা করেছি, তবে বর্তমানে কোড জেনারেশন
জেএস বাস্তবায়ন সময়ের (<2%) ক্ষুদ্র অংশ, সুতরাং আমরা
এই মুহূর্তে এটি অনুসরণ করছি না ।
এটি সাফারির লিড ডেভেলপার ম্যাকিয়েজ স্টাচোয়িয়াক লিখেছিলেন । সুতরাং আমি মনে করি আমরা এটি সত্য হতে পারে।
আমি অন্য কোনও তথ্য সন্ধান করতে অক্ষম ছিল তবে আপনি এখানে সর্বশেষ SquirrelFish Extreme
ইঞ্জিনটির গতির উন্নতি সম্পর্কে আরও পড়তে পারেন, বা উত্সাহী বোধ করলে এখানে উত্স কোডটি ব্রাউজ করতে পারেন ।
আইই: চক্র ইঞ্জিন
এই ক্ষেত্রে আই 9 এর জাভাস্ক্রিপ্ট ইঞ্জিন (চক্র) সম্পর্কিত কোনও বর্তমান তথ্য নেই। কেউ কিছু জেনে থাকলে কমেন্ট করে জানাবেন।
এটি বেশ সরকারী, তবে আইআই এর পুরানো ইঞ্জিন বাস্তবায়নের জন্য এরিক লিপার্ট (জেএসক্রিপ্টের এমএস বিকাশকারী ) এখানে একটি ব্লগের জবাবে বলেছেন:
জেএসক্রিপ্ট ক্লাসিক একটি সংকলিত ভাষার মতো এই অর্থে কাজ করে যে কোনও জেএসক্রিপ্ট ক্লাসিক প্রোগ্রাম চলার আগে, আমরা কোডটি পুরোপুরি বাক্য গঠন করি, একটি সম্পূর্ণ পার্স ট্রি তৈরি করি এবং একটি বাইকোড তৈরি করি। এরপরে আমরা বাইটকোড দোভাষী দ্বারা বাইটকোড চালাই। সেই অর্থে, JScript জাভা হিসাবে "সংকলিত" হিসাবে প্রতিটি বিট। পার্থক্যটি হ'ল জেএসক্রিপ্ট আপনাকে আমাদের মালিকানাধীন বাইটকোডটি ধরে রাখতে বা পরীক্ষা করতে দেয় না । এছাড়াও, বাইটোকোডটি জেভিএম বাইটকোডের তুলনায় অনেক উচ্চ স্তরের - জেএসক্রিপ্ট ক্লাসিক বাইটোকোড ভাষা পার্স গাছের লিনিয়ারাইজেশন থেকে কিছুটা বেশি, যেখানে জেভিএম বাইটকোডটি একটি নিম্ন-স্তরের স্ট্যাক মেশিনে স্পষ্টভাবে পরিচালিত করার উদ্দেশ্যে তৈরি হয়েছে।
এটি পরামর্শ দেয় যে বাইটোকোড কোনওভাবেই স্থির থাকে না এবং এভাবে বাইটকোড ক্যাশে হয় না।