সিএসএস কি সবসময় জাভাস্ক্রিপ্টে এগিয়ে যেতে হবে?


897

অনলাইনে অসংখ্য জায়গায় আমি জাভাস্ক্রিপ্টের আগে সিএসএস অন্তর্ভুক্ত করার জন্য সুপারিশটি দেখেছি। যুক্তি সাধারণত এই ফর্মের :

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

আমার আসল পরীক্ষাটি বেশ আলাদা কিছু প্রকাশ করে:

আমার পরীক্ষার জোতা

আমি বিভিন্ন সংস্থার জন্য নির্দিষ্ট বিলম্ব তৈরি করতে নিম্নলিখিত রুবি স্ক্রিপ্টটি ব্যবহার করি:

require 'rubygems'
require 'eventmachine'
require 'evma_httpserver'
require 'date'

class Handler  < EventMachine::Connection
  include EventMachine::HttpServer

  def process_http_request
    resp = EventMachine::DelegatedHttpResponse.new( self )

    return unless @http_query_string

    path = @http_path_info
    array = @http_query_string.split("&").map{|s| s.split("=")}.flatten
    parsed = Hash[*array]

    delay = parsed["delay"].to_i / 1000.0
    jsdelay = parsed["jsdelay"].to_i

    delay = 5 if (delay > 5)
    jsdelay = 5000 if (jsdelay > 5000)

    delay = 0 if (delay < 0) 
    jsdelay = 0 if (jsdelay < 0)

    # Block which fulfills the request
    operation = proc do
      sleep delay 

      if path.match(/.js$/)
        resp.status = 200
        resp.headers["Content-Type"] = "text/javascript"
        resp.content = "(function(){
            var start = new Date();
            while(new Date() - start < #{jsdelay}){}
          })();"
      end
      if path.match(/.css$/)
        resp.status = 200
        resp.headers["Content-Type"] = "text/css"
        resp.content = "body {font-size: 50px;}"
      end
    end

    # Callback block to execute once the request is fulfilled
    callback = proc do |res|
        resp.send_response
    end

    # Let the thread pool (20 Ruby threads) handle request
    EM.defer(operation, callback)
  end
end

EventMachine::run {
  EventMachine::start_server("0.0.0.0", 8081, Handler)
  puts "Listening..."
}

উপরের মিনি সার্ভারটি আমাকে জাভাস্ক্রিপ্ট ফাইল (সার্ভার এবং ক্লায়েন্ট উভয়) এবং স্বেচ্ছাসেবী সিএসএস বিলম্বের জন্য নির্বিচারে বিলম্বগুলি সেট করার অনুমতি দেয়। উদাহরণস্বরূপ, http://10.0.0.50:8081/test.css?delay=500সিএসএস স্থানান্তর করতে আমাকে 500 এমএস বিলম্ব দেয়।

আমি পরীক্ষার জন্য নীচের পৃষ্ঠাটি ব্যবহার করি।

<!DOCTYPE html>
<html>
  <head>
      <title>test</title>
      <script type='text/javascript'>
          var startTime = new Date();
      </script>
      <link href="http://10.0.0.50:8081/test.css?delay=500" type="text/css" rel="stylesheet">
      <script type="text/javascript" src="http://10.0.0.50:8081/test2.js?delay=400&amp;jsdelay=1000"></script> 
  </head>
  <body>
    <p>
      Elapsed time is: 
      <script type='text/javascript'>
        document.write(new Date() - startTime);
      </script>
    </p>    
  </body>
</html>

আমি যখন প্রথম সিএসএস অন্তর্ভুক্ত করি তখন পৃষ্ঠাটি রেন্ডার করতে 1.5 সেকেন্ড সময় নেয়:

সিএসএস প্রথম

আমি যখন প্রথমে জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করব তখন পৃষ্ঠাটি রেন্ডার করতে 1.4 সেকেন্ড সময় নেয়:

প্রথমে জাভাস্ক্রিপ্ট

আমি ক্রোম, ফায়ারফক্স এবং ইন্টারনেট এক্সপ্লোরারে একই ফলাফল পেয়েছি। অপেরাতে তবে ক্রমটি অর্ডার করা কোনও বিষয় নয়।

যা ঘটছে বলে মনে হচ্ছে তা হল জাভাস্ক্রিপ্ট ইন্টারপ্রেটার সমস্ত সিএসএস ডাউনলোড না হওয়া পর্যন্ত শুরু করতে অস্বীকার করে। সুতরাং, মনে হচ্ছে জাভাস্ক্রিপ্টের প্রথমটি অন্তর্ভুক্ত করা আরও কার্যকর কারণ জাভাস্ক্রিপ্ট থ্রেডটি বেশি সময় চালায়।

আমি কি কিছু মিস করছি, জাভাস্ক্রিপ্টের আগে সিএসএস অন্তর্ভুক্ত করার প্রস্তাবটি কি সঠিক নয়?

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


120
1511 বনাম 1422 একটি পরিসংখ্যানগতভাবে গুরুত্বপূর্ণ পার্থক্য? তা percent শতাংশ। উল্লেখযোগ্য-গড়-গড় মানুষের পারফরম্যান্স পার্থক্যের জন্য সাধারণ প্রান্তিকতা প্রায় 20 শতাংশ।
জেফ আতউড

15
মুল বক্তব্যটি হ'ল পুনর্নির্মাণ এই স্বেচ্ছাসেবী বিলম্বকে সরিয়ে দেয়, আপনি যে কোনও কিছুতে বিলম্ব সেট করতে পারেন, এটি ইস্যুটির একটি ডেমো।
স্যাম জাফরন

3
আপনার বিলম্ব 100 মি? আপনার স্ক্রিনশট মধ্যে পার্থক্য 89ms। আপনার ইউআরএল এ এটি delay=400&amp;jsdelay=1000এবং delay=500যা 100 মিমি বা 89 মাইলের কাছাকাছি কোথাও নেই। আমি অনুমান করি যে আপনি কোন সংখ্যার উল্লেখ করছেন আমি অস্পষ্ট।
জেফ আতউড

4
"যদি জাভাস্ক্রিপ্ট অন্তর্ভুক্ত থাকে তবে প্রথমে জাভাস্ক্রিপ্ট ইঞ্জিনটি পরবর্তী সংস্থানগুলিতে চালিয়ে যাওয়ার আগে সেগুলি পুরো বিশদ করে ফেলতে হবে This এর অর্থ রেন্ডারিং থ্রেডটি পৃষ্ঠাটি সম্পূর্ণরূপে প্রদর্শন করতে পারে না, কারণ এতে প্রয়োজনীয় স্টাইলগুলি নেই । " - যদি জেএস অন্তর্ভুক্ত থাকে তবে পৃষ্ঠাটি রেন্ডার করার আগে জেএস কার্যকর করা হবে সিএসএস অন্তর্ভুক্ত আগে বা পরে ছিল তা নির্বিশেষে।
nnnnnn

162
আপনি এটি বিবেচনা করেছেন কিনা তা নিশ্চিত নন তবে লোড টাইমের উপলব্ধিটিও গুরুত্বপূর্ণ। সুতরাং, উদাহরণস্বরূপ, সিএসএস প্রথমে লোড করা যদি আপনাকে কেবল পৃষ্ঠার পটভূমির রঙ / টেক্সচার দেয় তবে তা আরও দ্রুত বলে মনে হবে। নিখুঁত লোড সময়গুলি এটির ইঙ্গিত দেয় না।
রাকেশ পাই

উত্তর:


712

এটি একটি খুব আকর্ষণীয় প্রশ্ন। আমি সবসময় আমার সিএসএসকে <link href="...">আমার জেএস এর আগে রেখেছি <script src="...">কারণ "আমি একসময় পড়ি যে এটি ভাল better" সুতরাং, আপনি ঠিক বলেছেন; এটি সময় এসেছে আমরা কিছু প্রকৃত গবেষণা!

আমি নোডে নিজের পরীক্ষার জোতা সেট করেছি (নীচের কোড) মূলত, আমি:

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

ফলাফল

প্রথমত, সিএসএস ফাইলটি 500 মিমি দ্বারা দেরিতে:

     Browser: Chrome 18    | IE 9         | Firefox 9
         CSS: first  last  | first  last  | first last
=======================================================
Header Exec |              |              |
Average     | 583ms  36ms  | 559ms  42ms  | 565ms 49ms
St Dev      | 15ms   12ms  | 9ms    7ms   | 13ms  6ms
------------|--------------|--------------|------------
Body Exec   |              |              |
Average     | 584ms  521ms | 559ms  513ms | 565ms 519ms
St Dev      | 15ms   9ms   | 9ms    5ms   | 13ms  7ms

এর পরে, আমি সিএসএসের পরিবর্তে 500 মিমি দেরিতে jQuery সেট করেছি:

     Browser: Chrome 18    | IE 9         | Firefox 9
         CSS: first  last  | first  last  | first last
=======================================================
Header Exec |              |              |
Average     | 597ms  556ms | 562ms  559ms | 564ms 564ms
St Dev      | 14ms   12ms  | 11ms   7ms   | 8ms   8ms
------------|--------------|--------------|------------
Body Exec   |              |              |
Average     | 598ms  557ms | 563ms  560ms | 564ms 565ms
St Dev      | 14ms   12ms  | 10ms   7ms   | 8ms   8ms

অবশেষে, আমি 500 মিমি দেরিতে jQuery এবং CSS উভয়ই সেট করেছি :

     Browser: Chrome 18    | IE 9         | Firefox 9
         CSS: first  last  | first  last  | first last
=======================================================
Header Exec |              |              |
Average     | 620ms  560ms | 577ms  577ms | 571ms 567ms
St Dev      | 16ms   11ms  | 19ms   9ms   | 9ms   10ms
------------|--------------|--------------|------------
Body Exec   |              |              |
Average     | 623ms  561ms | 578ms  580ms | 571ms 568ms
St Dev      | 18ms   11ms  | 19ms   9ms   | 9ms   10ms

উপসংহার

প্রথমত, এটি লক্ষ করা জরুরী যে আমি এই অনুমানের অধীনে কাজ করছি যে <head>আপনার ডকুমেন্টের স্ক্রিপ্ট রয়েছে (শেষের বিপরীতে <body>)। <head>নথির শেষের বিপরীতে আপনি কেন আপনার স্ক্রিপ্টগুলিতে লিঙ্ক করতে পারেন সে সম্পর্কিত বিভিন্ন যুক্তি রয়েছে তবে এটি এই উত্তরের বাইরে নয়। এই সম্পর্কে কিনা কঠোরভাবে হয় <script>গুলি করার আগে যেতে হবে <link>মধ্যে গুলি <head>

আধুনিক ডেস্কটপ ব্রাউজারগুলিতে, দেখে মনে হয় সিএসএসের সাথে লিঙ্ক করা কখনই কোনও কার্যকারিতা লাভ দেয় না। সিএসএস এবং স্ক্রিপ্ট উভয়ই বিলম্বিত হওয়ার পরে স্ক্রিপ্টের পরে সিএসএস স্থাপন আপনাকে একটি তুচ্ছ পরিমাণে লাভ দেয় তবে সিএসএস বিলম্বিত হলে আপনাকে বড় লাভ দেয়। ( lastফলাফলের প্রথম সেটটিতে কলামগুলি দেখিয়েছে ))

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

কেন?

Orতিহাসিকভাবে, যখন কোনও ব্রাউজার <script>কোনও বাইরের সংস্থানকে নির্দেশ করে একটি ট্যাগের মুখোমুখি হয় , ব্রাউজারটি এইচটিএমএলকে পার্স করা বন্ধ করে দেয়, স্ক্রিপ্টটি পুনরুদ্ধার করে, এটি কার্যকর করে, এবং তারপরে এইচটিএমএল বিশ্লেষণ চালিয়ে যেতে থাকবে। বিপরীতে, যদি ব্রাউজারটি <link>একটি বাহ্যিক স্টাইলশিটের জন্য মুখোমুখি হয় , তবে এটি CSS ফাইল আনতে গিয়ে এটি সমান্তরালভাবে (সমান্তরালে) পার্স করা চালিয়ে যেতে পারে।

অতএব, স্টাইলশিটগুলি প্রথমে রাখার জন্য বহুল-পুনরাবৃত্ত পরামর্শ - তারা প্রথমে ডাউনলোড করবে এবং ডাউনলোড করার জন্য প্রথম স্ক্রিপ্টটি সমান্তরালে লোড হতে পারে।

তবে, আধুনিক ব্রাউজারগুলি (উপরে বর্ণিত সমস্ত ব্রাউজারগুলি সহ) অনুমানমূলক পার্সিং বাস্তবায়িত করেছে , যেখানে ব্রাউজারটি এইচটিএমএলে "এগিয়ে দেখায়" এবং স্ক্রিপ্টগুলি ডাউনলোড এবং সম্পাদন করার আগে সংস্থান ডাউনলোড করতে শুরু করে ।

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

ব্রাউজার সমর্থন

অনুমানমূলক পার্সিং প্রথমে প্রয়োগ করা হয়েছিল: (বিশ্বব্যাপী ডেস্কটপ ব্রাউজার ব্যবহারকারীদের এই সংস্করণটি ব্যবহার করে বা জানুয়ারী ২০১২-র তুলনায় আরও বেশি)

  • ক্রোম 1 (ওয়েবকিট 525) (100%)
  • IE 8 (75%)
  • ফায়ারফক্স 3.5 (96%)
  • সাফারি 4 (99%)
  • অপেরা 11.60 (85%)

মোট হিসাবে, বর্তমানে ব্যবহৃত প্রায় 85% ডেস্কটপ ব্রাউজারগুলি অনুমানমূলক লোডিং সমর্থন করে। সিএসএসের আগে স্ক্রিপ্টগুলি রাখলে বিশ্বব্যাপী 15% ব্যবহারকারীর উপর পারফরম্যান্স পেনাল্টি থাকবে ; আপনার সাইটের নির্দিষ্ট শ্রোতার উপর ভিত্তি করে ওয়াইএমএমভি। (এবং মনে রাখবেন যে সংখ্যাটি সঙ্কুচিত হচ্ছে))

মোবাইল ব্রাউজারগুলিতে, মোবাইল ব্রাউজার এবং ওএস ল্যান্ডস্কেপটি কীভাবে ভিন্নজাতীয় কারণে সুনির্দিষ্ট সংখ্যাগুলি পাওয়া সামান্য কঠিন। যেহেতু অনুমানমূলক রেন্ডারিং ওয়েবকিট ৫২৫ সালে প্রকাশিত হয়েছিল (মার্চ ২০০৮ প্রকাশিত) এবং প্রায় প্রতিটি সার্থক মোবাইল ব্রাউজার ওয়েবকিটের উপর নির্ভরশীল, তাই আমরা সিদ্ধান্ত নিতে পারি যে "বেশিরভাগ" মোবাইল ব্রাউজারকে এটি সমর্থন করা উচিতকুইরকসমোড অনুসারে , আইওএস ২.২ / অ্যান্ড্রয়েড 1.0 ওয়েবকিট 525 ব্যবহার করে। উইন্ডোজ ফোনটি কেমন দেখাচ্ছে তা আমার কোনও ধারণা নেই।

যাইহোক, আমি আমার অ্যান্ড্রয়েড 4 ডিভাইসে পরীক্ষাটি চালিয়েছি, এবং আমি ডেস্কটপের ফলাফলের মতো সংখ্যক দেখতে পেয়েছি, এটিকে অ্যান্ড্রয়েডের জন্য ক্রোমে চমত্কার নতুন রিমোট ডিবাগারের দিকে ঝুঁকিয়েছি , এবং নেটওয়ার্ক ট্যাব দেখিয়েছে যে ব্রাউজারটি আসলে ডাউনলোডের জন্য অপেক্ষা করছিল জাভাস্ক্রিপ্টগুলি পুরোপুরি লোড না হওয়া পর্যন্ত সিএসএস - অন্য কথায়, এমনকি অ্যান্ড্রয়েডের জন্য ওয়েবকিটের নতুনতম সংস্করণটিও অনুমানমূলক পার্সিং সমর্থন করে না। আমার সন্দেহ হয় এটি মোবাইল ডিভাইসের অন্তর্নিহিত সিপিইউ, মেমরি এবং / অথবা নেটওয়ার্কের সীমাবদ্ধতার কারণে এটি বন্ধ হয়ে যেতে পারে।

কোড

Opালু ক্ষমা করুন - এটি ছিল প্রশ্নোত্তর।

app.js

var express = require('express')
, app = express.createServer()
, fs = require('fs');

app.listen(90);

var file={};
fs.readdirSync('.').forEach(function(f) {
    console.log(f)
    file[f] = fs.readFileSync(f);
    if (f != 'jquery.js' && f != 'style.css') app.get('/' + f, function(req,res) {
        res.contentType(f);
        res.send(file[f]);
    });
});


app.get('/jquery.js', function(req,res) {
    setTimeout(function() {
        res.contentType('text/javascript');
        res.send(file['jquery.js']);
    }, 500);
});

app.get('/style.css', function(req,res) {
    setTimeout(function() {
        res.contentType('text/css');
        res.send(file['style.css']);
    }, 500);
});


var headresults={
    css: [],
    js: []
}, bodyresults={
    css: [],
    js: []
}
app.post('/result/:type/:time/:exec', function(req,res) {
    headresults[req.params.type].push(parseInt(req.params.time, 10));
    bodyresults[req.params.type].push(parseInt(req.params.exec, 10));
    res.end();
});

app.get('/result/:type', function(req,res) {
    var o = '';
    headresults[req.params.type].forEach(function(i) {
        o+='\n' + i;
    });
    o+='\n';
    bodyresults[req.params.type].forEach(function(i) {
        o+='\n' + i;
    });
    res.send(o);
});

css.html

<!DOCTYPE html>
<html>
    <head>
        <title>CSS first</title>
        <script>var start = Date.now();</script>
        <link rel="stylesheet" href="style.css">
        <script src="jquery.js"></script>
        <script src="test.js"></script>
    </head>
    <body>
        <script>document.write(jsload - start);bodyexec=Date.now()</script>
    </body>
</html>

js.html

<!DOCTYPE html>
<html>
    <head>
        <title>CSS first</title>
        <script>var start = Date.now();</script>
        <script src="jquery.js"></script>
        <script src="test.js"></script>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <script>document.write(jsload - start);bodyexec=Date.now()</script>
    </body>
</html>

test.js

var jsload = Date.now();


$(function() {
    $.post('/result' + location.pathname.replace('.html','') + '/' + (jsload - start) + '/' + (bodyexec - start));
});

jquery.js ছিল jquery-1.7.1.min.js


137
এটি একটি দুর্দান্ত উত্তর, বিজ্ঞান ব্যবহারের জন্য ধন্যবাদ ! আপনার ফলাফল অনুসারে "আধুনিক ব্রাউজারগুলিতে, দেখে মনে হয় সিএসএসের সাথে লিঙ্ক করা আগে কোনও কার্যকারিতা লাভ দেয় না" , আমি মনে করি প্রশ্নের শিরোনামের উত্তর হ্যাঁ , প্রথমে সিএসএসের পুরানো পরামর্শটি স্পষ্টভাবে অবৈধ।
জেফ আতউড

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

1
ধীরে ধীরে সার্ভারের গতি অনুকরণ করতে, CSS / js ছাপানোর ক্ষেত্রে আপনার কিছুটা আলগা যোগ করার চেষ্টা করা উচিত।
কিরব

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

1
নিচে ভোট হয়েছে, jQuery জাভাস্ক্রিপ্ট নয় এবং এটি কেবল পৃষ্ঠাটি ব্লাস্ট করে তাই এটি ব্যবহার করে ফলাফলগুলি উদ্দেশ্যমূলক নয়।
জন

303

জাভাস্ক্রিপ্টের আগে সিএসএস স্থাপনের দুটি প্রধান কারণ রয়েছে।

  1. পুরানো ব্রাউজারগুলি (ইন্টারনেট এক্সপ্লোরার 6-7, ফায়ারফক্স 2 ইত্যাদি) যখন তারা কোনও স্ক্রিপ্ট ডাউনলোড শুরু করে তখন পরবর্তী সমস্ত ডাউনলোডগুলি ব্লক করে দেয়। সুতরাং আপনি যদি তাদের a.jsঅনুসরণ করে থাকেন তবে b.cssতারা ধারাবাহিকভাবে ডাউনলোড করুন: প্রথমে তারপরে খ। আপনি যদি তাদের b.cssঅনুসরণ করেন তবে a.jsসেগুলি সমান্তরালে ডাউনলোড হয় যাতে পৃষ্ঠাটি আরও দ্রুত লোড হয়।

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

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


10
সম্মানিত স্টিভ উত্তরে আমাকে প্রহার করলেন, তবে আমি তাঁর উল্লেখের সাথে
জুয়ান পাবলো বুরিটিকা

4
কোন ব্রাউজারগুলি asyncগুণাবলীর সমর্থন করে তা দেখুন , স্টিভ এখানে সুপারিশ করছেন যখন তিনি বলেন "আরও ভাল ততক্ষণ
জেফ আতউড

আরে আপনি কি আমাকে বলতে পারেন যে কেন কেউ সিএসএস ফাইলকে @importনির্দেশের সাথে সংযুক্ত করবেন ?
জোশ স্টোডোলা

6
২) এর উত্স কী), এবং যদি এটি সত্য হয় তবে আপনি কি ব্যাখ্যা করতে পারবেন যে উপলক্ষে কোনও পৃষ্ঠা কেন সামগ্রী লোড করা শেষ করবে, তারপরে সিএসএস একটি বা দ্বিতীয় পরে প্রয়োগ করা হবে? (এটি হ'ল খুব কমই আমার নিজের পৃষ্ঠাগুলিতে যেখানে সিএসএস <হেড> ট্যাগগুলিতে ছিল)
ইজকাটা

2
সুতরাং আমাদের পৃষ্ঠার শেষে jQuery+ jQuery UI+ করা উচিত $(document).ready(function () { });? এটি কি সর্বদা প্রত্যাশা মতো কাজ করবে?
অলিভিয়ার পন্স

42

আপনি যে ফলাফল পেয়েছেন সে সম্পর্কে আমি খুব বেশি জোর দেব না, আমি বিশ্বাস করি যে এটি সাবজেক্টিভ, তবে আমার কাছে আপনাকে ব্যাখ্যা করার একটি কারণ আছে যে জেএসএসের আগে সিএসএসে রাখাই ভাল।

আপনার ওয়েবসাইটটি লোড করার সময়, এখানে দুটি দৃশ্য রয়েছে যা আপনি দেখতে পাবেন:

CASE 1: সাদা স্ক্রিন> আনস্টাইল ওয়েবসাইট> স্টাইলড ওয়েবসাইট> মিথস্ক্রিয়া> স্টাইলড এবং ইন্টারেক্টিভ ওয়েবসাইট

CASE 2: সাদা স্ক্রিন> আনস্টাইল ওয়েবসাইট> মিথস্ক্রিয়া> স্টাইল্ড ওয়েবসাইট> স্টাইলড এবং ইন্টারেক্টিভ ওয়েবসাইট


আমি সত্যই যে কেস 2 বেছে নিতে কল্পনা করতে পারি না তার মানে এই হবে ধীরে ধীরে ইন্টারনেট সংযোগ ব্যবহার করা দর্শনার্থীদের একটি আনস্টাইলযুক্ত ওয়েবসাইটের মুখোমুখি হতে হবে, যা জাভাস্ক্রিপ্ট ব্যবহার করে এটির সাথে ইন্টারঅ্যাক্ট করতে দেয় (যেটি ইতিমধ্যে লোড হয়েছে)। তদ্ব্যতীত, একটি স্টাইলহীন ওয়েবসাইট দেখার সময় ব্যয় করার পরিমাণটি এভাবেই বাড়ানো হবে। কেন কেউ তা চাইবে?

এটি jQuery রাজ্যের হিসাবে আরও ভাল কাজ করে

"সিএসএস শৈলীর বৈশিষ্ট্যের মানের উপর নির্ভরশীল এমন স্ক্রিপ্টগুলি ব্যবহার করার সময়, স্ক্রিপ্টগুলি উল্লেখ করার আগে বাহ্যিক স্টাইলশিট বা এম্বেড শৈলীর উপাদানগুলি উল্লেখ করা গুরুত্বপূর্ণ"।

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


2
জাভাস্ক্রিপ্ট কার্যকর হওয়ার আগে সমস্ত সিএসএস লোড হওয়ার গ্যারান্টি দিয়ে আপনি কীভাবে যাবেন? পারবে তুমি? অথবা আপনার জাভাস্ক্রিপ্টটি এমন পরিস্থিতি মোকাবেলার জন্য যথেষ্ট শক্তিশালী হওয়া উচিত যেখানে স্টাইলগুলি অগত্যা বোঝা যায় না।
জনিও

@ জনিওও যদি আপনার জেএসের নির্ভরতা থাকে তবে আপনার সেই নির্ভরতা সুস্পষ্ট করা উচিত। অন্যথায়, আপনার কাছে সর্বদা বিরল সময় সংক্রান্ত সমস্যা থাকবে। ES6 মডিউলগুলি এটি হওয়ার একটি ভাল উপায়, তবে অনেকগুলি লাইব্রেরি রয়েছে যা ব্যবহার করা যেতে পারে used
কিমকিম্প

26

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

রুল "নীচে উপরে এবং স্ক্রিপ্ট এ করা স্টাইলশীট" এর উদ্দেশ্য যে, সাধারণ, এটা সবচেয়ে ভালো উপায় অনুকূল অর্জন করা হয় প্রগতিশীল রেন্ডারিং , যা ব্যবহারকারীর অভিজ্ঞতা গুরুত্বপূর্ণ।

অন্য সবদিকে: আপনার পরীক্ষাটি বৈধ বলে ধরে নিচ্ছেন এবং আপনি সত্যই জনপ্রিয় নিয়মের বিপরীতে ফলাফল প্রকাশ করছেন, এটি আসলেই অবাক হওয়ার মতো কিছু নয়। প্রতিটি ওয়েবসাইট (এবং পুরো জিনিসটি ব্যবহারকারীর স্ক্রিনে প্রদর্শিত করতে যা লাগে তার সবই আলাদা) এবং ইন্টারনেট ক্রমাগত বিকশিত হয়।


1
আপনি সাহসের সাথে যে পয়েন্টটি তৈরি করছেন আমি তার প্রশংসা করি, তবে ওপি আপনি শীর্ষে বা তলদেশে উভয়কেই ক্রমটি পরিবর্তিত করলে কী হবে তা নিয়ে কথা বলছে ।
nnnnnn

1
সুতরাং, "[তার] পরীক্ষাটি বৈধ বলে ধরে নেওয়া"।
স্কিপার

21

আমি জাভাস্ক্রিপ্টের আগে আলাদা কারণে সিএসএস ফাইল অন্তর্ভুক্ত করেছি।

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


2
এটি কিছু ব্রাউজারে একদিন ভেঙে যাবে। আমি অনুমান করছি না।
jcolebrand

1
jcolebrand: হ্যাঁ, আমি মনে করি আমি এটি লেখার সময় যথেষ্ট কফি পান করিনি। (বিপরীতে, আমি অনুমান করি যে গুরুত্বপূর্ণ বিষয়গুলি হ'ল সিএসএসের গতিশীল লোড এড়ানো এবং ডায়ামিক সাইজিংয়ের প্রয়োজন হলে জেএসকে একটি ডমরডি ইভেন্টের ভিতরে রাখা)
হুগমগ

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

@ ব্রুনোইস: কিছু লেআউট কেবল জাভাস্ক্রিপ্ট দিয়ে তৈরি করা যেতে পারে। উদাহরণস্বরূপ, যে কোনও কিছুকে গতিশীলরূপে পুনরায় আকার দেওয়ার দরকার হয় তা অবশ্যই জাভাস্ক্রিপ্টের মাধ্যমে তৈরি করা উচিত এবং কিছু জিনিস (যেমন আকারটি 100% - 20px হওয়া উচিত) পুরানো ব্রাউজারগুলিতে বহনযোগ্যভাবে জাভাস্ক্রিপ্ট করা দরকার।
hugomg

@ মিসিংনো এইসব ক্ষেত্রে, কেবল যাইহোক, ডমকন্টেন্টলয়েড ইভেন্টটি ব্যবহার করুন। তবে আপনার বোঝার অর্থ আমি বুঝতে পারি। (বোকা আইই!)
ব্রুনোইস

10

জাভাস্ক্রিপ্টের আগে সিএসএস অন্তর্ভুক্ত করার প্রস্তাবটি কি অবৈধ?

আপনি যদি এটি কেবল একটি সুপারিশ হিসাবে বিবেচনা করেন তবে নয়। তবে আপনি যদি এটিকে কঠোর এবং দ্রুত নিয়ম হিসাবে বিবেচনা করেন ?, হ্যাঁ, এটি অবৈধ।

Https://developer.mozilla.org/en-US/docs/Web/References/Events/DOMContentLoaded থেকে

স্টাইলশীট ব্লক স্ক্রিপ্ট এক্সিকিউশন লোড করে, সুতরাং আপনার যদি কোনও পৃষ্ঠার <script> পরে থাকে <link rel="stylesheet" ...>তবে পৃষ্ঠাটি পার্সিং শেষ করবে না - এবং স্টাইলশিটটি লোড না হওয়া অবধি ডমকন্টেন্টলয়েড গুলি চালিত হবে না।

এটি প্রদর্শিত হচ্ছে যে প্রতিটি স্ক্রিপ্টের উপর নির্ভর করে কি আপনার জানতে হবে এবং সঠিক সমাপ্তির ইভেন্ট না হওয়া পর্যন্ত স্ক্রিপ্টটির সম্পাদন বিলম্বিত হবে তা নিশ্চিত করা উচিত। যদি স্ক্রিপ্টটি কেবল ডিওএম-র উপর নির্ভর করে, তবে এটি অনড্রিডি / ডমকনটেডলোডে আবার শুরু হতে পারে, যদি এটি চিত্রগুলি লোড করা যায় বা স্টাইলশিট প্রয়োগ করতে হয় তবে যদি আমি উপরোক্ত রেফারেন্সটি সঠিকভাবে পড়ে থাকি তবে সেই কোডটি অবশ্যই ওভারলোড ইভেন্ট পর্যন্ত পিছিয়ে দেওয়া উচিত be

আমি মনে করি না যে এক ঝাঁক আকার সবই খাপ খায়, যদিও সেভাবেই তারা বিক্রি হয় এবং আমি জানি যে একটি জুতার আকার সব ফিট করে না। আমি প্রথমে শৈলী বা স্ক্রিপ্ট লোড করার একটি নির্দিষ্ট উত্তর আছে বলে আমি মনে করি না। "সমালোচনামূলক পথে" না থাকায় কোন ক্রমে কী লোড করা উচিত এবং পরবর্তী অবধি কী পিছনে দেওয়া যেতে পারে সে ক্ষেত্রে সিদ্ধান্ত নেওয়ার ক্ষেত্রে এটি আরও কেস।

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

এই প্রশ্নটি বিশেষত ওয়েব সাইটে দেওয়া সমস্ত বিজ্ঞাপনের জন্য প্রযোজ্য। আমি এটি পছন্দ করব যদি সাইটের লেখকরা বিজ্ঞাপনের সামগ্রীর জন্য কেবল স্থানধারক ডিভগুলি উপস্থাপন করেন এবং কোনও ওলোডলোড ইভেন্টে বিজ্ঞাপনগুলি ইনজেকশনের আগে তাদের সাইটটি লোড এবং ইন্টারেক্টিভ ছিল কিনা তা নিশ্চিত করে ফেলে। তারপরেও আমি বিজ্ঞাপনগুলি একবারে পরিবর্তে সিরিয়ালি লোড হওয়া দেখতে চাই কারণ ফোলাবদ্ধ বিজ্ঞাপনগুলি লোড হওয়ার সময় তারা সাইটের সামগ্রী এমনকি স্ক্রোল করার আমার ক্ষমতাকে প্রভাবিত করে। তবে এটি এক ব্যক্তির দৃষ্টিভঙ্গি।

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

1
লিঙ্কযুক্ত নিবন্ধটি আর দাবি করে না "স্টাইলশিট লোড ব্লক স্ক্রিপ্ট প্রয়োগ"। এটা কি আর সত্য নয়?
গ্রেগ

@ গ্রেগ - এটি এখনও সত্য। স্ক্রিপ্টগুলিতে ডিওএম। স্টাইল বৈশিষ্ট্যগুলি জিজ্ঞাসা করতে সক্ষম হওয়া দরকার, সুতরাং স্টাইলশীটগুলি এখনও স্ক্রিপ্ট সম্পাদনকে অবরুদ্ধ করে। তারা স্মার্ট হলে স্ক্রিপ্ট লোডিংটি ব্লক করতে পারে না , তবে তারা স্ক্রিপ্টটি বন্ধ করে দেবে on ইভেন্টগুলি লোড করবে।
জিমি ব্রেক-ম্যাককে

10

2017-12-16 আপডেট হয়েছে

ওপিতে পরীক্ষার বিষয়ে আমি নিশ্চিত ছিলাম না। আমি কিছুটা পরীক্ষা-নিরীক্ষার সিদ্ধান্ত নিয়েছি এবং কিছু কল্পকাহিনীকে আবদ্ধ করে শেষ করেছি।

সিঙ্ক্রোনাস <script src...>এটি ডাউনলোড এবং সম্পাদন না করা পর্যন্ত এর নীচে থাকা সংস্থানগুলি ডাউনলোড করা অবরুদ্ধ করবে

এটি আর সত্য নয় । ক্রোম by৩ দ্বারা উত্পন্ন জলপ্রপাতটি একবার দেখুন:

<head>
<script src="//alias-0.redacted.com/payload.php?type=js&amp;delay=333&amp;rand=1"></script>
<script src="//alias-1.redacted.com/payload.php?type=js&amp;delay=333&amp;rand=2"></script>
<script src="//alias-2.redacted.com/payload.php?type=js&amp;delay=333&amp;rand=3"></script>
</head>

ক্রোম নেট পরিদর্শক -> জলপ্রপাত

<link rel=stylesheet> এটির নীচে স্ক্রিপ্টগুলি ডাউনলোড এবং প্রয়োগকে অবরুদ্ধ করবে না

এটি ভুল । স্টাইলশীট ডাউনলোডকে ব্লক করবে না তবে এটি স্ক্রিপ্টটির সম্পাদনকে ব্লক করবে ( এখানে সামান্য ব্যাখ্যা )। ক্রোম by৩ দ্বারা উত্পাদিত পারফরম্যান্স চার্টটি একবার দেখুন:

<link href="//alias-0.redacted.com/payload.php?type=css&amp;delay=666" rel="stylesheet">
<script src="//alias-1.redacted.com/payload.php?type=js&amp;delay=333&amp;block=1000"></script>

ক্রোম দেব সরঞ্জাম -> কর্মক্ষমতা


উপরের বিষয়টি মাথায় রেখে ওপিতে ফলাফলগুলি নীচে ব্যাখ্যা করা যেতে পারে:

সিএসএস প্রথম:

CSS Download  500ms:<------------------------------------------------>
JS Download   400ms:<-------------------------------------->
JS Execution 1000ms:                                                  <-------------------------------------------------------------------------------------------------->
DOM Ready   @1500ms:                                                                                                                                                      

জেএস প্রথম:

JS Download   400ms:<-------------------------------------->
CSS Download  500ms:<------------------------------------------------>
JS Execution 1000ms:                                        <-------------------------------------------------------------------------------------------------->
DOM Ready   @1400ms:                                                                                                                                            

এই কারণেই ডকুমেন্ট.ইউরাইট () এইচটিএমএলডিএম এর জন্য তৈরি করা সবচেয়ে খারাপ ধারণা।
ব্রুনোইস

1
The reason is that the script may want to get coordinates and other style-dependent properties of elements, like in the example above. Naturally, it has to wait for styles to load. javascript.info/… প্রথমে জেএসের ক্ষেত্রে একই ধারণা কেন প্রযোজ্য নয়? আমাকে খুব একটা বোঝায় না, মৃত্যুদন্ড কার্যকর করা জেএস এর ক্রম এর উদ্দেশ্য সম্পর্কে কিছুই জানায় না।
থারস্টেন শ্যাচিং

4

আমি ঠিক নিশ্চিত নই যে আপনার পরীক্ষাগুলি আপনার জাভা স্ক্রিপ্টটি ব্যবহার করার সময়কে 'রেন্ডার' করে। তবে এটি বিবেচনা করুন

আপনার সাইটে একটি পৃষ্ঠা 50k যা অযৌক্তিক নয়। আপনার সার্ভার পশ্চিমে থাকাকালীন ব্যবহারকারী পূর্ব উপকূলে রয়েছে। এমটিইউ অবশ্যই 10 কে নয় তাই পিছনে কয়েক ট্রিপ হবে। আপনার পৃষ্ঠা এবং স্টাইলশিটগুলি পেতে এক সেকেন্ড সময় লাগতে পারে। সাধারণত (আমার জন্য) জাভাস্ক্রিপ্ট (jquery প্লাগইন এবং এর মাধ্যমে) CSS এর চেয়ে অনেক বেশি। আপনার ইন্টারনেট সংযোগটি যখন পৃষ্ঠায় মাঝপথে চূড়ান্ত হয়ে যায় তখনই ঘটে থাকে তবে তা উপেক্ষা করতে দিন (এটি আমার মাঝে মাঝে ঘটে এবং আমি বিশ্বাস করি যে CSS রেন্ডার দেয় তবে আমি 100% নিশ্চিত নই)।

যেহেতু সিএসএস মাথা আছে সেখানে এটি পেতে অতিরিক্ত সংযোগ থাকতে পারে যার অর্থ এটি পৃষ্ঠাটি সম্পাদন করার আগেই এটি শেষ করতে পারে। যাইহোক পৃষ্ঠার বাকী অংশগুলি টাইপ করার সময় এবং জাভাস্ক্রিপ্ট ফাইলগুলি (যা আরও অনেক বাইট রয়েছে) পৃষ্ঠাটি আনস্টাইল করা হয় যা সাইট / সংযোগটি ধীর করে দেয়।

জাভাস্ক্রিপ্ট কোড ডাউনলোড করতে সিএসএস সময় না দেওয়া পর্যন্ত জেএস ইন্টারপ্রেটার শুরু করতে অস্বীকার করেও বিশেষত সার্ভার থেকে সিএসএস সময় কাটাচ্ছে যা সাইটটিকে সুন্দর দেখাচ্ছে না।

এটি একটি ছোট অপ্টিমাইজেশন তবে এটির কারণটি স্থির করে।


1
সার্ভারটি পূর্ব উপকূলে রয়েছে, তারা এখন একটি সিডিএন ব্যবহার করে তাও আপনি আপাতদৃষ্টিতে অসচেতন।
jcolebrand

3

উপরের সমস্ত প্রধান উত্তরের সংক্ষিপ্তসার এখানে (বা পরে নীচে হতে পারে :)

আধুনিক ব্রাউজারগুলির জন্য, যেখানে খুশি সিএসএস রাখুন। তারা আপনার এইচটিএমএল ফাইলটিকে বিশ্লেষণ করবে (যা তারা অনুমানমূলক পার্সিং বলে )) এবং এইচটিএমএল পার্সিংয়ের সাথে সমান্তরালে সিএসএস ডাউনলোড শুরু করবে।

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

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

এছাড়াও একটি নির্দিষ্ট মামলার জন্য কিছু পরীক্ষামূলক ফলাফল রয়েছে যা দাবি করে যে জাভাস্ক্রিপ্টকে প্রথমে রাখার (সিএসএসকে প্রথমে রাখার প্রচলিত জ্ঞানের বিপরীতে) আরও ভাল পারফরম্যান্স দেওয়া হয়েছে তবে এর জন্য কোনও যৌক্তিক যুক্তি দেওয়া হয়নি, এবং ব্যাপক প্রয়োগের ক্ষেত্রে বৈধতার অভাব রয়েছে, তাই আপনি পারেন আপাতত তা উপেক্ষা করুন।

সুতরাং, প্রশ্নের উত্তর দিতে: হ্যাঁ। আধুনিক ব্রাউজারগুলির জন্য জেএসের আগে সিএসএস অন্তর্ভুক্ত করার সুপারিশটি অবৈধ। আপনার পছন্দ মতো যেখানে সিএসএস রাখুন এবং জেএসকে শেষের দিকে রাখুন as


1

স্টিভ সোডার্স ইতিমধ্যে একটি নির্দিষ্ট উত্তর দিয়েছে তবে ...

আমি ভাবছি যে স্যামের আসল পরীক্ষা এবং জোশের পুনরাবৃত্তি উভয় ক্ষেত্রেই কোনও সমস্যা আছে কিনা।

উভয় পরীক্ষা কম লেটেন্সি সংযোগে সম্পন্ন হয়েছে বলে মনে হয় যেখানে টিসিপি সংযোগ স্থাপনের ক্ষেত্রে একটি তুচ্ছ ব্যয় হবে।

এটি কীভাবে পরীক্ষার ফলাফলকে প্রভাবিত করে আমি নিশ্চিত নই এবং আমি একটি 'স্বাভাবিক' বিলম্বিত সংযোগের উপর পরীক্ষার জন্য জলপ্রপাতগুলি দেখতে চাই তবে ...

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

নতুন ব্রাউজারগুলিতে দ্বিতীয় টিসিপি সংযোগটি অনুমানমূলকভাবে খোলা হয় যাতে সংযোগের ওভারহেড হ্রাস হয় / চলে যায়, পুরানো ব্রাউজারগুলিতে এটি সত্য নয় এবং দ্বিতীয় সংযোগটি ওপেনহেডটি খোলা থাকবে।

এই পরীক্ষার ফলাফলকে কীভাবে / যদি এটি প্রভাবিত করে তবে আমি নিশ্চিত নই।


অনুসরণ করছেন না, যদি না আপনি পাইপলাইনিং যা অবিশ্বাস্যভাবে বিরল হয় আপনার সংযোগ সেটআপ হ্রাস হওয়ার খুব সম্ভাবনা নেই ... সম্মত হন পরীক্ষাটি কম স্বল্পতার সাথে পুনরাবৃত্তি করা উচিত
স্যাম স্যাফারন

আপনি যদি এই জলপ্রপাতটির দিকে তাকান তবে দেখতে পাবেন যে ওয়েবপেজটেস্ট.আর.সাল্ট / (( আই 9 একই করে) প্রয়োজন হওয়ার আগে ক্রোম অনুমানের সাথে দ্বিতীয় সংযোগটি খুলবে ... আমি কমের চেয়ে টিসিপি উদ্দেশ্যে সাধারণ বিলম্বিতা ভাবছিলাম - কোন ধরণের পরিবেশের পরীক্ষাটি কি হয়েছিল?
অ্যান্ডি ডেভিস

2
পুনরায়: "স্টিভ সাউডারস ইতিমধ্যে একটি নির্দিষ্ট উত্তর দিয়েছে তবে ..." ওয়েব বিবর্তনের সাথে বিষয়টি হ'ল কোনও নির্দিষ্ট উত্তর নেই। :) স্ক্রিপ্টগুলি লোড করার 3-4 উপায় রয়েছে এবং জিনিসগুলি পরিবর্তিত হয়। আসল সঠিক শব্দার্থকটি আসলে স্টিভকে "সিঙ্ক্রোনাস জাভাস্ক্রিপ্টের আগে সিএসএস রাখার" কথা বলা উচিত ছিল নাহলে লোকেরা এটিকে সমস্ত স্ক্রিপ্টগুলির নিয়ম বলে সাধারণীকরণ করে ভুল করে ...
হেক্সালিস

হ্যাঁ তবে বেশিরভাগ লোকেরা কেবল স্ক্রিপ্টগুলি সিঙ্ক্রোনালি অন্তর্ভুক্ত করে তাই স্টিভের পরামর্শ অবিস্মরণীয় হওয়া ভাল।
অ্যান্ডি ডেভিস

1

আমি মনে করি এটি সমস্ত ক্ষেত্রে সত্য হবে না। কারণ সিএসএস সমান্তরাল তবে জেএস ক্যান্ট ডাউনলোড করবে। একই ক্ষেত্রে বিবেচনা করুন,

একক সিএসএসের পরিবর্তে ২ বা ৩ সিএসএস ফাইল নিন এবং এই উপায়গুলি দিয়ে দেখুন,

1) css..css..js 2) CSS..js..css 3) js..css..css

আমি নিশ্চিত css..css..js অন্য সকলের চেয়ে ভাল ফলাফল দেবে।


0

আমাদের মনে রাখতে হবে যে নতুন ব্রাউজারগুলি তাদের জাভাস্ক্রিপ্ট ইঞ্জিনগুলি, তাদের পার্সার ইত্যাদিতে কাজ করেছে, সাধারণ কোড এবং মার্কআপ সমস্যাগুলি এমনভাবে অনুকূল করেছে যে <= আইই 8 এর মতো প্রাচীন ব্রাউজারগুলিতে যে সমস্যাগুলি এসেছে সেগুলি কেবল প্রাসঙ্গিক নয় with মার্কআপের ক্ষেত্রে তবে জাভাস্ক্রিপ্ট ভেরিয়েবল, উপাদান নির্বাচনকারী ইত্যাদির ব্যবহার সম্পর্কেও আমি দেখতে পাচ্ছি এত দূরবর্তী ভবিষ্যতে এমন একটি পরিস্থিতি যেখানে প্রযুক্তি এমন একটি পর্যায়ে পৌঁছেছে যেখানে পারফরম্যান্স আসলেই কোনও সমস্যা নয়।


পারফরম্যান্স সবসময় একটি ইস্যু। আমি প্রায় যে ব্রাউজারগুলি অনুমান অনুসরণ করে না উপস্থিত প্রায় উপেক্ষা। আমি কেবল আমার কোডটি প্রস্তুত করি যাতে নির্দিষ্ট গতিগুলি অনুসরণ করে এবং অন্যান্যরা কেবল এই জাতীয় কাজ করে যা এটি কাজ করে। সুতরাং, উদাহরণস্বরূপ, এটি যদি কেবল আইই 8 তে কাজ করে, ঠিক আছে।
ব্রুনোইস

-5

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

আমি বাহ্যিক স্ক্রিপ্টগুলির কোনও রেফারেন্স সহ ডকুমেন্টের "মাথা" অংশে সিএসএস রেফারেন্স রাখতাম। (কিছু স্ক্রিপ্ট শরীরে রাখার দাবি করতে পারে এবং যদি তা হয় তবে সেগুলি বাধ্য করুন))

এর বাইরে ... আপনি যদি পর্যবেক্ষণ করেন যে "এটি এই / তার চেয়ে দ্রুত / ধীর বলে মনে হয়, এই / এই ব্রাউজারটিতে" এই পর্যবেক্ষণটিকে একটি আকর্ষণীয় তবে অপ্রাসঙ্গিক কৌতূহল হিসাবে বিবেচনা করুন এবং এটি আপনার নকশার সিদ্ধান্তগুলিকে প্রভাবিত করতে দেবেন না। অনেকগুলি জিনিস খুব দ্রুত পরিবর্তিত হয়। ( ফায়ারফক্স দল তাদের পণ্যটির আরও একটি অন্তর্বর্তীকালীন প্রকাশের আগে ফায়ারফক্স দল বের হওয়ার আগে যে কত মিনিট হবে তাতে যে কোনও বাজি রাখতে চায়?) হ্যাঁ, আমাকেও নয়।)

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