CSS සෑම විටම ජාවාස්ක්‍රිප්ට් වලට පෙර සිටිය යුතුද?


902

ජාවාස්ක්‍රිප්ට් වලට පෙර CSS ඇතුළත් කිරීමේ නිර්දේශය අන්තර්ජාලය හරහා ගණන් කළ නොහැකි ස්ථානවල මම දැක ඇත්තෙමි. තර්කනය සාමාන්‍යයෙන් මෙම ස්වරූපයෙන් වේ :

ඔබේ CSS සහ JavaScript ඇණවුම් කිරීමේදී, ඔබේ CSS පළමුව පැමිණීමට ඔබට අවශ්‍යය. හේතුව, විදැහුම්කරණ නූලට පිටුව විදැහුම් කිරීමට අවශ්‍ය සියලුම ශෛලීය තොරතුරු තිබීමයි. ජාවාස්ක්‍රිප්ට් එකට ඇතුලත් වන්නේ නම්, ඊළඟ සම්පත් සමූහය වෙත යාමට පෙර ජාවාස්ක්‍රිප්ට් එන්ජිම ඒ සියල්ල විග්‍රහ කළ යුතුය. මෙයින් අදහස් කරන්නේ විදැහුම්කරණ නූලට අවශ්‍ය සියලුම මෝස්තර නොමැති බැවින් පිටුව සම්පූර්ණයෙන්ම පෙන්විය නොහැකි බවයි.

මගේ සත්‍ය පරීක්ෂණයෙන් ඊට වඩා වෙනස් දෙයක් අනාවරණය වේ:

මගේ පරීක්ෂණ පටි

විවිධ සම්පත් සඳහා නිශ්චිත ප්‍රමාදයන් ජනනය කිරීමට මම පහත දැක්වෙන රූබි ස්ක්‍රිප්ට් භාවිතා කරමි:

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..."
}

ජාවාස්ක්‍රිප්ට් ලිපිගොනු (සේවාදායකය සහ සේවාදායකයා යන දෙකම) සහ අත්තනෝමතික CSS ප්‍රමාදයන් සඳහා අත්තනෝමතික ප්‍රමාදයන් සැකසීමට ඉහත කුඩා සේවාදායකය මට ඉඩ දෙයි. උදාහරණයක් ලෙස, http://10.0.0.50:8081/test.css?delay=500මට CSS මාරු කිරීම 500 ms ප්‍රමාදයක් ලබා දෙයි.

පරීක්ෂා කිරීම සඳහා මම පහත පිටුව භාවිතා කරමි.

<!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>

මම මුලින් CSS ඇතුළත් කළ විට, පිටුව විදැහුම් කිරීමට තත්පර 1.5 ක් ගතවේ:

CSS පළමුව

මම පළමුව ජාවාස්ක්‍රිප්ට් ඇතුළත් කළ විට, පිටුව විදැහුම් කිරීමට තත්පර 1.4 ක් ගතවේ:

ජාවාස්ක්‍රිප්ට් පළමුව

මට ක්‍රෝම්, ෆයර්ෆොක්ස් සහ ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් වල සමාන ප්‍රති results ල ලැබේ. කෙසේ වෙතත්, ඔපෙරාහි, ඇණවුම් කිරීම වැදගත් නොවේ.

සිදුවෙමින් පවතින දෙය නම්, සියලුම CSS බාගත කරන තුරු ජාවාස්ක්‍රිප්ට් පරිවර්තකය ආරම්භ කිරීම ප්‍රතික්ෂේප කිරීමයි. එබැවින්, ජාවාස්ක්‍රිප්ට් නූලට වැඩිපුර ධාවන කාලය ලැබෙන බැවින් පළමුව ජාවාස්ක්‍රිප්ට් තිබීම වඩා කාර්යක්ෂම බව පෙනේ.

මට යමක් මග හැරී ඇත්ද, ජාවාස්ක්‍රිප්ට් ඇතුළත් කිරීමට පෙර CSS ඇතුළත් කිරීම නිර්දේශය නිවැරදි නොවේද?

විදැහුම් නූල් නිදහස් කිරීමට හෝ ජාවාස්ක්‍රිප්ට් කේතය පාදකයේ තැබීමට හෝ ජාවාස්ක්‍රිප්ට් ලෝඩරයක් භාවිතා කිරීමට අපට අසින්ක් එකතු කිරීමට හෝ සෙට් ටයිමවුට් භාවිතා කළ හැකි බව පැහැදිලිය. මෙහිදී වැදගත් වන්නේ ජාවාස්ක්‍රිප්ට් බිටු සහ සීඑස්එස් බිටු හිසෙහි ඇණවුම් කිරීමයි.


120
1511 එදිරිව 1422 යනු සංඛ්‍යානමය වශයෙන් වැදගත් වෙනසක් ද? එය සියයට 6 කි. සැලකිය යුතු-සාමාන්‍ය-මිනිස් කාර්ය සාධන වෙනස සඳහා පොදු සීමාව සියයට 20 ක් පමණ වේ.
ජෙෆ් ඇට්වුඩ්

15
කාරණය වන්නේ නැවත සකස් කිරීමෙන් මෙම අත්තනෝමතික ප්‍රමාදය ඉවත් කිරීමයි, ඔබට අවශ්‍ය ඕනෑම දෙයකට ප්‍රමාදය සැකසිය හැකිය, එය ගැටලුවේ නිරූපණයකි.
සෑම් කුංකුම

3
ඔබේ ප්‍රමාදය මීටර් 100 ක්ද? ඔබගේ තිරපිටපත් වල වෙනස 89ms වේ. ඔබේ URL දී එය delay=400&amp;jsdelay=1000හා delay=500වන අහලකටවත් 100ms හෝ 89ms වේ. මම හිතන්නේ ඔබ සඳහන් කරන්නේ කුමන අංකද යන්න මට පැහැදිලි නැත.
ජෙෆ් ඇට්වුඩ්

4
"ජාවාස්ක්‍රිප්ට් එකට ඇතුලත් වන්නේ නම්, ඊළඟ සම්පත් සමූහය වෙත යාමට පෙර ජාවාස්ක්‍රිප්ට් එන්ජිම ඒ සියල්ල විග්‍රහ කළ යුතුය. මෙයින් අදහස් කරන්නේ විදැහුම්කරණ නූල් වලට පිටුව සම්පූර්ණයෙන්ම පෙන්විය නොහැකි බැවින් එයට අවශ්‍ය සියලුම මෝස්තර නොමැති බවයි. . " - JS ඇතුළත් කිරීම හිසෙහි තිබේ නම්, CSS ඇතුලත් කිරීමට පෙර හෝ පසුවද යන්න නොසලකා පිටුව විදැහුම් කිරීමට පෙර JS ක්‍රියාත්මක වේ.
nnnnnn

162
ඔබ මෙය සලකා බැලුවේ දැයි විශ්වාස නැත, නමුත් පැටවීමේ වේලාව පිළිබඳ සංජානනය ද වැදගත් ය. උදාහරණයක් ලෙස, CSS පූරණය කිරීමෙන් ඔබට පිටු පසුබිම් වර්ණය / වයනය පවා ලබා දෙන්නේ නම්, එය වේගවත් බව පෙනේ. නිරපේක්ෂ පැටවීමේ වේලාවන් මෙය ඇඟවුම් නොකරයි.
රාකේෂ් පයි

Answers:


713

මෙය ඉතා රසවත් ප්‍රශ්නයකි. මම සෑම විටම මගේ CSS <link href="...">යන් මගේ JS වලට පෙර <script src="...">තැබුවෙමි, මන්ද "මම එක වරක් කියවීම වඩා හොඳය." ඉතින්, ඔබ හරි; අපි සත්‍ය පර්යේෂණ කිහිපයක් කිරීමට කාලයයි!

මම මගේම පරීක්ෂණ පටි නෝඩ් හි සකස් කළෙමි (පහත කේතය). මූලික වශයෙන්, මම:

  • HTTP හැඹිලියක් නොමැති බවට වග බලා ගන්න, එවිට පිටුවක් පටවන සෑම අවස්ථාවකම බ්‍රව්සරයට සම්පූර්ණ බාගත කිරීමක් කිරීමට සිදුවේ.
  • යථාර්ථය අනුකරණය කිරීම සඳහා, මම jQuery සහ H5BP CSS ඇතුළත් කළෙමි (එබැවින් විග්‍රහ කිරීමට හොඳ ස්ක්‍රිප්ට් / CSS ප්‍රමාණයක් ඇත)
  • පිටු දෙකක් සකසන්න - එකක් ස්ක්‍රිප්ටයට පෙර CSS සමඟ, එකක් ස්ක්‍රිප්ට් පසු CSS සමඟ.
  • බාහිර පිටපත <head>ක්‍රියාත්මක කිරීමට කොපමණ කාලයක් ගතවේදැයි සටහන් කර ඇත
  • ඉන්ලයින් ස්ක්‍රිප්ට් <body>ක්‍රියාත්මක කිරීමට කොපමණ කාලයක් ගතවේද යන්න පටිගත කර ඇති අතර එය සමාන වේ DOMReady.
  • CSS සහ / හෝ ස්ක්‍රිප්ට් බ්‍රව්සරයට මීටර් 500 කින් යැවීම ප්‍රමාද විය.
  • ප්‍රධාන බ්‍රව්සර් 3 තුළ 20 වතාවක් පරීක්ෂණය මෙහෙයවන්න.

ප්රතිපල

පළමුව, CSS ගොනුව 500ms ප්‍රමාද වීමත් සමඟ:

     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

ඊළඟට, මම CSS වෙනුවට jQuery 500ms ප්‍රමාද කිරීමට නියම කළෙමි:

     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

අවසාන වශයෙන්, මම jQuery සහ CSS යන දෙකම මීටර් 500 කින් ප්‍රමාද කිරීමට නියම කළෙමි:

     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>ලේඛනයේ අවසානයට එදිරිව ඔබේ ස්ක්‍රිප්ට් සමඟ සම්බන්ධ වීමට හේතුව පිළිබඳව විවිධ තර්ක තිබේ , නමුත් එය මෙම පිළිතුරේ විෂය පථයෙන් පිටත ය. මෙය තදින්ම s හි s <script>ට පෙර යා යුතුද යන්න <link>පිළිබඳව <head>වේ.

නවීන ඩෙස්ක්ටොප් බ්‍රව්සර් වල, CSS සමඟ සම්බන්ධ වීම පළමුව කිසි විටෙකත් කාර්ය සාධනයක් ලබා නොදෙන බව පෙනේ . සීඑස්එස් සහ ස්ක්‍රිප්ට් යන දෙකම ප්‍රමාද වූ විට සීඑස්එස් පිටපත් කිරීමෙන් ඔබට සුළු ලාභයක් ලැබෙනු ඇත, නමුත් සීඑස්එස් ප්‍රමාද වූ විට ඔබට විශාල වාසි ලබා දේ. ( lastපළමු ප්‍රති results ල මාලාවේ තීරුවලින් දැක්වේ.)

අවසන් වරට CSS සමඟ සම්බන්ධ වීම කාර්ය සාධනයට හානියක් නොවන බව පෙනේ, නමුත් යම් යම් තත්වයන් යටතේ වාසි ලබා දිය හැකි බැවින්, පැරණි බ්‍රව්සර්වල ක්‍රියාකාරීත්වය සැලකිලිමත් නොවන්නේ නම්, ඔබ ඩෙස්ක්ටොප් බ්‍රව්සර්වල පමණක් බාහිර ස්ක්‍රිප්ට් සමඟ සම්බන්ධ වූ පසු බාහිර මෝස්තර රටා සමඟ සම්බන්ධ විය යුතුය . ජංගම තත්වය සඳහා කියවන්න.

මන්ද?

Ically තිහාසිකව, බ්‍රව්සරයකට <script>බාහිර සම්පතක් වෙත යොමු වන ටැගයක් හමු වූ විට, බ්‍රව්සරය HTML විග්‍රහ කිරීම නවතා , ස්ක්‍රිප්ට් ලබාගෙන, එය ක්‍රියාත්මක කර, පසුව HTML විග්‍රහ කිරීම දිගටම කරගෙන යනු ඇත. ඊට වෙනස්ව, බ්‍රවුසරයට <link>බාහිර මෝස්තරයක් සඳහා a හමු වූ විට, එය CSS ගොනුව ලබා ගන්නා අතරතුර (සමාන්තරව) HTML විග්‍රහ කිරීම දිගටම කරගෙන යනු ඇත .

එබැවින්, ස්ටයිල් ෂීට් වලට මුල් තැන දීම සඳහා පුළුල් ලෙස පුනරාවර්තනය වන උපදෙස් - ඒවා පළමුව බාගත කරනු ඇති අතර, බාගත කළ පළමු ස්ක්‍රිප්ට් සමාන්තරව පැටවිය හැකිය.

කෙසේ වෙතත්, නවීන බ්‍රව්සර් (මා ඉහත පරීක්ෂා කළ සියලුම බ්‍රව්සර් ද ඇතුළුව) සමපේක්ෂන විග්‍රහ කිරීම ක්‍රියාත්මක කර ඇති අතර, එහිදී බ්‍රව්සරය HTML හි “ඉදිරියෙන්” පෙනෙන අතර ස්ක්‍රිප්ට් බාගත කර ක්‍රියාත්මක කිරීමට පෙර සම්පත් බාගත කිරීම ආරම්භ කරයි.

සමපේක්ෂන විග්‍රහයකින් තොරව පැරණි බ්‍රව්සර්වල, ස්ක්‍රිප්ට් වලට මුල් තැන දීම කාර්ය සාධනයට බලපානුයේ ඒවා සමාන්තරව බාගත නොවන බැවිනි.

බ්‍රව්සර් සහාය

සමපේක්ෂන විග්‍රහ කිරීම ප්‍රථමයෙන් ක්‍රියාත්මක කරන ලද්දේ: (මෙම අනුවාදය භාවිතා කරන ලොව පුරා ඩෙස්ක්ටොප් බ්‍රව්සර් භාවිතා කරන්නන්ගේ ප්‍රතිශතය සමඟ හෝ 2012 ජනවාරි වන විට වැඩි)

  • ක්‍රෝම් 1 (වෙබ්කිට් 525) (100%)
  • IE 8 (75%)
  • ෆයර්ෆොක්ස් 3.5 (96%)
  • සෆාරි 4 (99%)
  • ඔපෙරා 11.60 (85%)

සමස්තයක් ලෙස ගත් කල, අද භාවිතයේ පවතින ඩෙස්ක්ටොප් බ්‍රව්සර් වලින් දළ වශයෙන් 85% ක් සමපේක්ෂන පැටවීම සඳහා සහාය වේ. CSS ට පෙර ස්ක්‍රිප්ට් තැබීමෙන් ගෝලීය වශයෙන් භාවිතා කරන්නන්ගෙන් 15% කට කාර්ය සාධන ද penalty ුවමක් ලැබේ ; ඔබේ වෙබ් අඩවියේ නිශ්චිත ප්‍රේක්ෂකයින් මත පදනම්ව YMMV. (මතක තබා ගන්න එම සංඛ්‍යාව හැකිලෙමින් තිබේ.)

ජංගම බ්‍රව්සර් වල, ජංගම බ්‍රව්සරය සහ මෙහෙයුම් පද්ධතියේ භූ දර්ශනය කෙතරම් විෂමජාතීයද යන්න නිසා නිශ්චිත සංඛ්‍යා ලබා ගැනීම ටිකක් අපහසු වේ. සමපේක්ෂන විදැහුම්කරණය වෙබ්කිට් 525 (2008 මාර්තු නිකුත් කරන ලද) හි ක්‍රියාත්මක කර ඇති හෙයින් සහ සෑම වටිනා ජංගම බ්‍රව්සරයක්ම වෙබ්කිට් මත පදනම් වී ඇති හෙයින්, “බොහෝ” ජංගම බ්‍රව්සර් එයට සහාය විය යුතු බව අපට නිගමනය කළ හැකිය . Quirksmode ට අනුව , iOS 2.2 / Android 1.0 වෙබ්කිට් 525 භාවිතා කරයි. වින්ඩෝස් දුරකථනය මොන වගේද කියා මට අදහසක් නැත.

කෙසේ වෙතත්, මම මගේ ඇන්ඩ්‍රොයිඩ් 4 උපාංගය මත පරීක්ෂණය මෙහෙයවූ අතර, ඩෙස්ක්ටොප් ප්‍රති results ල වලට සමාන සංඛ්‍යා දුටු අතර, මම එය ඇන්ඩ්‍රොයිඩ් සඳහා ක්‍රෝම් හි අපූරු නව දුරස්ථ නිදොස්කරණයට සම්බන්ධ කළෙමි , ජාල ටැබ් මඟින් බ්‍රව්සරය බාගත කිරීමට බලා සිටින බව පෙන්නුම් කළේය. ජාවාස්ක්‍රිප්ට් සම්පුර්ණයෙන්ම පටවන තුරු CSS - වෙනත් වචන වලින් කිවහොත්, ඇන්ඩ්‍රොයිඩ් සඳහා වන වෙබ්කිට් හි නවතම අනුවාදය පවා සමපේක්ෂන විග්‍රහයට සහාය දක්වන බවක් නොපෙනේ. CPU, මතකය සහ / හෝ ජංගම උපාංගවලට ආවේනික වූ ජාල බාධක හේතුවෙන් එය ක්‍රියා විරහිත විය හැකි යැයි මම සැක කරමි.

කේතය

අලසකමට සමාව දෙන්න - මෙය ප්රශ්න හා පිළිතුරු විය.

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
මෙය අපූරු පිළිතුරකි, විද්‍යාව භාවිතා කිරීම ගැන ස්තූතියි ! ඔබේ ප්‍රති result ලයට අනුව “නවීන බ්‍රව්සර් වල, එය CSS සමඟ සම්බන්ධ වීම පළමුවෙන් කිසි විටෙකත් කාර්ය සාධනයක් ලබා නොදෙන බව පෙනේ” , මම සිතන්නේ ප්‍රශ්න මාතෘකාවට පිළිතුර ඔව් , CSS හි පැරණි උපදෙස් පළමුව අවලංගුය.
ජෙෆ් ඇට්වුඩ්

මොබයිල් හි ප්‍රතිලෝම ගැන @ josh3736 යාවත්කාලීන කිරීම සම්බන්ධයෙන් ... මෙය සැලකිය යුතු වෙනසක් සඳහා තුවක්කුව පනින්න එපා. ජංගම දුරකථන වල ක්‍රියාකාරිත්වය බොහෝ විට වඩා වැදගත් බැවින් වෙනත් ජංගම බ්‍රව්සරයන් (වෙබ්කිට්, හූනා, ප්‍රෙස්ටෝ, ට්‍රයිඩන්ට්, ආදිය) හැසිරෙන ආකාරය ගැන මට කුතුහලයක් ඇත.
scunliffe

1
මන්දගාමී සේවාදායකයක වේගය අනුකරණය කිරීම සඳහා, ඔබ CSS / js මුද්‍රණය කිරීම සඳහා යම් මන්දගාමීත්වයක් එක් කිරීමට උත්සාහ කළ යුතුය.
kirb

ඔබ කල්දැමීම හෝ අසින්ක් භාවිතා කරන්නේ නම් කෙසේද? එය වෙනස් වේද? (පේළිගත ස්ක්‍රිප්ට් සහ ඉන්ලයින් ස්ක්‍රිප්ට් නොමැතිව උත්සාහ කරන්න) එය වෙනස් වේද?
brunoais

1
"පළමුව, මම ක්‍රියාත්මක <head>වන්නේ ඔබේ ලේඛනයේ ස්ක්‍රිප්ට් ඇති බවට උපකල්පනය යටතේ බව මම සටහන් කර ගැනීම වැදගත්ය (අවසානයට වඩා වෙනස්ව <body>)." මම බව ඉස්මතු කරන බොහෝ ඉහල මෙන් පිළිතුරු කලින්. ඇතුළුව scriptදී headබාහිර ගොනුව අදාල බව කිසිදාක පාහේ ඕනෑම ඉදිරිදර්ශනය (සුභදායක නැත කාර්ය සාධන එකක්) සිට, නිවැරදි ය. සැබෑ ජීවිතයේ දී එය කිරීමට මට සිදු වූ බව මට මතක නැත. අමුතු පේළියක් හෝ පේළි දෙකක් ස්ක්‍රිප්ට් විය හැක, නමුත් එපමණයි . පෙරනිමිය, ඉතා හොඳ ප්‍රතිවිරුද්ධ හේතු නොමැතිව , ශරීරයේ අවසානය විය යුතුය.
ටී. ජේ. ක්‍රෝඩර්

303

CSS ජාවාස්ක්‍රිප්ට් එකට දැමීමට ප්‍රධාන හේතු දෙකක් තිබේ.

  1. පැරණි බ්‍රව්සර් (ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් 6-7, ෆයර්ෆොක්ස් 2, ආදිය) ස්ක්‍රිප්ට් එකක් බාගත කිරීම ආරම්භ කරන විට පසුව ලැබෙන සියලුම බාගත කිරීම් අවහිර කරනු ඇත. එබැවින් ඔබ a.jsඅනුගමනය කර ඇත්නම් b.cssඒවා අනුක්‍රමිකව බාගත වේ: පළමුව a. ඔබ b.cssඅනුගමනය කර ඇත්නම් a.jsඒවා සමාන්තරව බාගත වන බැවින් පිටුව වඩාත් ඉක්මණින් පටවනු ලැබේ.

  2. සියලුම ස්ටයිල් ෂීට් බාගත කරන තුරු කිසිවක් ඉදිරිපත් නොකෙරේ - මෙය සියලුම බ්‍රව්සර් වල සත්‍ය වේ. ස්ක්‍රිප්ට් වෙනස් වේ - ඒවා පිටුවේ ස්ක්‍රිප්ට් ටැගයට පහළින් ඇති සියලුම DOM අංග විදැහුම් කිරීම අවහිර කරයි. ඔබ ඔබේ ස්ක්‍රිප්ට් හෙඩ් එකට දැමුවහොත් එයින් අදහස් වන්නේ සියලුම ස්ටයිල් ෂීට් සහ සියලුම ස්ක්‍රිප්ට් බාගත කරන තෙක් මුළු පිටුවම විදැහුම්කරණයෙන් අවහිර කර ඇති බවයි. ස්ටයිල් ෂීට් සඳහා වන සියලුම විදැහුම්කරණය අවහිර කිරීම අර්ථවත් වන අතර (එබැවින් ඔබට පළමු වරට නිවැරදි මෝස්තරය ලබා ගත හැකි අතර අස්ථිර අන්තර්ගත FOUC වලින් වළකින්න), ස්ක්‍රිප්ට් සඳහා මුළු පිටුවම විදැහුම් කිරීම අවහිර කිරීම අර්ථවත් නොවේ. බොහෝ විට ස්ක්‍රිප්ට් කිසිදු DOM මූලද්‍රව්‍යයකට හෝ DOM මූලද්‍රව්‍යවලින් කොටසක් කෙරෙහි බලපාන්නේ නැත. පිටුවේ හැකි තරම් අඩු ස්ක්‍රිප්ට් පැටවීම වඩාත් සුදුසුය, නැතහොත් ඊටත් වඩා සමකාලීනව පටවන්න.

Cuzillion සමඟ උදාහරණ නිර්මාණය කිරීම විනෝදජනකයි . උදාහරණයක් ලෙස, මෙම පිටුවේ HEAD හි ස්ක්‍රිප්ට් එකක් ඇති බැවින් බාගත කිරීම අවසන් වන තුරු මුළු පිටුවම හිස්ව පවතී. කෙසේ වෙතත්, අපි ස්ක්‍රිප්ට් එක BODY හි අවසානයට ගෙන ගියහොත්, මෙම DOM මූලද්‍රව්‍යයන් SCRIPT ටැගයට ඉහළින් ඇති බැවින් පිටු ශීර්ෂය විදහා දක්වයි, ඔබට මෙම පිටුවේ දැකිය හැකිය .


10
ගෞරවනීය ස්ටීව් මට පිළිතුරට පහර දුන්නා, නමුත් ඔහු සඳහන් කළ දෙයට අදාළ ලිපියක් මම එකතු කරමි: stevesouders.com/blog/2009/04/27/…
ජුවාන් පැබ්ලෝ බුරිටිකා

4
async"ඊටත් වඩා හොඳ ඒවා අසමමුහුර්තව පටවන්න
ජෙෆ් ඇට්වුඩ්

හේයි, මට කියන්න පුළුවන්ද කවුරුහරි CSS ලිපිගොනු @importවිධානයන් සමඟ සම්බන්ධ කරන්නේ ඇයි?
ජොෂ් ස්ටෝඩෝලා

6
2 සඳහා ප්‍රභවය කුමක්ද), එය සත්‍ය නම්, යම් අවස්ථාවක දී පිටුවක් අන්තර්ගතය පැටවීම අවසන් කරන්නේ මන්දැයි ඔබට පැහැදිලි කළ හැකිද, පසුව CSS තත්පරයකට හෝ දෙකකට පසුව යෙදේ. (මෙය සිදුවී ඇත්තේ කලාතුරකින්, මගේම පිටුවල CSS <head> ටැග් වල)
ඉස්කාටා

2
ඉතින් අපි පිටුවේ අවසානයේ jQuery+ jQuery UI+ දැමිය $(document).ready(function () { });යුතුද? එය සැමවිටම අපේක්ෂා කළ පරිදි ක්‍රියාත්මක වේද?
ඔලිවියර් පොන්ස්

42

ඔබට ලැබී ඇති ප්‍රති results ල ගැන මම ඕනෑවට වඩා අවධාරණය නොකරමි, එය ආත්මීය යැයි මම විශ්වාස කරමි, නමුත් ජේඑස් වලට පෙර CSS ඇතුළත් කිරීම වඩා හොඳ බව ඔබට පැහැදිලි කිරීමට මට හේතුවක් තිබේ.

ඔබේ වෙබ් අඩවිය පූරණය කිරීමේදී, ඔබ දකින අවස්ථා දෙකක් තිබේ:

CASE 1: සුදු තිරය> අස්ථිර වෙබ් අඩවිය> මෝස්තර සහිත වෙබ් අඩවිය> අන්තර්ක්‍රියා> ශෛලීය හා අන්තර්ක්‍රියාකාරී වෙබ් අඩවිය

CASE 2: සුදු තිරය> අස්ථායී වෙබ් අඩවිය> අන්තර්ක්‍රියා> ශෛලීය වෙබ් අඩවිය> මෝස්තර සහ අන්තර්ක්‍රියාකාරී වෙබ් අඩවිය


මට අවංකවම සිතාගත නොහැකිය. මන්දගාමී අන්තර්ජාල සම්බන්ධතා භාවිතා කරන අමුත්තන්ට අස්ථාවර වෙබ් අඩවියකට මුහුණ දීමට සිදුවනු ඇති අතර, එය ජාවාස්ක්‍රිප්ට් භාවිතයෙන් එය සමඟ අන්තර් ක්‍රියා කිරීමට ඉඩ සලසයි (එය දැනටමත් පටවා ඇති බැවින්). තවද, අස්ථායී වෙබ් අඩවියක් බැලීමට ගත කරන කාලය මේ ආකාරයෙන් උපරිම කරනු ඇත. කිසිවෙකුට එය අවශ්‍ය වන්නේ ඇයි?

එය jQuery පවසන පරිදි වඩා හොඳින් ක්‍රියා කරයි

"CSS ශෛලියේ ගුණාංගවල වටිනාකම මත රඳා පවතින ස්ක්‍රිප්ට් භාවිතා කරන විට, ස්ක්‍රිප්ට් සඳහන් කිරීමට පෙර බාහිර මෝස්තර පත්‍රිකා හෝ ශෛලමය අංග ඇතුළත් කිරීම වැදගත් වේ".

ලිපිගොනු වැරදි අනුපිළිවෙලට පටවන විට (පළමුව JS, පසුව CSS), CSS ලිපිගොනු වල ඇති ගුණාංග මත රඳා පවතින ඕනෑම ජාවාස්ක්‍රිප්ට් කේතයක් (උදාහරණයක් ලෙස div හි පළල හෝ උස) නිවැරදිව පටවනු නොලැබේ. වැරදි පැටවීමේ අනුපිළිවෙල සමඟ, නිවැරදි ගුණාංග ජාවාස්ක්‍රිප්ට් වෙත 'සමහර විට' දන්නා බව පෙනේ (සමහර විට මෙය ධාවන තත්වයක් නිසා විය හැකිද?). භාවිතා කරන බ්‍රව්සරය මත පදනම්ව මෙම බලපෑම විශාල හෝ කුඩා ලෙස පෙනේ.


2
ජාවාස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමට පෙර සියලුම සීඑස්එස් පටවා ඇති බවට සහතික වීම ගැන ඔබ යන්නේ කෙසේද? ඔබට පුලුවන්ද? හෝ මෝස්තරය අනිවාර්යයෙන්ම පටවා නොතිබිය හැකි තත්වයක් සමඟ කටයුතු කිරීමට තරම් ඔබේ ජාවාස්ක්‍රිප්ට් ශක්තිමත් විය යුතුද?
ජොනියෝ

On ජොනියෝ ඔබේ ජේඑස් වෙත යැපීමක් තිබේ නම්, ඔබ එම යැපීම පැහැදිලි කළ යුතුය. එසේ නොමැතිනම්, ඔබට සෑම විටම දුර්ලභ කාල ගැටළු ඇති වේ. ES6 මොඩියුලයන් එය සිදු කිරීම සඳහා හොඳ ක්‍රමයකි, නමුත් භාවිතා කළ හැකි පුස්තකාල බොහොමයක් තිබේ.
kmkemp

26

ඔබගේ පරීක්ෂණ ඔබගේ පුද්ගලික පරිගණකයේ හෝ වෙබ් සේවාදායකයක සිදු කර තිබේද? එය හිස් පිටුවක් ද, නැතහොත් එය රූප, දත්ත සමුදායන් යනාදිය සහිත සංකීර්ණ මාර්ගගත පද්ධතියක් ද? ඔබගේ ස්ක්‍රිප්ට් සරල හෝවර් සිදුවීම් ක්‍රියාවක් සිදු කරනවාද, නැතහොත් ඒවා ඔබේ වෙබ් අඩවිය පරිශීලකයා සමඟ ක්‍රියා කරන ආකාරය හා ක්‍රියා කරන ආකාරය පිළිබඳ මූලික අංගයක්ද? මෙහිදී සලකා බැලිය යුතු කරුණු කිහිපයක් ඇති අතර, ඔබ ඉහළ මට්ටමේ වෙබ් සංවර්ධනයකට පිවිසෙන විට මෙම නිර්දේශවල අදාළත්වය සෑම විටම පාහේ නීති බවට පත්වේ.

“මුදුනේ ස්ටයිල් ෂීට් සහ පහළින් ස්ක්‍රිප්ට්” රීතියේ පරමාර්ථය නම්, පොදුවේ ගත් කල, එය ප්‍රශස්ත ප්‍රගතිශීලී විදැහුම්කරණයක් ලබා ගැනීමට ඇති හොඳම ක්‍රමය වන අතර එය පරිශීලක අත්දැකීමට අතිශයින් වැදගත් වේ.

අනෙක් සියල්ල පසෙකට දමන්න: ඔබේ පරීක්ෂණය වලංගු යැයි උපකල්පනය කිරීම සහ ඔබ ජනප්‍රිය නීතිවලට පටහැනිව ප්‍රති results ල ලබා දෙනවා නම් එය පුදුමයක් නොවේ. සෑම වෙබ් අඩවියක්ම (සහ සියල්ල පරිශීලකයාගේ තිරය මත දිස්වීමට අවශ්‍ය සියල්ල) වෙනස් වන අතර අන්තර්ජාලය නිරන්තරයෙන් විකාශනය වෙමින් පවතී.


1
මම ඔබට පැහැදිලි ලෙස උපයන කාරණය අගය කරනවා, නමුත් විශ්රාම වැටුප් ඔබ සමඟ මෙම නියෝගය වෙනස් වන විට සිදු වන දෙය ගැන කතා කරන දෙකම ඉහළ, වත් පතුලේ.
nnnnnn

1
මේ අනුව, "[ඔහුගේ] පරීක්ෂණය වලංගු යැයි උපකල්පනය කිරීම."
skippr

21

මම වෙනත් හේතුවක් නිසා ජාවාස්ක්‍රිප්ට් වලට පෙර CSS ගොනු ඇතුළත් කරමි.

මගේ ජාවාස්ක්‍රිප්ටයට යම් පිටු මූලද්‍රව්‍යයක ගතික ප්‍රමාණකරණය කිරීමට අවශ්‍ය නම් (CSS පිටුපස පිටුපස ප්‍රධාන තැනක් වන විට), එවිට JS වේගයෙන් ධාවනය වූ පසු CSS පැටවීම ධාවන තත්වයන්ට තුඩු දිය හැකිය. මෝස්තරයන් අවසානයේදී ආරම්භ වන විට එය අමුතු ලෙස පෙනේ. මා කලින් CSS පටවා ඇත්නම්, අපේක්ෂිත අනුපිළිවෙලින් දේවල් ක්‍රියාත්මක වන බවට මට සහතික විය හැකි අතර අවසාන පිරිසැලසුම මට අවශ්‍ය දේ වේ.


2
මෙය සමහර බ්‍රව්සරයේ එක් දිනක් බිඳී යනු ඇත. මම අනුමාන කරන්නේ නැහැ.
jcolebrand

1
jcolebrand: ඔව්, මම හිතන්නේ මම මෙය ලියන විට ප්‍රමාණවත් තරම් කෝපි පානය කර නැහැ. (ආපසු හැරී බලන කල්හි, මම ඔබට ගතික sizing කරන්න අවශ්ය නම්, වැදගත් දේවල් පමණක් CSS ගතික පැටවීම වැලැක්වීමට හා domReady අවස්ථාවට තුල JS දමා අනුමාන)
hugomg

ස්ක්‍රිප්ට් කිසිදු සංදර්ශකයක් වෙනස් නොකළ යුතුය. ඒක තමයි CSS රැකියාව. HTML = අන්තර්ගතය, CSS = අන්තර්ගතය පෙන්වන්නේ කෙසේද, javascript අන්තර්ගතය ගතිකව වෙනස් කරයි. JS ක්‍රියා කළ යුත්තේ DOMContentLoaded වෙඩි තැබීමෙන් පසුව (හෝ කිහිපයක්) පමණි.
brunoais

un බ un නෝයිස්: සමහර පිරිසැලසුම් නිර්මාණය කළ හැක්කේ ජාවාස්ක්‍රිප්ට් සමඟ පමණි. නිදසුනක් ලෙස, ගතිකව ප්‍රතිනිර්මාණය කිරීමට අවශ්‍ය ඕනෑම දෙයක් ජාවාස්ක්‍රිප්ට් හරහා සෑදිය යුතු අතර සමහර දේවල් (ප්‍රමාණය 100% - 20px වැනි) පැරණි බ්‍රව්සර්වල අතේ ගෙන යා හැකි ලෙස ජාවාස්ක්‍රිප්ට් අවශ්‍ය වේ.
hugomg

@missingno එවැනි අවස්ථාවන්හිදී, කෙසේ හෝ DOMContentLoaded සිද්ධිය භාවිතා කරන්න. නමුත් ඔබ අදහස් කරන දේ මට තේරෙනවා. (මෝඩ අයිඊ!)
brunoais

10

ජාවාස්ක්‍රිප්ට් වලට පෙර CSS ඇතුළත් කිරීමේ නිර්දේශය අවලංගුද?

ඔබ එය හුදෙක් නිර්දේශයක් ලෙස සලකන්නේ නම් නොවේ. නමුත් ඔබ එය දැඩි හා වේගවත් රීතියක් ලෙස සලකන්නේ නම්, ඔව්, එය අවලංගුය.

Https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded වෙතින්

ස්ටයිල් ෂීට් මඟින් ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම අවහිර කරයි, එබැවින් ඔබට පිටුවක් <script> තිබේ <link rel="stylesheet" ...>නම් පිටුවක් විග්‍රහ කිරීම අවසන් නොවනු ඇත - සහ ස්ටයිල් ෂීට් පටවන තුරු DOMContentLoaded වෙඩි තබන්නේ නැත.

සෑම ස්ක්‍රිප්ට් එකක්ම රඳා පවතින්නේ කුමක් දැයි ඔබ දැනගත යුතු බවත්, නිවැරදි සිදුවීම අවසන් වන තෙක් ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම ප්‍රමාද වන බවට වග බලා ගත යුතු බවත් පෙනේ. ස්ක්‍රිප්ට් එක රඳා පවතින්නේ ඩොම් මත පමණක් නම්, එය නැවත ඔන්ඩ්‍රොමී / ඩොම්කොන්ටෙන්ට්ලෝඩ් වලින් ආරම්භ කළ හැකිය, එය පැටවිය යුතු රූප හෝ ස්ටයිල් ෂීට් මත රඳා පවතී නම්, මම ඉහත සඳහන නිවැරදිව කියවන්නේ නම්, එම කේතය ඔන්ලෝඩ් සිදුවීම තෙක් කල් දැමිය යුතුය.

එක් මේස් ප්‍රමාණයක් සියල්ලටම ගැළපේ යැයි මම නොසිතමි, ඒවා විකුණනු ලබන ආකාරය වුවද, එක් සපත්තු ප්‍රමාණයක් සියල්ලටම නොගැලපෙන බව මම දනිමි. පළමුව, මෝස්තර හෝ ස්ක්‍රිප්ට් පූරණය කිරීමට නිශ්චිත පිළිතුරක් ඇතැයි මම නොසිතමි. "විවේචනාත්මක මාවතේ" නොසිටීම නිසා කුමන අනුපිළිවෙලකට පැටවිය යුතුද සහ පසුව කල් දැමිය හැක්කේ කුමක් ද යන්න තීරණය කිරීමෙන් එය වඩාත් වැදගත් වේ.

පත්රය ලස්සන වන තුරු පරිශීලකයින්ට අන්තර් ක්‍රියා කිරීමේ හැකියාව ප්‍රමාද කිරීම වඩා හොඳ යැයි අදහස් දැක්වූ නිරීක්ෂකයා සමඟ කතා කිරීම. ඔබගෙන් බොහෝ දෙනෙක් එහි සිටින අතර ප්‍රතිවිරුද්ධ දේ දැනෙන ඔබේ සගයන්ට ඔබ කරදර කරයි. ඔවුන් යම් අරමුණක් ඉටු කර ගැනීම සඳහා වෙබ් අඩවියකට පැමිණ ඇති අතර, පැටවීම අවසන් කිරීමට වැදගත් නොවන දේවල් බලා සිටින අතරතුර වෙබ් අඩවියක් සමඟ අන්තර් ක්‍රියා කිරීමට ඇති හැකියාව ප්‍රමාද කිරීම ඉතා කලකිරීමට කරුණකි. මම කියන්නේ නැහැ ඔබ වැරදියි කියා, ඔබේ ප්‍රමුඛතාවය බෙදා නොගන්නා තවත් කන්ඩායමක් සිටින බව ඔබ දැන සිටිය යුතුයි.

මෙම ප්‍රශ්නය වෙබ් අඩවි වල ස්ථානගත කර ඇති සියලුම දැන්වීම් සඳහා විශේෂයෙන් අදාළ වේ. වෙබ් අඩවි කතුවරුන් දැන්වීම් අන්තර්ගතය සඳහා ස්ථානගත කිරීම් බෙදීම් කර, පැටවුම් සිදුවීමක දැන්වීම් එන්නත් කිරීමට පෙර ඔවුන්ගේ වෙබ් අඩවිය පටවා අන්තර්ක්‍රියාකාරී බවට වග බලා ගත්තා නම් මම එයට කැමතියි. එසේ වුවද, එකවරම වෙනුවට අනුක්‍රමිකව පටවා ඇති දැන්වීම් දැකීමට මා කැමතිය, මන්ද ඒවා පුපුරා ගිය දැන්වීම් පටවන අතරතුර අඩවි අන්තර්ගතය අනුචලනය කිරීමට මට ඇති හැකියාව කෙරෙහි බලපෑම් කරයි. නමුත් එය එක් පුද්ගල දෘෂ්ටි කෝණයකි.

  • ඔබේ පරිශීලකයින් සහ ඔවුන් අගය කරන දේ දැන ගන්න.
  • ඔබේ පරිශීලකයින් සහ ඔවුන් භාවිතා කරන ගවේෂණ පරිසරය දැන ගන්න.
  • සෑම ගොනුවක්ම කරන්නේ කුමක්ද සහ එහි පූර්ව අවශ්‍යතා මොනවාදැයි දැන ගන්න. සෑම දෙයක්ම වැඩ කිරීම වේගවත් හා ලස්සන යන දෙකටම වඩා ප්‍රමුඛතාවය ගනී.
  • සංවර්ධනය කිරීමේදී ජාල කාල රේඛාව පෙන්වන මෙවලම් භාවිතා කරන්න.
  • ඔබගේ පරිශීලකයින් භාවිතා කරන සෑම පරිසරයකම පරීක්ෂා කරන්න. පරිශීලකයින්ගේ පරිසරය මත පදනම්ව පැටවීමේ අනුපිළිවෙල වෙනස් කිරීම සඳහා ගතිකව (සේවාදායක පැත්ත, පිටුව නිර්මාණය කිරීමේදී) අවශ්‍ය විය හැකිය.
  • සැකයක් ඇති විට, ඇණවුම වෙනස් කර නැවත මැනීම.
  • පැටවුම් අනුපිළිවෙලෙහි මෝස්තර හා ස්ක්‍රිප්ට් එකිනෙකට සම්බන්ධ කිරීම ප්‍රශස්ත වනු ඇත; සියල්ලම එක හා අනෙක් සියල්ලම නොවේ.
  • ලිපිගොනු පැටවීම සඳහා කුමන අනුපිළිවෙලක් පමණක් නොව කොතැනද යන්න අත්හදා බලන්න. හිස? ශරීරයේ? ශරීරයෙන් පසු? DOM සූදානම් / පටවා තිබේද? පටවා තිබේද?
  • පිටුව සමඟ අන්තර් ක්‍රියා කිරීමට පෙර පරිශීලකයා අත්විඳිය හැකි ශුද්ධ ප්‍රමාදය අඩු කිරීම සඳහා සුදුසු විට අසංක සහ විකල්ප කල්දමන්න. ඔවුන් උදව් කරනවාද, රිදවනවාද යන්න තීරණය කිරීමට පරීක්ෂා කරන්න.
  • ප්‍රශස්ත පැටවුම් අනුපිළිවෙල තක්සේරු කිරීමේදී සලකා බැලිය යුතු සෑම විටම වෙළඳ ලකුණු තිබේ. ලස්සන එදිරිව. ප්‍රතිචාරාත්මක එකක් වීම.

1
සම්බන්ධිත ලිපිය තවදුරටත් "ස්ටයිල්ෂීට් මඟින් ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම අවහිර කරයි" එය තවදුරටත් සත්‍ය නොවේද?
ග්‍රෙග්

Reg ග්‍රෙග් - එය තවමත් සත්‍යයකි. ස්ක්‍රිප්ට වලට DOM විමසීමට හැකිය. ශෛලීය ගුණාංග, එබැවින් ස්ටයිල් ෂීට් තවමත් ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම අවහිර කරයි. ඔවුන් හැකි තිර රචනය අවහිර නොවන පැටවීම , ඔවුන් ස්මාර්ට් කරන්නේ නම්, නමුත් ඔවුන් script.onLoad සිද්ධීන් අවහිර කරනු ලැබේ.
ජිමී බ්‍රෙක්-මැකී

10

යාවත්කාලීන කරන ලද්දේ 2017-12-16

OP හි පරීක්ෂණ ගැන මට විශ්වාසයක් නොතිබුණි. මම ටිකක් අත්හදා බැලීමට තීරණය කළ අතර සමහර මිථ්‍යාවන් බිඳ දැමුවෙමි.

සමමුහුර්ත <script src...>එය බාගත කර ක්‍රියාත්මක කරන තෙක් එයට පහළින් ඇති සම්පත් බාගත කිරීම අවහිර කරනු ඇත

මෙය තවදුරටත් සත්‍ය නොවේ . ක්‍රෝම් 63 මගින් ජනනය කරන ලද දිය ඇල්ල දෙස බලන්න:

<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> ඊට පහළින් ස්ක්‍රිප්ට් බාගත කිරීම සහ ක්‍රියාත්මක කිරීම අවහිර නොකරනු ඇත

මෙය වැරදිය . ස්ටයිල් ෂීට් බාගත කිරීම අවහිර නොකරන නමුත් එය ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම අවහිර කරනු ඇත ( මෙහි සුළු පැහැදිලි කිරීමක් ). ක්‍රෝම් 63 මගින් ජනනය කරන ලද කාර්ය සාධන සටහන බලන්න:

<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>

Chrome dev මෙවලම් -> කාර්ය සාධනය


ඉහත කරුණු මතකයේ තබා ගනිමින් OP හි ප්‍රති results ල පහත පරිදි පැහැදිලි කළ හැකිය:

CSS පළමුව:

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

JS පළමු:

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

Document.write () යනු HTMLDOM සඳහා මෙතෙක් කර ඇති නරකම අදහස් වලින් එකකි.
brunoais

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 වන අතර එය අසාධාරණ නොවේ. ඔබේ සේවාදායකයා බටහිර දෙසින් සිටින විට පරිශීලකයා නැගෙනහිර වෙරළ තීරයේ සිටී. MTU අනිවාර්යයෙන්ම 10k නොවේ, එබැවින් ඉදිරියට සහ පසුපසට ගමන් කිහිපයක් ඇත. ඔබගේ පිටුව සහ මෝස්තර පත්‍ර ලබා ගැනීමට තත්පර 1/2 ක් ගතවනු ඇත. සාමාන්‍යයෙන් (මට නම්) ජාවාස්ක්‍රිප්ට් (jquery ප්ලගිනය හරහා සහ එවැනි) CSS වලට වඩා වැඩිය. ඔබගේ අන්තර්ජාල සම්බන්ධතාවය පිටුවේ මැදට වැටෙන විට කුමක් සිදුවේද යන්න නොසලකා හැරීමට ඉඩ දෙයි (එය ඉඳහිට මට සිදු වන අතර CSS ලබා දෙන බව මම විශ්වාස කරමි, නමුත් මට 100% විශ්වාස නැත).

CSS හිසෙහි ඇති බැවින් එය ලබා ගැනීම සඳහා අමතර සම්බන්ධතා තිබිය හැකි අතර එයින් අදහස් වන්නේ එය පිටුවට පෙර අවසන් කළ හැකි බවයි. කෙසේ වෙතත්, පිටුවේ ඉතිරි කොටස ගන්නා සහ ජාවාස්ක්‍රිප්ට් ලිපිගොනු (එය තවත් බයිට් ගණනාවකි) පිටුව අස්ථායි වන අතර එමඟින් වෙබ් අඩවිය / සම්බන්ධතාවය මන්දගාමී වේ.

ජාවාස්ක්‍රිප්ට් කේතය බාගත කිරීමට ගතවන කාලය සීඑස්එස් අවසන් වන තුරු ජේඑස් පරිවර්තකය ආරම්භ කිරීම ප්‍රතික්ෂේප කරන්නේ නම්, විශේෂයෙන් සේවාදායකයා දුරින් සීඑස්එස් කාලය අඩු කරන විට වෙබ් අඩවිය ලස්සන නොවන බව පෙනේ.

එය කුඩා ප්‍රශස්තිකරණයකි නමුත් එයට හේතුව එයයි.


1
සේවාදායකය නැගෙනහිර වෙරළ තීරයේ ඇත, fwiw. ඔවුන් දැන් සීඩීඑන් එකක් භාවිතා කරන බව ඔබ ද නොදැන සිටිති.
jcolebrand

3

මෙන්න ඉහත සියලුම ප්‍රධාන පිළිතුරු වල සාරාංශයකි (හෝ පසුව පහතින් :)

නවීන බ්‍රව්සර් සඳහා, ඔබ කැමති තැනක css දමන්න. ඔවුන් ඔබේ html ගොනුව විශ්ලේෂණය කරනු ඇත (ඒවා සමපේක්ෂන විග්‍රහ කිරීම ලෙස හැඳින්වේ ) සහ html විග්‍රහයට සමාන්තරව css බාගත කිරීම ආරම්භ කරයි.

පැරණි බ්‍රව්සර් සඳහා සීඑස්එස් ඉහළට දමන්න (ඔබට පළමුව නිරුවත් නමුත් අන්තර්ක්‍රියාකාරී පිටුවක් පෙන්වීමට අවශ්‍ය නැතිනම්).

සියලුම බ්‍රව්සර් සඳහා, ජාවාස්ක්‍රිප්ට් හැකි තරම් දුරට පිටුවේ තබන්න, මන්ද එය ඔබගේ HTML විග්‍රහ කිරීම නවත්වනු ඇත. වඩාත් සුදුසු, එය අසමමුහුර්තව බාගත කරන්න (එනම්, අජැක්ස් ඇමතුම)

ජාවාස්ක්‍රිප්ට් වලට මුල් තැන දීම (CSS වලට මුල් තැන දීමේ සම්ප්‍රදායික ප්‍ර wisdom ාවට පටහැනිව) වඩා හොඳ කාර්ය සාධනයක් ලබා දෙන නමුත් ඒ සඳහා කිසිදු තාර්කික තර්කනයක් නොමැති අතර පුළුල් ලෙස අදාළ වන ආකාරය පිළිබඳ වලංගු භාවයක් නොමැති බැවින් යම් සිද්ධියක් සඳහා පර්යේෂණාත්මක ප්‍රති results ල ඇත. දැනට එය නොසලකා හරින්න.

එබැවින්, ප්රශ්නයට පිළිතුරු දීමට: ඔව්. නවීන බ්‍රව්සර් සඳහා JS ට පෙර CSS ඇතුළත් කිරීමේ නිර්දේශය අවලංගුය. ඔබ කැමති තැනක CSS දමා, හැකි තරම් JS අවසානය දක්වා තබන්න.


ජාවාස්ක්‍රිප්ට් ස්ක්‍රිප්ට් ශීර්ෂ ටැගයේ තැබීමට සහ CSS ට පෙර පවා භාවිතා කිරීමේ එක් අවස්ථාවක් වන්නේ වෙබ්අප් වල මෑත අඳුරු / සැහැල්ලු මාදිලියේ ප්‍රවණතාව වැනි බ්‍රව්සරයට කලින් දැනගත නොහැකි මෝස්තර නිරූපණය කිරීමයි. එය කුඩා පිටපතක් විය යුතු අතර එය සැසිය කියවීම සඳහා වන අතර පසුව පරිශීලක සැසිය මත පදනම්ව ශෛලිය (css විචල්‍යයන් හෝ වෙනත් ක්‍රම) සැකසිය යුතුය. ස්ක්‍රිප්ට් ශෛලිය සැකසීමට පෙර පෙරනිමි විලාසය විදැහුම් කිරීම වළක්වයි.
කාලෙබ් ටේලර්

1

ස්ටීව් සවුඩර්ස් දැනටමත් නිශ්චිත පිළිතුරක් ලබා දී ඇති නමුත් ...

සෑම්ගේ මුල් පරීක්ෂණය සහ ජොෂ් එය නැවත කිරීම යන දෙකෙහිම ගැටලුවක් තිබේදැයි මම කල්පනා කරමි.

මෙම පරීක්ෂණ දෙකම අඩු ප්‍රමාද සම්බන්ධතා මත සිදු කර ඇති බව පෙනේ, එහිදී TCP සම්බන්ධතාවය සැකසීමේදී සුළු පිරිවැයක් දැරීමට සිදුවේ.

මෙය පරීක්ෂණයේ ප්‍රති result ලයට බලපාන්නේ කෙසේද යන්න මට විශ්වාස නැත. සාමාන්‍ය ප්‍රමාද සම්බන්ධතාවයක් හරහා පරීක්ෂණ සඳහා දිය ඇලි බැලීමට මට අවශ්‍ය නමුත් ...

බාගත කළ පළමු ගොනුවට html පිටුව සඳහා සම්බන්ධතාවය ලබා ගත යුතු අතර, බාගත කළ දෙවන ගොනුවට නව සම්බන්ධතාවය ලැබෙනු ඇත. (මුල් වෙනස් කිරීම් ගතිකව වෙනස් කරයි, නමුත් එය මෙහි සිදු නොකෙරේ)

නව බ්‍රව්සර් වලදී දෙවන ටී.සී.පී. සම්බන්ධතාවය සමපේක්ෂනාත්මකව විවෘත වන අතර එමඟින් සම්බන්ධතාවය ඉහළින් අඩු වේ / ඉවතට යයි, පැරණි බ්‍රව්සර් වල මෙය සත්‍ය නොවන අතර දෙවන සම්බන්ධතාවය විවෘත කිරීමේ පොදු කාර්යය ඇත.

පරීක්ෂණවල ප්‍රති come ලයට මෙය බලපාන්නේ කෙසේද / කෙසේද යන්න මට විශ්වාස නැත.


අනුගමනය නොකිරීම, ඔබට ඇදහිය නොහැකි තරම් දුර්ලභ නල මාර්ගයක් ඇත්නම් මිස සම්බන්ධතා සැකසුම අඩු කර ගැනීමට ඔබට අපහසුය ... අඩු ප්‍රමාදයකින් පරීක්ෂණය නැවත නැවතත් කළ යුතු බවට එකඟ වන්න
සෑම් කුංකුම

ඔබ මෙම දිය ඇල්ල දෙස බැලුවහොත්, ක්‍රෝම් අවශ්‍ය වීමට පෙර දෙවන සම්බන්ධතාවය විවෘත කරන්නේ කොතැනදැයි ඔබට දැකගත හැකිය webpagetest.org/result/… (IE9 ද එසේමය ) ... මම සිතුවේ අඩු ප්‍රමාදයට වඩා TCP අරමුණු සඳහා සාමාන්‍ය ප්‍රමාදයයි - කුමන ආකාරයේද ? පරීක්ෂණය සිදු කළේ පරිසරය තුළද?
ඇන්ඩි ඩේවිස්

2
Re: "ස්ටීව් සවුඩර්ස් දැනටමත් නිශ්චිත පිළිතුරක් ලබා දී ඇත නමුත් ..." වෙබ් පරිණාමය සමඟ ඇති දෙය නම් නිශ්චිත පිළිතුරු නොමැති වීමයි. :) ස්ක්‍රිප්ට් පූරණය කිරීමට ක්‍රම 3-4 ක් ඇති අතර දේවල් වෙනස් වේ. ඇත්ත වශයෙන්ම නිවැරදි අර්ථකථනය විය යුතුව තිබුණේ ස්ටීව් "සමමුහුර්ත ජාවාස්ක්‍රිප්ට් එකට පෙර CSS දමන්න" යැයි පැවසීම විය යුතුය. එසේ නොවුවහොත් එය සියලු පිටපත් සඳහා රීතියක් බැවින් සාමාන්‍යකරණය කිරීමෙන් මිනිසුන් එය වැරදියට
වටහා ගනී

ඔව්, නමුත් බොහෝ අය ස්ක්‍රිප්ට් සමමුහුර්තව ඇතුළත් කර ඇති නිසා ස්ටීව්ගේ උපදෙස් ආරම්භකයින්ට හොඳය.
ඇන්ඩි ඩේවිස්

1

මම හිතන්නේ මෙය සියලු අවස්ථාවන් සඳහා සත්‍ය නොවනු ඇත. Css සමාන්තරව බාගත කරන නමුත් js cant. එකම අවස්ථාව සඳහා සලකා බලන්න,

තනි CSS වෙනුවට, css ගොනු 2 ක් හෝ 3 ක් ගෙන මෙම ක්‍රම අත්හදා බලන්න,

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

මට විශ්වාසයි css..css..js අනෙක් සියල්ලන්ට වඩා හොඳ ප්‍රති result ල ලබා දෙනු ඇත.


0

නව බ්‍රව්සර් ඔවුන්ගේ ජාවාස්ක්‍රිප්ට් එන්ජින්, ඒවායේ පාර්සර් යනාදිය මත ක්‍රියා කර ඇති බව මතක තබා ගත යුතුය, <= IE8 වැනි පුරාණ බ්‍රව්සර්වල ඇති ගැටළු තවදුරටත් අදාළ නොවන ආකාරයට පොදු කේත සහ සලකුණු කිරීමේ ගැටළු ප්‍රශස්ත කිරීම. සලකුණු කිරීම සම්බන්ධයෙන් පමණක් නොව, ජාවාස්ක්‍රිප්ට් විචල්යයන්, මූලද්රව්ය තේරීම් යනාදිය භාවිතා කිරීම ද වේ. අනාගතයේ දී තාක්‍ෂණය දැකගත හැකිය.


කාර්ය සාධනය සැමවිටම ගැටළුවකි. පිරිවිතර අනුගමනය නොකරන බ්‍රව්සර් පවතින බව මම බොහෝ දුරට නොසලකා හරිමි. මම මගේ කේතය පිළියෙළ කරන්නේ පිරිවිතරයන් අනුගමනය කරන අය සම්පූර්ණ වේගයෙන් වැඩ කරන අතර අනෙක් ඒවා මා ක්‍රියා කරන ආකාරයටය. උදාහරණයක් ලෙස, එය IE8 හි ක්‍රියාත්මක වන්නේ නම්, සියල්ල හරි.
brunoais

0

2020 පිළිතුර: බොහෝ විට එය වැදගත් නොවේ

මෙහි ඇති හොඳම පිළිතුර 2012 සිට බැවින් මා විසින්ම පරීක්ෂා කිරීමට තීරණය කළෙමි. ඇන්ඩ්‍රොයිඩ් සඳහා ක්‍රෝම් හි, ජේඑස් සහ සීඑස්එස් සම්පත් සමාන්තරව බාගත කර ඇති අතර පිටු විදැහුම්කරණ වේගයෙහි වෙනසක් මට හඳුනාගත නොහැකි විය.

මම මගේ බ්ලොග් අඩවියේ වඩාත් සවිස්තරාත්මක ලිවීමක් ඇතුළත් කළෙමි


-5

පුද්ගලිකව, මම එවැනි "ජන ප්‍ර .ාවට" වැඩි අවධානයක් යොමු නොකරමි. අතීතයේ සත්‍ය වූ දේ දැන් සත්‍ය නොවිය හැකිය. මම පිටුව වෙබ් අර්ථකථනය කිරීමට අදාළ සියලු මෙහෙයුම් හා විදැහුම් සම්පූර්ණයෙන්ම අසමමිතික බව උපකල්පනය ඇත (යමක් "තර්ජනයක්" සහ විවිධ නූල් විසිනි කළ හැකි බව දෙකක් සම්පූර්ණයෙන්ම වෙනස් දේවල් "එය මත ක්රියාකරන" ආදිය ), සහ ඕනෑම අවස්ථාවක ඔබගේ පාලනයෙන් හෝ ඔබගේ සැලකිල්ලෙන් ඔබ්බට.

බාහිර පිටපත් සඳහා වන ඕනෑම සඳහනක් සමඟ මම CSS යොමු කිරීම් ලේඛනයේ "හිස" කොටසේ තබමි. (සමහර ස්ක්‍රිප්ට් ශරීරයේ තැන්පත් කරන ලෙස ඉල්ලා සිටිය හැකි අතර එසේ නම් ඒවා බැඳී සිටින්න.)

ඉන් ඔබ්බට ... "මෙය / එම බ්‍රව්සරයේ වඩා වේගවත් / මන්දගාමී බවක් පෙනේ" යැයි ඔබ නිරීක්ෂණය කරන්නේ නම්, මෙම නිරීක්‍ෂණය සිත්ගන්නාසුළු නමුත් අදාළ නොවන කුතුහලයක් ලෙස සලකන අතර එය ඔබේ සැලසුම් තීරණ වලට බලපෑම් කිරීමට ඉඩ නොදෙන්න. බොහෝ දේ වේගයෙන් වෙනස් වේ. ( ෆයර්ෆොක්ස් කණ්ඩායම ඔවුන්ගේ නිෂ්පාදනයේ තවත් අතුරු නිකුතුවක් ඉදිරිපත් කිරීමට පෙර මිනිත්තු කීයක් ගතවේද යන්න පිළිබඳව ඕනෑම කෙනෙකුට ඔට්ටු තැබීමට අවශ්‍යද ? ඔව්, මමත් නැත.)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.