আপত্তিজনক জাভাস্ক্রিপ্ট: HTML কোডের নীচে বা নীচে <script>?


90

আমি সম্প্রতি আপনার ওয়েব সাইটের গতি বাড়ানোর জন্য ইয়াহু ইশতেহারের সেরা অভ্যাসগুলি পড়েছি । আমরা যখন পারি তখন তারা জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করার জন্য HTML কোডের নীচে রাখার পরামর্শ দেয়।

কিন্তু ঠিক কোথায় এবং কখন?

আমরা কি এটি বন্ধ করার আগে </html>বা পরে রাখা উচিত? এবং সর্বোপরি, আমাদের এখনও এটি <head>বিভাগে রাখা উচিত ?


উত্তর:


87

সত্যিকারের স্ববিরোধী স্ক্রিপ্টগুলির জন্য দুটি সম্ভাবনা রয়েছে:

  • প্রধান বিভাগে একটি স্ক্রিপ্ট ট্যাগের মাধ্যমে একটি বাহ্যিক স্ক্রিপ্ট ফাইল সহ
  • শরীরের নীচে স্ক্রিপ্ট ট্যাগের মাধ্যমে একটি বাহ্যিক স্ক্রিপ্ট ফাইল সহ (আগে </body></html>)

দ্বিতীয়টি তত দ্রুত হতে পারে কারণ মূল ইয়াহু গবেষণায় দেখা গেছে যে কিছু ব্রাউজার স্ক্রিপ্ট ট্যাগটিতে আঘাত করার সময় স্ক্রিপ্ট ফাইলগুলি লোড করার চেষ্টা করে এবং তাই শেষ না হওয়া পর্যন্ত বাকী পৃষ্ঠাটি লোড না করে। তবে, যদি আপনার স্ক্রিপ্টের একটি 'প্রস্তুত' অংশ থাকে যা DOM প্রস্তুত হওয়ার সাথে সাথেই কার্যকর করা উচিত আপনার এটির মাথায় থাকা দরকার। আরেকটি সমস্যা হ'ল লেআউট - যদি আপনার স্ক্রিপ্টটি পৃষ্ঠার বিন্যাসটি পরিবর্তন করতে চলেছে আপনি যত তাড়াতাড়ি তা লোড করতে চান যাতে আপনার পৃষ্ঠাটি আপনার ব্যবহারকারীর সামনে নিজেকে পুনরায় আঁকতে দীর্ঘ সময় ব্যয় না করে।

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

এবং যে কোনও পারফরম্যান্স ইস্যুগুলির জন্য আপনার নিজস্ব মানদণ্ডগুলি করুন - যখন অধ্যয়ন করা হয় তখন একসময় যা সত্য হতে পারে তা আপনার নিজস্ব স্থানীয় সেটআপ বা ব্রাউজারগুলির পরিবর্তনের সাথে পরিবর্তিত হতে পারে।


13
স্ক্রিপ্টটির 'প্রস্তুত' অংশ রয়েছে Regarding শরীরের নীচে সেই স্ক্রিপ্টটি রাখা গ্যারান্টি দেয় যে ডম হেরফের হতে প্রস্তুত, আপনি যদি এটি মাথায় রাখেন তবে আপনাকে এটি মুড়ে ফেলতে হবে যাতে এটি DOMReady (বা অনুরূপ) ইভেন্টের জন্য অপেক্ষা করে
জুয়ান মেন্ডিস

4
@ জুয়ান হ্যাঁ হ্যাঁ, তবে স্ক্রিপ্টটি নীচে রেখে, আপনি স্ক্রিপ্টটির অনুরোধ করার আগে, ব্রাউজারটির নথিকে বিশ্লেষণ করতে এবং মাথা উপাদানগুলিকে (200-500 মিমি) প্রসেস করার জন্য প্রয়োজনীয় পরিমাণ সময় দ্বারা DOMReady ইভেন্টটি বিলম্ব করছেন it । মূলত প্রথম পৃষ্ঠার লোডে (ধরে নিলে এটি সেখান থেকে ক্যাশে যায়)। তবে এটি মাথায় রাখলে। এটি সম্ভবত আরও দ্রুত প্রস্তুত হওয়ার সম্ভাবনা রয়েছে। এইচটিএমএল 5 টি মাথায় রেখে, স্ক্রিপ্টটি যদি ডিওএম প্রস্তুত হওয়ার সময় লেআউটটি সংশোধন করতে হয় তবে আপনি এখন "অ্যাসিঙ্ক" বা "ডিফার" স্ক্রিপ্ট মাথায় রেখে আরও ভাল better
হেক্সালিস

31

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

এছাড়াও, পৃষ্ঠার নীচে স্ক্রিপ্টগুলি রাখার সুযোগটি সর্বদা পাওয়া যায় না। আপনার যদি নিজের ভিউগুলিতে ইনলাইন স্ক্রিপ্টগুলি অন্তর্ভুক্ত করতে হয় যা কোনও লাইব্রেরি বা কিছু আগে জাভাস্ক্রিপ্ট কোডের উপর নির্ভর করে বোঝানো হচ্ছে, আপনাকে অবশ্যই সেই নির্ভরতাগুলি <head>ট্যাগের মধ্যে লোড করতে হবে ।

সমস্ত ইয়াহুর সুপারিশগুলিতে আকর্ষণীয় তবে সর্বদা প্রযোজ্য নয় এবং কেস-কেস-কেস ভিত্তিতে বিবেচনা করা উচিত।


4
আপনার যদি স্ববিরোধী জাভাস্ক্রিপ্ট থাকে, আপনার কাছে ইনলাইন স্নিপেট থাকবে না, প্রশ্নটিতে বিশেষভাবে আপত্তিজনকভাবে উল্লেখ করা হয়েছে।
হুয়ান মেন্ডিস

4
ইনলাইন <script>ট্যাগগুলি বাধা জাভাস্ক্রিপ্ট বোঝায় না।
ইরান গাল্পেরিন

@ এরিক গাল্পেরিন: অন্তর্নিহিত নয় এমন ইনলাইন স্ক্রিপ্ট ট্যাগগুলির ভাল ব্যবহার কী?
জুয়ান মেন্ডেস

4
@ জুয়ান অবস্ট্রোসিভ জাভাস্ক্রিপ্ট মানে ইউআই তা ছাড়াই নষ্ট হয়ে গেছে, বা এটি মার্কআপে এম্বেড হয়েছে। <script>ট্যাগগুলি মার্কআপ থেকে পৃথক এবং কোডের সাহায্যে ইন্টারফেস বাড়ায় তবে প্রয়োজন হয় না। সুতরাং ইনলাইন <script>ট্যাগগুলি সম্পর্কে অন্তর্নিহিত বাধাদানকারী কিছুই নেই ।
ইরান গাল্পেরিন

4
১. আমার নাম ইরান নয়, এরিক, ২. আপনি যখন সার্ভার-সাইডের ভাষা থেকে জাভাস্ক্রিপ্টে ডেটা পাস করতে চান, কোনও লুপে উদাহরণস্বরূপ, আপনি <script>সেই মানগুলিকে জাভাস্ক্রিপ্ট ভেরিয়েবলগুলিতে এনকোড করতে ট্যাগ ব্যবহার করতে পারেন , সম্ভবত ব্যবহারের জন্য ইনলাইন সম্পাদনা বা অন্যান্য অনুরূপ আচরণ।
ইরান গাল্পেরিন

22

অন্যরা যেমন বলেছে, এটি ক্লোজিং বডি এইচটিএমএল ট্যাগের আগে রাখুন।

অন্য দিন আমাদের ক্লায়েন্টদের বিভিন্ন সাইটগুলির অভিযোগ ছিল যে তাদের সাইটগুলি অত্যন্ত ধীর ছিল compla আমরা তাদের স্থানীয়ভাবে দেখেছি এবং দেখেছি যে একটি পৃষ্ঠাতে লোড করতে তারা 20-30 সেকেন্ড সময় নিয়েছে। এটি ভেবে ভেবেছিল যে এটি সার্ভারগুলি খারাপ আচরণ করছে, আমরা লগইন করেছি - তবে ওয়েব এবং এসকিএল সার্ভার উভয়ই ~ 0% ক্রিয়াকলাপ ছিল।

কয়েক মিনিটের পরে, আমরা বুঝতে পারি যে একটি বাহ্যিক সাইট ডাউন ছিল, যা আমরা জাভাস্ক্রিপ্ট ট্র্যাকিং ট্যাগগুলির সাথে সংযুক্ত করছি। এর অর্থ ব্রাউজারগুলি স্ক্রিপ্ট ট্যাগটি মাথায় রেখেছিল সাইটের অংশে করছে এবং স্ক্রিপ্ট ফাইলটি ডাউনলোড করার অপেক্ষায় ছিল।

সুতরাং, তৃতীয় পক্ষের / বাহ্যিক স্ক্রিপ্টগুলির জন্য কমপক্ষে, আমি তাদের পৃষ্ঠায় শেষ জিনিস হিসাবে রাখার পরামর্শ দেব। তারপরে যদি সেগুলি অনুপলভ্য থাকে তবে ব্রাউজারটি কমপক্ষে until পয়েন্ট পর্যন্ত পৃষ্ঠাটি লোড করে দেয় - এবং ব্যবহারকারী এটি সম্পর্কে অবহেলিত থাকবে।


10
দুর্দান্ত গল্পের ভাই :) তবে গুরুত্বের সাথে, পৃষ্ঠার নীচে স্ক্রিপ্ট ট্যাগগুলি রাখার জন্য আমি এটি দেখেছি সবচেয়ে আকর্ষণীয় যুক্তি।
user271608

16

সংক্ষিপ্ত বিবরণ, উপরোক্ত পরামর্শের উপর ভিত্তি করে:

  1. বাহ্যিক স্ক্রিপ্টগুলির জন্য (গুগল বিশ্লেষণ, তৃতীয় পক্ষ বিপণন ট্র্যাকার ইত্যাদি) এগুলি </body>ট্যাগের আগে রাখুন ।
  2. পৃষ্ঠার বিন্যাসকে প্রভাবিত করে এমন স্ক্রিপ্টগুলির জন্য, মাথায় রাখুন।
  3. যে স্ক্রিপ্টগুলি 'ডোম রেডি' (জ্যাকুইয়ের মতো) উপর নির্ভর করে তাদের জন্য স্ক্রিপ্টগুলি মাথায় রাখার </body>প্রান্ত-কেস কারণ না থাকলে আগে রাখার বিষয়টি বিবেচনা করুন ।
  4. যদি নির্ভরতার সাথে ইনলাইন স্ক্রিপ্ট থাকে তবে প্রয়োজনীয় স্ক্রিপ্টগুলি মাথায় রাখুন।

6

আপনি যদি আপনার স্ক্রিপ্টগুলির অবস্থানের সাথে ঝাঁকুনি দিতে চান তবে ওয়াইস্লো আপনাকে পারফরম্যান্সের উন্নতি করতে বা ক্ষতিগ্রস্থ করতে চাইলে আপনাকে একটি গন্ধ দেবার জন্য দুর্দান্ত সরঞ্জাম। নির্দিষ্ট নথির অবস্থানগুলিতে জাভাস্ক্রিপ্ট স্থাপন করা পৃষ্ঠা লোডের সময়কে সত্যিই হত্যা করতে পারে।

http://developer.yahoo.com/yslow/


5

না এটির পরে </html>এমনটি হওয়া উচিত নয় যা অবৈধ হবে। স্ক্রিপ্টগুলি রাখার সেরা জায়গাটি ঠিক আগে is</body>

এটি মূলত কারণ বেশিরভাগ ব্রাউজারগুলি আপনার সরবরাহ করা স্ক্রিপ্টটি প্রকাশ করার সময় পৃষ্ঠাটি রেন্ডারিং বন্ধ করে দেয়। সুতরাং পৃষ্ঠাতে কোথাও নন-ব্লকিং কোড স্থাপন করা ঠিক আছে (আমি মূলত onLoadইভেন্টের সাথে ফাংশনগুলিকে সংযুক্ত করে এমন জিনিসগুলির কথা ভাবছি , যেহেতু ইভেন্টের বাইন্ডিং কার্যকরভাবে মুক্ত হওয়ার জন্য এত দ্রুত)। এখানে একটি বড় ঘাতক পৃষ্ঠার শুরুতে কিছু বিজ্ঞাপন সার্ভার স্ক্রিপ্ট রেখে যা বিজ্ঞাপনগুলি পুরোপুরি ডাউনলোড হওয়ার আগে কোনও পৃষ্ঠা লোড হওয়া রোধ করতে পারে, আপনার পৃষ্ঠা লোডের বারটিকে বেলুন তৈরি করে


আপনি জানেন, আপনি যদি গতির সাথে সত্যিই উদ্বিগ্ন হন তবে কোনও </ em> বা </ html> থাকবে না - এই উপাদানগুলির ধরণের ক্লোজিং ট্যাগগুলি areচ্ছিক। <script> একেবারে শেষে রাখুন এবং সম্পূর্ণরূপে </body> এবং </html> ব্যবহার করতে ভুলে যান।
জিম

9
আশা করি জিম ব্যঙ্গাত্মক হচ্ছে - যে কোনও হারে, তাঁর পরামর্শ নেবেন না। সুগঠিত এক্সএইচটিএমএলকে বডি এবং এইচটিএমএল ট্যাগ সহ প্রতিটি উপাদানগুলির জন্য ক্লোজিং ট্যাগগুলির প্রয়োজন। যদি আপনার কোডটি বৈধ এক্সএমএল না হয় তবে আপনি এটি ভুল করছেন।
ম্যাট লাহক্যাম্প

6
না, আমি বিদ্রূপ করছি না। প্রশ্নটি একবার দেখুন। এটি এক্সএইচটিএমএল নয়, এইচটিএমএল নির্দিষ্ট করে। এটি সত্য যে বৈধ এক্সএইচটিএমএলের জন্য এই জিনিসগুলির প্রয়োজন হয়, তবে বৈধ এইচটিএমএল এর প্রয়োজন নেই। এইচটিএমএল চয়ন করা এবং এই উপাদানগুলির ধরণের জন্য ক্লোজিং ট্যাগগুলি বাদ দেওয়াতে কোনও ভুল নেই।
জিম

2

আপনি যদি এটি নীচে রাখেন তবে এটি শেষ হয়ে যায়, অতএব ব্যবহারকারী যে পৃষ্ঠাটি দেখতে পারে তার গতি বাড়িয়ে তোলে। এটি ফাইনালের আগে হওয়া দরকার </html>যদিও অন্যথায় এটি ডিওমের অংশ হবে না।

কোডটি যদি তাত্ক্ষণিকভাবে প্রয়োজন হয় তবে এটি প্রথমে মাথায় রাখুন।

ব্লগ উইজেটের মতো জিনিসগুলি নীচে রেখে দেওয়া ভাল যাতে সেগুলি লোড না করে, এটি পৃষ্ঠার ব্যবহারকে প্রভাবিত করে না।

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