$ (ডকুমেন্ট) .ডিডি (ফাংশন () {}); পৃষ্ঠার নীচে বনাম স্ক্রিপ্ট


উত্তর:


143

খুব সামান্য এবং নিজেই, কোনওভাবেই ডিওএম আপনার পরিচালনা করার জন্য প্রস্তুত থাকবে ( গুগল থেকে এটি না পড়লে আমি এতে ঘাবড়ে গিয়েছিলাম )। আপনি যদি পৃষ্ঠার কৌশলটির সমাপ্তি ব্যবহার করেন তবে আপনার কোডটিকে অতি সামান্যতম, সামান্যতম বলা যেতে পারে, তবে এতে কিছু আসে যায় না। তবে আরও গুরুত্বপূর্ণ বিষয় হল, এই পৃষ্ঠাটি আপনি যেখানে জাভাস্ক্রিপ্টটিকে পৃষ্ঠায় লিঙ্ক করেছেন তার সাথে সম্পর্কিত।

আপনি যদি নিজের scriptট্যাগটি অন্তর্ভুক্ত করেন headএবং নির্ভর করেন readyতবে ব্রাউজারটি scriptব্যবহারকারীকে কিছু প্রদর্শন করার আগে আপনার ট্যাগটির সাথে মুখোমুখি হয়। ইভেন্টগুলির স্বাভাবিক কোর্সে, ব্রাউজারটি স্ক্রাইকিং থামতে আসে এবং আপনার স্ক্রিপ্টটি ডাউনলোড করে, জাভাস্ক্রিপ্ট ইন্টারপ্রিটারকে জ্বালিয়ে দেয় এবং স্ক্রিপ্টটি তার হাতে দেয়, তারপরে দোভাষী স্ক্রিপ্টটি প্রসেস করার সময় অপেক্ষা করে (এবং তারপরে jQuery বিভিন্নভাবে দেখেন) ডোম প্রস্তুত হওয়ার জন্য)। (আমি "জিনিসের স্বাভাবিক গতিতে" বলি কারণ কিছু ব্রাউজার ট্যাগগুলিতে asyncবাdefer বৈশিষ্ট্যগুলিকে সমর্থন করে script))

যদি আপনি উপাদানটির scriptশেষে আপনার ট্যাগটি অন্তর্ভুক্ত করেন তবে bodyআপনার পৃষ্ঠাটি ইতিমধ্যে ব্যবহারকারীকে প্রদর্শিত না হওয়া পর্যন্ত ব্রাউজার এগুলি সমস্ত কিছুই করে না। এটি আপনার পৃষ্ঠার জন্য অনুভূত লোড সময়কে উন্নত করে।

সুতরাং সেরা অনুভূত লোড সময় পেতে, আপনার স্ক্রিপ্টটি পৃষ্ঠার নীচে রাখুন। (এটি ইয়াহু লোকদের দিকনির্দেশও ।) এবং আপনি যদি এটি করতে চলেছেন readyতবে অবশ্যই ব্যবহারের দরকার নেই যদিও অবশ্যই আপনি পছন্দ করতে পারলে।

যদিও এর জন্য একটি দাম আছে: আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে ব্যবহারকারী যে জিনিসগুলি দেখতে পাবে সেগুলি ইন্টারঅ্যাক্ট করার জন্য প্রস্তুত। ডাউনলোডের সময়টি পৃষ্ঠাটি বড় আকারের প্রদর্শিত হওয়ার পরে সরিয়ে দিয়ে আপনি স্ক্রিপ্টটি লোড হওয়ার আগে ব্যবহারকারীর দ্বারা পৃষ্ঠাটির সাথে আলাপচারিতা শুরু করার সম্ভাবনা বাড়িয়ে তোলেন। scriptট্যাগটি শেষে রাখার জন্য এটি একটি পাল্টা যুক্তি । প্রায়শই এটি কোনও সমস্যা নয়, তবে আপনার পৃষ্ঠাটি এটি দেখতে হবে কিনা তা দেখতে হবে এবং যদি তা হয় তবে আপনি কীভাবে এটির মোকাবিলা করতে চান। (আপনি এটিতে সামান্য একটি ইনলাইনscript উপাদান রাখতে পারেন headযা এটি মোকাবেলায় একটি ডকুমেন্ট-ওয়াইড ইভেন্ট হ্যান্ডলার সেটআপ করে That এইভাবে, আপনি উন্নত লোড সময় পাবেন তবে যদি তারা খুব তাড়াতাড়ি কিছু করার চেষ্টা করে, আপনি হয় তাদের তা বলতে পারেন বা সর্বোপরি, আপনার সম্পূর্ণ স্ক্রিপ্ট প্রস্তুত হওয়ার পরে তারা যে জিনিসটি করতে চেয়েছিল তা সারি করুন এবং এটি করতে পারেন))


17
+1 জেএস লোড হওয়ার আগে ইন্টারঅ্যাকশনটি মোকাবেলার আরেকটি উপায় হ'ল জাভাস্ক্রিপ্ট ছাড়াই পৃষ্ঠাটির কাজ শুরু করা। নিশ্চিত করুন যে সমস্ত লিঙ্কগুলি কাজ করছে ইত্যাদি, যদিও তারা অবশ্যই কোনও পৃষ্ঠা পুনরায় লোড ট্রিগার করবে। তারপরে জেএসের সাথে লিঙ্কগুলি এবং অন্যান্য জিনিসগুলি হাইজ্যাক করুন এবং আপনার এজাক্স বা অন্যান্য ঘণ্টা এবং শিসগুলি যুক্ত করুন :)
অ্যাড্রিয়ান শ্মিড্ট

4
আপনি কীভাবে কোনও ক্রিয়াকলাপ পরিচালনা করবেন? আমি ডিজাইন প্যাটার্ন বা কিছু "সাধারণ সমাধান" আছে যা আমি এটি সম্পর্কে সন্ধান করতে পারি?
এইচসি_আগস্ট

@ এইচসি_: "কোন ক্রিয়াকলাপ বন্ধ করে" দিয়ে আপনার অর্থ কী?
টিজে ক্রাউডার

@ টিজে ক্রাউডার আপনার উত্তরের শেষ বাক্য থেকে: "বা সর্বোপরি, আপনার পূর্ণ স্ক্রিপ্ট প্রস্তুত হওয়ার পরে তারা যে জিনিসটি করতে চেয়েছিল তা সারি করুন এবং এটি করুন" " আমি কেবল ভাবছিলাম, যদি এটি করার "সর্বোত্তম" উপায় থাকে তবে যেহেতু আমি নিশ্চিত যে এটি করার "কিছু" উপায়টি আমি বুঝতে পারি তবে আমি নিশ্চিত যে এটি অন্য কারও যদি হয় তবে তা ভ্রান্ত হয়ে উঠবে! যা কিছু কোড জড়িত তা দেখেছি।
এইচসি_আগস্ট

4
@ এইচসি_: আমি এটি করার প্রয়োজন অনুভব করি নি এবং এর কোনও বিশেষ মান সম্পর্কে জানি না। এবং পাঁচ বছর পরে, আমার কাছে মনে হচ্ছে কেবল "দুঃখিত, লোডিং, এক সেকেন্ড .." দিয়ে যাওয়া ভাল। (যদিও বিষয়গুলি যদি তাই হয় লোড হতে অনেক সময়, আপনি একটি বড় সমস্যা আছে।) যদি আমি দেখতে কিছু আমি মনে করি যোগ্য, এবং এটা ক্লিক করুন, এবং কিছুই ঘটে, স্বর্গ কেবল আমি পরের ক্লিক করব জানেন। আপনি যদি তাদের সারি সারি রেখে তৈরি করেন এবং প্রস্তুত হওয়ার পরে তাদের আবার খেলেন, এটি আদর্শের চেয়ে কম হতে পারে।
টিজে ক্রোডার

3

আপনার পৃষ্ঠাটি $(document).ready()পুরো ডিওএম জুড়ে স্ক্রিপ্টগুলি ছড়িয়ে দিয়ে ধীরে ধীরে লোড হবে (শেষে সবার পরিবর্তে) কারণ এটির জন্য প্রথমে সিঙ্ক্রোনালি লোড করা jQuery প্রয়োজন ।

$ = jQuery। সুতরাং আপনি $প্রথম স্ক্রিপ্টগুলিতে jQuery লোড না করে ব্যবহার করতে পারবেন না । এই পদ্ধতির আপনাকে পৃষ্ঠার শুরুতে jQuery লোড করতে বাধ্য করে, যা jQuery সম্পূর্ণ ডাউনলোড না হওয়া পর্যন্ত আপনার পৃষ্ঠার লোডকে থামিয়ে দেবে

আপনি asyncjQuery লোড করতে পারবেন না কারণ অনেক ক্ষেত্রে, আপনার $(document).ready()স্ক্রিপ্ট (গুলি) jQuery সম্পূর্ণরূপে async লোড হওয়ার আগে এবং একটি ত্রুটির কারণ ঘটানোর চেষ্টা করবে, কারণ $এটি এখনও সংজ্ঞায়িত হয়নি।

বলা হচ্ছে, সিস্টেমকে বোকা বানানোর একটা উপায় আছে। মূলত $একটি ফাংশনের সমান সেটিং যা $(document).ready()ফাংশনগুলিকে একটি সারি / অ্যারেতে ঠেলে দেয় । তারপরে পৃষ্ঠার নীচে, jQuery লোড করুন তারপরে সারিবদ্ধভাবে পুনরাবৃত্তি করুন এবং প্রতিটি $(document).ready()সময়ে একবারে কার্যকর করুন । এটি আপনাকে পৃষ্ঠার নীচে jQuery স্থগিত করতে সহায়তা করে তবে $এটি ডিওএম-তে এর উপরে ব্যবহার করতে পারে। আমি ব্যক্তিগতভাবে এটি পরীক্ষা করে দেখিনি যে এটি কতটা ভাল কাজ করে, তবে তত্ত্বটি সঠিক। ধারণাটি কিছুক্ষণের জন্য হয়েছে তবে আমি এটি প্রয়োগ করে খুব কমই দেখেছি। তবে এটি দুর্দান্ত ধারণা বলে মনে হচ্ছে:

http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.