HTML සලකුණු කිරීමේදී <ස්ක්‍රිප්ට්> ටැග් තැබිය යුත්තේ කොතැනින්ද?


1507

ජාවාස්ක්‍රිප්ට් HTML ලේඛනයකට කාවැද්දීමේදී, <script>ටැග් තැබීමට සහ ජාවාස්ක්‍රිප්ට් ඇතුළත් කිරීමට සුදුසු ස්ථානය කොහිද ? මට මතකයි ඔබ මේවා <head>කොටසේ තැබිය යුතු නැති බව , නමුත් කොටසේ ආරම්භයේ තැබීම <body>ද නරක ය, මන්ද යත් පිටුව සම්පූර්ණයෙන්ම විදහා දැක්වීමට පෙර (හෝ එවැනි දෙයක්) ජාවාස්ක්‍රිප්ට් විග්‍රහ කිරීමට සිදුවනු ඇත. මේ හැර පෙනේ අවසන් කිරීම <body>සඳහා තාර්තික ස්ථානයක් ලෙස කොටස <script>ටැග්.

ඒ නිසා, කොහෙද වේ පෙරළා දමා හරි තැන <script>ටැග්?

(මෙම ප්රශ්නය යොමු මේ ප්රශ්නය එය JavaScript ඇමතුම් ශ්රිතයක් ඒකකයෙන් ඉවත් කළ යුතු බව යෝජනා කරන ලදී, <a>ටැග් කිරීමට <script>ටැග්. මම විශේෂයෙන් jQuery භාවිතා කරනවා, නමුත් වඩා පොදු පිළිතුරු ද සුදුසු වේ.)


1
ඔබ සරල විසඳුමක් සොයන අතර ඔබ ජෙකිල් වැනි සේවාදායක පැති උත්පාදක යන්ත්රයක් භාවිතා කරන්නේ නම්, ඒ වෙනුවට ස්ක්‍රිප්ට් ඇතුළත් කිරීමට මම නිර්දේශ කරමි. ගොඩක් සරලයි!
cregox

Answers:


1889

බ්‍රව්සරයක් <script>ටැගයක් සහිත වෙබ් අඩවියක් පටවන විට සිදු වන්නේ කුමක්ද :

  1. HTML පිටුව ලබා ගන්න (උදා: index.html)
  2. HTML විග්‍රහ කිරීම ආරම්භ කරන්න
  3. <script>බාහිර ස්ක්‍රිප්ට් ගොනුවක් යොමු කරන ටැගයක් විග්‍රහකයාට හමු වේ.
  4. බ්‍රව්සරය ස්ක්‍රිප්ට් ගොනුව ඉල්ලා සිටී. මේ අතර, ඔබේ පිටුවෙහි අනෙක් HTML විග්‍රහ කිරීම විග්‍රහ කරන්නා අවහිර කරයි.
  5. ටික වේලාවකට පසු ස්ක්‍රිප්ට් බාගත කර පසුව ක්‍රියාත්මක කරනු ලැබේ.
  6. HTML ලේඛනයේ ඉතිරි කොටස විග්‍රහ කරන්නා දිගටම විග්‍රහ කරයි.

පියවර # 4 නරක පරිශීලක අත්දැකීමක් ඇති කරයි. ඔබ සියලු ස්ක්‍රිප්ට් බාගත කරන තෙක් ඔබේ වෙබ් අඩවිය පැටවීම නවත්වයි. පරිශීලකයින් වෛර කරන එක් දෙයක් තිබේ නම් එය වෙබ් අඩවියක් පූරණය වන තෙක් බලා සිටී.

මෙය පවා සිදුවන්නේ ඇයි?

ඕනෑම ස්ක්‍රිප්ටයකට තමන්ගේම HTML හරහා document.write()හෝ වෙනත් DOM හැසිරවීම් ඇතුළත් කළ හැකිය . මෙයින් ගම්‍ය වන්නේ, ලේඛනයේ ඉතිරි කොටස ආරක්ෂිතව විග්‍රහ කිරීමට පෙර, පිටපත බාගත කර ක්‍රියාත්මක කරන තෙක් විග්‍රහකයාට බලා සිටිය යුතු බවයි. සියල්ලට පසු, ස්ක්‍රිප්ටයට තමන්ගේම HTML ලේඛනයක් ඇතුළත් කිරීමට ඉඩ තිබුණි.

කෙසේ වෙතත්, බොහෝ ජාවාස්ක්‍රිප්ට් සංවර්ධකයින් ලේඛනය පූරණය වන විට තවදුරටත් DOM හසුරුවන්නේ නැත . ඒ වෙනුවට, ලේඛනය වෙනස් කිරීමට පෙර එය පටවන තුරු ඔවුන් බලා සිටී. උදාහරණයක් වශයෙන්:

<!-- index.html -->
<html>
    <head>
        <title>My Page</title>
        <script src="my-script.js"></script>
    </head>
    <body>
        <div id="user-greeting">Welcome back, user</div>
    </body>
</html>

ජාවාස්ක්‍රිප්ට්:

// my-script.js
document.addEventListener("DOMContentLoaded", function() { 
    // this function runs when the DOM is ready, i.e. when the document has been parsed
    document.getElementById("user-greeting").textContent = "Welcome back, Bart";
});

ඔබගේ බ්‍රව්සරය නොදන්නා නිසා my-script.js ලේඛනය බාගත කර ක්‍රියාත්මක කරන තුරු එය වෙනස් කිරීමට යන්නේ නැත, විග්‍රහකය විග්‍රහ කිරීම නවත්වයි.

පැරණි නිර්දේශය

මෙම ගැටළුව විසඳීම සඳහා පැරණි ප්‍රවේශය <script>වූයේ ඔබේ පතුලේ ටැග් තැබීමයි <body>, මන්දයත් මෙය අවසානය දක්වාම විග්‍රහකය අවහිර නොකරන බව සහතික කරයි.

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

ප්‍රශස්ත විසඳුමක දී, බ්‍රව්සරය හැකි ඉක්මනින් ඔබගේ ස්ක්‍රිප්ට් බාගත කිරීම ආරම්භ කරන අතරම ඔබේ ලේඛනයේ ඉතිරි කොටස් විග්‍රහ කරයි.

නූතන ප්රවේශය

අද, බ්‍රව්සර් ස්ක්‍රිප්ට් වල asyncසහ deferගුණාංග වලට සහය දක්වයි. මෙම ගුණාංග බ්‍රව්සරයට පවසන්නේ ස්ක්‍රිප්ට් බාගත කරන අතරතුර දිගටම විග්‍රහ කිරීම ආරක්ෂිත බවයි.

අසින්ක්

<script src="path/to/script1.js" async></script>
<script src="path/to/script2.js" async></script>

අසින්ක් ගුණාංගය සහිත ස්ක්‍රිප්ට් අසමමුහුර්තව ක්‍රියාත්මක වේ. මෙයින් අදහස් කරන්නේ ස්ක්‍රිප්ට් එක බාගත කළ විගසම බ්‍රව්සරය අවහිර නොකර ක්‍රියාත්මක වන බවයි.
මෙයින් ගම්‍ය වන්නේ ස්ක්‍රිප්ට් 2 ස්ක්‍රිප්ට් 1 ට පෙර බාගත කර ක්‍රියාත්මක කළ හැකි බවයි.

Http://caniuse.com/#feat=script-async ට අනුව , සියලුම බ්‍රව්සර් වලින් 97.78% ක් මේ සඳහා සහය දක්වයි.

කල් දමන්න

<script src="path/to/script1.js" defer></script>
<script src="path/to/script2.js" defer></script>

විලම්බිත ගුණාංගය සහිත ස්ක්‍රිප්ට් පිළිවෙලට ක්‍රියාත්මක වේ (එනම් පළමු ස්ක්‍රිප්ට් 1, පසුව ස්ක්‍රිප්ට් 2). මෙය ද බ්‍රව්සරය අවහිර නොකරයි.

අසින්ක් ස්ක්‍රිප්ට් මෙන් නොව, විස්තාරණ ස්ක්‍රිප්ට් ක්‍රියාත්මක කරනු ලබන්නේ සම්පූර්ණ ලේඛනය පූරණය කිරීමෙන් පසුව පමණි.

Http://caniuse.com/#feat=script-defer ට අනුව , සියලුම බ්‍රව්සර් වලින් 97.79% ක් මේ සඳහා සහය දක්වයි. 98.06% ක් අවම වශයෙන් අර්ධ වශයෙන් එයට සහාය දක්වයි.

බ්‍රව්සරයේ ගැළපුම පිළිබඳ වැදගත් සටහනක්: සමහර අවස්ථාවන්හිදී IE <= 9 විසින් කල් දැමූ ස්ක්‍රිප්ට් පිළිවෙලට ක්‍රියාත්මක කළ හැකිය. ඔබට එම බ්‍රව්සර් සඳහා සහය දැක්වීමට අවශ්‍ය නම් කරුණාකර මෙය පළමුව කියවන්න !

නිගමනය

වර්තමාන නවීනතම දෙය නම් ස්ක්‍රිප්ට් <head>ටැග් එකට දමා asyncහෝ deferගුණාංග භාවිතා කිරීමයි . මෙය ඔබගේ බ්‍රව්සරය අවහිර නොකර ඔබගේ ස්ක්‍රිප්ට් ඉක්මනින් බාගත කිරීමට ඉඩ දෙයි.

හොඳ දෙය නම්, ඔබේ වෙබ් අඩවිය තවමත් මෙම ගුණාංගවලට සහය නොදක්වන 2% බ්‍රව්සර් මත නිවැරදිව පැටවිය යුතු අතර අනෙක් 98% වේගවත් කිරීමයි.


64
මම කාටවත් ගූගල් පැහැදිලි කිරීමක් ... උපුටා පුදුම වුනා developers.google.com/speed/docs/insights/BlockingJS
කේසි Falk

6
DOM ස්පර්ශ කරන්නේ කුමක් ද යන්න සහ නොකළ යුතු දේ පිළිබඳව මට පැහැදිලි නැත. ඔබට පැහැදිලි කළ හැකිද? Jquery.js වැනි දෙයක් මත අසංක බරක් කිරීම ආරක්ෂිතද?
ඩග්

7
Og ඩග් උදාහරණයක් ලෙස document.writeක්‍රියාත්මක වන්නේ ඩොම් මත ය. ප්රශ්නය නොවේ නම් තිර රචනය ද dom ප්රාග්ධනය මෙහෙයවන, නමුත් විට එය කරන්නේ. domreadyසිදුවීම අවුලුවාලීමෙන් පසු සියලු ඩොම් හැසිරවීම් සිදුවන තාක් කල් , ඔබ හොඳින්. jQuery යනු පුස්තකාලයක් වන අතර, එසේ නොකළ යුතු හෝ නොකළ යුතු - ඩොම් එක තනිවම හසුරුවන්න.
බාර්ට්

24
මෙම පිළිතුර නොමඟ යවන සුළුය. නූතන බ්‍රව්සර් HTML වලට බලපාන සමමුහුර්ත ස්ක්‍රිප්ට් ටැගයකට ළඟා වූ විට ඒවා විග්‍රහ කිරීම නවත්වන්නේ නැත, ඒවා විදැහුම්කරණය / ක්‍රියාත්මක කිරීම නවත්වයි, සහ වෙනත් සම්පත් බාගත කිරීම ආරම්භ කිරීම සඳහා සුභවාදීව විග්‍රහ කිරීම දිගටම කරගෙන යනු ඇත.
ෆේබියෝ බෙල්ට්‍රාමිනි

42
asyncසහ deferගුණාංග කොතැනකවත් භාවිතා නොකරන්නේ ඇයි ? මම අදහස් කලේ, මම අන්තර්ජාලය HTML ප්රභව ගොඩක් දැක, මම කියන්නෙ නැහැ asyncසහ deferඕනෑම තැනක ගුණාංග. ...?
john cj

239

වසා ඇති ශරීර ටැගයට පෙර, සඳහන් කර ඇති පරිදි

http://developer.yahoo.com/performance/rules.html#js_bottom

ස්ක්‍රිප්ට් පතුලේ තබන්න

ස්ක්‍රිප්ට් නිසා ඇති වන ගැටළුව වන්නේ සමාන්තර බාගැනීම් අවහිර කිරීමයි. HTTP / 1.1 පිරිවිතරයන්ට අනුව බ්‍රව්සර් ධාරක නාමයකට සමාන්තරව සංරචක දෙකකට වඩා බාගත නොකරයි. ඔබ බහු සත්කාරක නාම වලින් ඔබේ පින්තූර සේවය කරන්නේ නම්, ඔබට සමාන්තරව බාගත කිරීම් දෙකකට වඩා ලබා ගත හැකිය. ස්ක්‍රිප්ට් එකක් බාගත කරන අතරතුර, බ්‍රව්සරය වෙනත් සත්කාරක නාම වලින් වුවද වෙනත් බාගැනීම් ආරම්භ නොකරයි.


7
සංකල්පය හා එහි පැහැදිලි කිරීම සමඟ එකඟ විය. නමුත් පරිශීලකයා පිටුව සමඟ සෙල්ලම් කිරීමට පටන් ගන්නේ නම් කුමක් සිදුවේද? මම AJAX ඩ්‍රොප් ඩවුන් එකක් ඇතැයි සිතමු, එය පිටුව පරිශීලකයාට දර්ශනය වූ පසු පැටවීම ආරම්භ කරනු ඇත, නමුත් එය පූරණය වන විට, පරිශීලකයා එය ක්ලික් කරයි! 'නොඉවසිලිමත්' පරිශීලකයෙක් පෝරමය ඉදිරිපත් කරන්නේ නම් කුමක් කළ යුතුද?
හේමන්ත් ටැංකිය

9
Er හර්මන්ට් පරණ අදහස් දැක්වීම, නමුත් ඔබට පෙරනිමියෙන් ක්ෂේත්‍ර අක්‍රීය කිරීමේ උපක්‍රමය කළ හැකි අතර DOM සම්පුර්ණයෙන්ම පටවන විට JS භාවිතා කර ඒවා සක්‍රීය කළ හැකිය. ෆේස්බුක් වර්තමානයේ කරන්නේ එයයි.
novato

2
මෙය තවමත් සමානදැයි පරීක්ෂා කිරීමට ක්‍රෝම් සමඟ මෙය පරීක්ෂා කරන්න. එය ය. ඔබගේ බ්‍රව්සර්වල පිටු පැටවීමේ වේලාවේ වෙනස්කම් ඔබට මෙහි පරීක්ෂා කළ හැකිය. stevesouders.com/cuzillion
cypher

46
මෙය හොඳම පුහුණුව නම්, තොග පිටාර ගැලීම ඔවුන්ගේ සියලු ස්ක්‍රිප්ට් ටැග් <head> හි ඇතුළත් කරන්නේ ඇයි? :-P
පිලිප්

10
සමහර අවස්ථාවලදී, විශේෂයෙන් අජැක්ස් බර අඩවි වල, හිස මත පැටවීම ඇත්ත වශයෙන්ම වේගවත් පැටවීමේ වේලාවන්ට හේතු විය හැක. බලන්න: encosia.com/dont-let-jquerys-document-ready-slow-you-down ("සජීවී ()" ශ්‍රිතය jquery වලින් ඉවත් කර ඇති බව සලකන්න, නමුත් ලිපිය තවමත් "on ()" හෝ " නියෝජිත "ශ්‍රිතය). Head හර්මන්ට් විසින් පෙන්වා දී ඇති පරිදි නිවැරදි හැසිරීම සහතික කිරීම සඳහා <head> පූරණය කිරීම අවශ්‍ය විය හැකිය. අවසාන, modernizr.com/docs එහි ස්ක්‍රිප්ට් එහි වෙබ් අඩවියේ විස්තර කර ඇති හේතුන් මත <head> හි තැබීමට නිර්දේශ කරයි.
නේතන්

79

අවහිර නොකරන ස්ක්‍රිප්ට් ටැග් ඕනෑම තැනක තැබිය හැකිය:

<script src="script.js" async></script>
<script src="script.js" defer></script>
<script src="script.js" async defer></script>
  • async ස්ක්‍රිප්ට් ලබා ගත හැකි ඉක්මනින් එය අසමමුහුර්තව ක්‍රියාත්මක වේ
  • defer ලේඛනය විග්‍රහ කිරීම අවසන් වූ විට ස්ක්‍රිප්ට් ක්‍රියාත්මක වේ
  • async defer අසින්ක් සඳහා සහය නොදක්වන්නේ නම් ස්ක්‍රිප්ට් නැවත කල්දැමීමේ හැසිරීමට වැටේ

එවැනි ස්ක්‍රිප්ට් අසමමුහුර්තව / ලේඛනය සූදානම් වූ පසු ක්‍රියාත්මක වේ, එයින් අදහස් කරන්නේ ඔබට මෙය කළ නොහැකි බවයි:

<script src="jquery.js" async></script>
<script>jQuery(something);</script>
<!--
  * might throw "jQuery is not defined" error
  * defer will not work either
-->

හෝ මෙය:

<script src="document.write(something).js" async></script>
<!--
  * might issue "cannot write into document from an asynchronous script" warning
  * defer will not work either
-->

හෝ මෙය:

<script src="jquery.js" async></script>
<script src="jQuery(something).js" async></script>
<!--
  * might throw "jQuery is not defined" error (no guarantee which script runs first)
  * defer will work in sane browsers
-->

හෝ මෙය:

<script src="document.getElementById(header).js" async></script>
<div id="header"></div>
<!--
  * might not locate #header (script could fire before parser looks at the next line)
  * defer will work in sane browsers
-->

අසමමුහුර්ත ස්ක්‍රිප්ට් මෙම වාසි ලබා දෙන බව පැවසීමෙන් පසු:

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

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


2
අද දිනට මෙය නිවැරදි පිළිතුරයි - මෙම ප්‍රවේශය භාවිතා කිරීමෙන් අදහස් කරන්නේ ඔබේ විජට් ස්වයංක්‍රීයව තබා ගැනීම පහසු වන අතර, විසිතුරු දේ කිරීමට අවශ්‍ය නොවන <head>තර්කනය ඇතුළත් වේ.
ඩැනියෙල් සොකොලොව්ස්කි

1
ඔබේ දෙවන කොටසෙහි සඳහන් කර ඇති පරිදි ඔබට භාවිතා කළ නොහැක්කේ ඇයිද යන්න asyncහෝ deferjQuery ඇතුළත් කරන විට මම ව්‍යාකූල වී සිටිමි : <script src="jquery.js" async></script>. එයට හේතුව ඔබට පැහැදිලි කළ හැකිද? පිළිගත් පිළිතුරකට අනුව කාර්ය සාධනය සඳහා අසින්ක් ටැගය තිබිය යුතු යැයි මම සිතුවෙමි - එබැවින් jQuery තවමත් පූරණය වන විට පවා මගේ පිටුව පූරණය කළ හැකිය]. ස්තූතියි!
elbowlobstercowstand

3
belbow 99% වාරයක් <script src=jquery.js>අනුගමනය කරන්නේ $(function(){ ... })පිටුවේ කොතැනක හෝ ඇති කොටස් ය. බ්‍රව්සරය එම කොටස් විග්‍රහ කිරීමට උත්සාහ කරන අවස්ථාවේ දී jQuery පටවනු ඇති බවට අසමමුහුර්ත පැටවීම සහතික නොවේ, එබැවින් එය මතු කරනු ඇත def නිර්වචනය කරන ලද දෝෂයක් නොවේ (jQuery හැඹිලියෙන් පටවා ඇත්නම් ඔබට දෝෂය නොලැබෙනු ඇත). JQuery අසමමුහුර්තව පැටවීම සහ සංරක්ෂණය කිරීම පිළිබඳ ප්‍රශ්නයකට මම පිළිතුරු දුනිමි $(function(){ ... }). මට එය සොයාගත හැකිදැයි මම බලමි
සල්මාන් ඒ

1
Al සල්මාන් ස්තූතියි! ඔව්, මම ඒ 99% ට වැටෙනවා. මට මුලින්ම jqueryපැටවීම සඳහා ලිබ් අවශ්‍යයි , පසුව මගේ ඉතිරි .jsපිටපත්. මම ප්රකාශ කරන විට asyncහෝ deferමත jquerylib තිර රචනය ටැගය, මගේ .jsපිටපත් වැඩ කරන්නේ නැහැ. මම හිතුවා ඒක $(function(){ ... })ආරක්ෂා කළා කියලා. වත්මන් විසඳුම: මම එකතු කරන්නේ නැහැ deferහෝ asyncමත jquerylib තිර රචනය, නමුත් මම එකතු කරන්නේ asyncමගේ පසු දින දක්වා පැවැත්වීමට .jsපිටපත්. සටහන: මම මේ කිසිවක් කිරීමට හේතුව ගූගල් පිටු වේගය සතුටු කිරීමයි. උදව් සඳහා නැවත ස්තූතියි! වෙනත් ඕනෑම උපදෙසක් සාදරයෙන් පිළිගනිමු. (හෝ ඔබගේ පෙර පිළිතුරට සබැඳියක්). :)
elbowlobstercowstand

@elbow බලන්න stackoverflow.com/a/21013975/87015 , එය ඔබට අදහසක් ලබා දෙන නමුත් සම්පූර්ණ විසඳුම නොවේ. ඔබට ඒ වෙනුවට "jquery async loader පුස්තකාල" සෙවිය හැකිය.
සල්මාන් ඒ

38

යාහූ විසින් ප්‍රවර්ධනය කරන ලද සම්මත උපදෙස් සුවිශේෂී කාර්ය සාධන කණ්ඩායම, <script>ටැග් ලේඛන ශරීරයේ අවසානයේ තැබීම නිසා ඔවුන් පිටුව විදැහුම් කිරීම අවහිර නොකරයි.

ගූගල් විශ්ලේෂණ ජාවාස්ක්‍රිප්ට් ගොනුවේ පැටවීමේ වේලාව පිළිබඳ මෙම පිළිතුරෙහි විස්තර කර ඇති පරිදි වඩා හොඳ කාර්ය සාධනයක් ලබා දෙන නව ප්‍රවේශයන් කිහිපයක් තිබේ :

ස්ටීව් සවුඩර්ස් (සේවාදායක පාර්ශවයේ කාර්ය සාධන විශේෂ expert) විසින් කරන ලද විශිෂ්ට විනිවිදක කිහිපයක් තිබේ :

  • බාහිර ජාවාස්ක්‍රිප්ට් ගොනු සමාන්තරව පැටවීම සඳහා විවිධ ක්‍රම
  • පැටවීමේ වේලාව සහ පිටු විදැහුම්කරණය කෙරෙහි ඒවායේ බලපෑම
  • බ්‍රව්සරය පෙන්වන කුමන ආකාරයේ “ප්‍රගතියේ” දර්ශක (උදා: තත්ව තීරුවේ 'පැටවීම', පැය පන්තියේ මූසික කර්සරය).

25

ඔබ JQuery භාවිතා කරන්නේ නම්, ඔබට ජාවාස්ක්‍රිප්ට් වඩාත් සුදුසු තැනක දමා $(document).ready()ඕනෑම කාර්යයක් කිරීමට පෙර දේවල් නිසි ලෙස පටවා ඇති බව සහතික කර ගන්න.

පැත්තක සටහනක: <head>කොටසේ ඇති මගේ සියලුම ස්ක්‍රිප්ට් ටැග් වලට මම කැමතියි එය පිරිසිදු ස්ථානය ලෙස පෙනේ.


14
ඔලුවේ ... එර්? <header>?
ඩෑන් ලග්

7
භාවිතා කිරීමෙන් $(document).ready()අදහස් කරන්නේ ඔබ කැමති ඕනෑම තැනක ඔබේ ජාවාස්ක්‍රිප්ට් තැබිය හැකි බව නොවේ - ඔබ තවමත් <script src=".../jquery.min.js">jQuery ඇතුළත් කළ තැනට පසුව එය තැබිය යුතුය , එබැවින් එය $පවතී.
රෝරි ඕ'කේන්

2
<head> කොටසේ ස්ක්‍රිප්ට් ටැග් තැබීම ප්‍රශස්ත නොවේ - මෙය ස්ක්‍රිප්ට් පූරණය වන තුරු පිටුවේ දෘශ්‍යමාන කොටස ප්‍රදර්ශනය කිරීම ප්‍රමාද කරයි.
සයිබර් මොන්ක්

නැත, an ඩෑන්, headerමූලද්‍රව්‍යයක් යනු HTML ලේඛන අන්තර්ගතයේ කොටසක් වන අතර bodyමූලද්‍රව්‍යයේ . The හිස ටැගය තුළ එක් හෝ වැඩි වාර ගණනක් සිදුවිය යුත්තේ ලේඛනයේ මෙටා-දත්ත සහ අන්තර්ගත නොවන දත්ත සඳහා ය. ඒ සමග, මෙම දින තුළ, ය deferහා asyncතිර රචනය ටැග් සඳහා කදිම තැනක්. headerමූලද්‍රව්‍යවල අඩංගු විය යුත්තේ එය අනුගමනය කරන ලේඛනයේ කොටස විස්තර කරන තොරතුරු පමණි.
මහාචාර්ය

1
RoProfK, ඩෑන් මීට වසර 4 කට පෙර මෙය පළ කරන විට මුල් සංස්කරණය නොකළ ප්‍රශ්නය ගැන සඳහන් කළේය. ඔබට පෙනෙන පරිදි, ප්‍රශ්නය වසරකට පසුව සංස්කරණය කරන ලදි.
kojow7

20

2019 දී නවීන ප්‍රවේශය වන්නේ ES6 මොඩියුල වර්ගයේ ස්ක්‍රිප්ට් භාවිතා කිරීමයි .

<script type="module" src="..."></script>

පෙරනිමියෙන්, මොඩියුලයන් අසමමුහුර්තව පටවා පරාජය කරනු ලැබේ. එනම් ඔබට ඒවා ඕනෑම තැනක තැබිය හැකි අතර ඒවා සමාන්තරව පටවා පිටුව පැටවීම අවසන් වූ විට ක්‍රියාත්මක වේ.

ස්ක්‍රිප්ටයක් සහ මොඩියුලයක් අතර ඇති වෙනස්කම් මෙහි විස්තර කෙරේ:

https://stackoverflow.com/a/53821485/731548

ස්ක්‍රිප්ටයකට සාපේක්ෂව මොඩියුලයක් ක්‍රියාත්මක කිරීම මෙහි විස්තර කෙරේ:

https://developers.google.com/web/fundamentals/primers/modules#defer

සහාය මෙහි දැක්වේ:

https://caniuse.com/#feat=es6-module


දැනුම පදනම් කර ගැනීමට හොඳ තොරතුරු
සාගර්

2
ඔබ ඔබේ දේශීය ගොනු පද්ධතියේ සේවාදායකයක් නොමැතිව දේවල් උත්සාහ කරන්නේ නම් මෙය ක්‍රියාත්මක නොවන බව සටහනක් පමණි. ක්‍රෝම් හි ඇති හෙයින්, ඔබේ ගොනු පද්ධතිය දෙකම එකම සම්භවයක් තිබුණද, HTML වෙතින් js පැටවීමට උත්සාහ කරන හරස් ප්‍රභව දෝෂයක් ඔබට ලැබෙනු ඇත.
hippietrail

11

ස්ක්‍රිප්ට් එක හිස් මූලද්‍රව්‍යය හැර වෙනත් තැනක තිබේ නම් XHTML වලංගු නොවේ. එය සෑම තැනකම විය හැකිය.

ඔබට jQuery වැනි දෙයක් සමඟ ක්‍රියාත්මක කිරීම කල් දැමිය හැකිය, එම නිසා එය ස්ථානගත කර ඇති තැනට කමක් නැත (විග්‍රහ කිරීමේදී කුඩා කාර්ය සාධනයක් හැර).


1
XHTML දැඩි හා සංක්‍රාන්ති යන දෙඅංශයේම ස්ක්‍රිප්ට් ටැග් සමඟ වලංගු වේ. ස්ටයිල් ටැග්ස් කෙසේ වෙතත් හිසෙහි පමණක් තිබිය හැකිය.
I.devries

11
<script src="myjs.js"></script>
</body>

ශරීරය වැසීමට පෙර හෝ HTML ගොනුවේ පහළින් ස්ක්‍රිප්ට් ටැගය සැමවිටම භාවිතා කළ යුතුය .

js ගොනුව පූරණය කිරීමට පෙර ඔබට පළමුව පිටුවේ අන්තර්ගතය දැකිය හැකිය .

අවශ්‍ය නම් මෙය පරීක්ෂා කරන්න: http://stevesouders.com/hpws/rule-js-bottom.php


2
මෙය ඇත්ත වශයෙන්ම ප්‍රශ්නයට පිළිතුරු සපයයි. මම කල්පනා කරමින් සිටියේ පළ කරන ලද සියලුම උදාහරණ කිසි විටෙකත් “පිටුවේ අවසානය” පිළිබඳ නිසි දෘශ්‍ය සන්දර්භය ලබා
කෙන් ඉන්ග්‍රම්

1
මෙම පිළිතුර ඉතා නොමඟ යවන අතර බොහෝ විට වැරදිය. ගූගල් සහ එම්ඩීඑන් හි ලිපි වලින් ඇඟවෙන්නේ සමමුහුර්ත ජේඑස් (මෙහි තත්වය මෙයයි) සෑම විටම DOM ඉදිකිරීම සහ විග්‍රහ කිරීම අවහිර කරන අතර එමඟින් පළමු විදැහුම ප්‍රමාද වනු ඇත. එමනිසා, ඔබේ JS ගොනුව සමමුහුර්තව පවතින තාක් කල් ඔබ HTML ලේඛනයේ කොතැනක තැබුවද යන්න නොසලකා JS ගොනුව ලබාගෙන ක්‍රියාත්මක වන තෙක් ඔබට පිටුවේ අන්තර්ගතය දැකිය නොහැක
Lingaraju EV

එය 2009 දී කරන ලද කරුණු ද සඳහන් කරන අතර තවදුරටත් අදාළ නොවේ.
toxaq

7

සාම්ප්‍රදායික (සහ පුළුල් ලෙස පිළිගත්) පිළිතුර “පතුලේ” ඇත, මන්ද එවිට ඕනෑම දෙයක් ක්‍රියාත්මක කිරීමට පෙර මුළු DOM පටවනු ලැබේ.

විවිධ හේතූන් මත, පිටු මත පැටවීමේ සිදුවීමක් සමඟ හිතාමතාම ක්‍රියාත්මක කිරීම ආරම්භ කිරීම සඳහා පවතින භාවිතයෙන් පටන් ගෙන විරුද්ධවාදීන් සිටිති.


7

මෙම පත් කිරීමට හොඳම ස්ථානය <script>ටැගය වසා ඉදිරියේ </body>ටැගය , ඒ නිසා, බා එය ලියවිල්ල තුළ html විග්රහ කළ කිරීමට බ්රව්සරය අවහිර නැත ක්රියාත්මක,

එය ම වාසි JS ගොනු බාහිර ඇත පැටවීම එය කරනු ඇත වැනි බ්රවුසර විසින් හැඹිලිගත හැකි සහ පිටුව ලෝඩ් වේගවත් , එය මෙම HTML හා JavaScript කේතය වෙන් හා වඩා හොඳ කේතය පදනම කළමනාකරණය කිරීමට උදව් .

නමුත් නවීන බ්රවුසර වැනි ෙවනත් ප්රශස්ත ක්රම සහාය asyncහා deferබාහිර පූරණය javascriptගොනු.

අසින්ක් සහ ඩිෆර්

සාමාන්‍යයෙන් HTML පිටු ක්‍රියාත්මක කිරීම ආරම්භ වන්නේ රේඛාවෙනි. බාහිර ජාවාස්ක්‍රිප්ට් අංගයක් හමු වූ විට, ජාවාස්ක්‍රිප්ට් බාගත කර ක්‍රියාත්මක කිරීමට සූදානම් වන තෙක් HTML විග්‍රහ කිරීම නතර වේ. මෙම සාමාන්‍ය පිටු ක්‍රියාත්මක කිරීම deferසහ asyncආරෝපණය භාවිතා කර වෙනස් කළ හැකිය .

Defer

කල්දැමීමේ ගුණාංගයක් භාවිතා කරන විට, ජාවාස්ක්‍රිප්ට් HTML විග්‍රහ කිරීම සමඟ සමාන්තරව බාගත කරනු ලැබේ, නමුත් එය ක්‍රියාත්මක වන්නේ සම්පූර්ණ HTML විග්‍රහ කිරීමෙන් පසුව පමණි.

<script src="/local-js-path/myScript.js" defer></script>

Async

අසින්ක් ගුණාංගය භාවිතා කරන විට, ස්ක්‍රිප්ට් එක හමු වූ විගසම ජාවාස්ක්‍රිප්ට් බාගත වන අතර බාගත කිරීමෙන් පසුව එය HTML විග්‍රහ කිරීම සමඟ සමමුහුර්තව (සමාන්තරව) ක්‍රියාත්මක වේ.

<script src="/local-js-path/myScript.js" async></script>

කුමන ගුණාංග භාවිතා කළ යුත්තේ කවදාද?

  • ඔබේ ස්ක්‍රිප්ට් වෙනත් ස්ක්‍රිප්ට් වලින් ස්වාධීන වන අතර මොඩියුලය නම්, භාවිතා කරන්න async.
  • ඔබ ස්ක්‍රිප්ට් 1 සහ ස්ක්‍රිප්ට් 2 සමඟ පටවන්නේ නම් async, දෙකම
    බාගත
    කර ලබා ගත හැකි වූ වහාම HTML විග්‍රහ කිරීම සමඟ සමාන්තරව ක්‍රියාත්මක වේ.
  • ඔබේ ස්ක්‍රිප්ට් වෙනත් ස්ක්‍රිප්ට් එකක් මත රඳා පවතී නම් ඒ deferදෙකම සඳහා භාවිතා කරන්න :
  • ස්ක්‍රිප්ට් 1 සහ ස්ක්‍රිප්ට් 2 එම අනුපිළිවෙලින් පටවන විට, ස්ක්‍රිප්ට් 1 deferපළමුව ක්‍රියාත්මක කිරීමට සහතික වේ,
  • ස්ක්‍රිප්ට් 1 සම්පුර්ණයෙන්ම ක්‍රියාත්මක කිරීමෙන් පසුව ස්ක්‍රිප්ට් 2 ක්‍රියාත්මක වේ.
  • ස්ක්‍රිප්ට් 2 ස්ක්‍රිප්ට් 1 මත රඳා පවතී නම් මෙය කළ යුතුය.
  • ඔබගේ ස්ක්‍රිප්ට් එක ප්‍රමාණවත් තරම් කුඩා නම් සහ වෙනත් ආකාරයේ ස්ක්‍රිප්ට් එකක් මත රඳා පවතී නම්, asyncකිසිදු ගුණාංගයකින් තොරව ඔබේ ස්ක්‍රිප්ට් භාවිතා කර එය සියලු asyncස්ක්‍රිප්ට වලට ඉහළින් තබන්න .

යොමුව: knowledgehills.com


3

රඳා පවතින්නේ, ඔබ ඔබේ පිටුව සැකසීමට අවශ්‍ය ස්ක්‍රිප්ට් එකක් පටවන්නේ නම් / ඔබේ පිටුවේ ක්‍රියා භාවිතා කරන්නේ නම් (බොත්තමක් ක්ලික් කිරීම වැනි) එවිට ඔබ එය ඉහළින් තැබීම වඩා හොඳය. ඔබේ මෝස්තරය 100% CSS නම් සහ බොත්තම් ක්‍රියා සඳහා ඔබට සියලු ආපසු හැරවීමේ විකල්ප තිබේ නම් ඔබට එය පතුලේ තැබිය හැකිය.

නැතහොත් හොඳම දෙය නම් (එය සැලකිලිමත් නොවන්නේ නම්) ඔබට මෝඩල් පැටවුම් පෙට්ටියක් සාදා ඔබේ පිටුවේ පහළින් ඔබේ ජාවාස්ක්‍රිප්ට් එක තබා ඔබේ ස්ක්‍රිප්ටයේ අවසාන පේළිය පටවන විට එය අතුරුදහන් කරවන්න. මේ ආකාරයෙන් ස්ක්‍රිප්ට් පූරණය වීමට පෙර පරිශීලකයින් ඔබේ පිටුවේ ක්‍රියා භාවිතා කිරීමෙන් වැළකී සිටිය හැකිය. නුසුදුසු මෝස්තරයෙන් වළකින්න.


3

වෙබ් අඩවියේ අන්තර්ගතය / මෝස්තර පළමුව පෙන්විය යුතු තැන අවසානයේ ස්ක්‍රිප්ට් ඇතුළත් කිරීම ප්‍රධාන වශයෙන් භාවිතා වේ.

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

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


2

ස්ක්‍රිප්ට් එක සහ එහි භාවිතය මත පදනම්ව (පිටු පැටවීම සහ විදැහුම් කාලය අනුව) සාම්ප්‍රදායික <ස්ක්‍රිප්ට්> ටැගය අනුව භාවිතා නොකිරීම, නමුත් ස්ක්‍රිප්ට් එක අසමමුහුර්තව පැටවීම ගතිකව අවුලුවාලීම විය හැකිය.

වෙනස් ක්‍රම කිහිපයක් තිබේ, නමුත් වඩාත්ම forward ජුව ඉදිරියට යන්නේ window.onload සිද්ධිය අවුලුවන විට document.createElement ("ස්ක්‍රිප්ට්") භාවිතා කිරීමයි. පිටුව විදැහුම් වූ විට මුලින්ම ස්ක්‍රිප්ට් පටවනු ලැබේ, එමඟින් පරිශීලකයාට පිටුව දිස්වන තෙක් බලා සිටීමට සිදු නොවේ.

මෙය ස්වාභාවිකවම පිටුවේ විදැහුම්කරණය සඳහා ස්ක්‍රිප්ට් අවශ්‍ය නොවේ.

වැඩි විස්තර සඳහා, ස්ටීව් සවුඩර්ස් (YSlow හි නිර්මාතෘ නමුත් දැන් ගූගල් හි) විසින් අසින්ක් ස්ක්‍රිප්ට් සම්බන්ධ කිරීම බලන්න .


2
  • IE <10 හි සහය සහ ක්‍රියාකාරිත්වය පිළිබඳව ඔබ තවමත් බොහෝ සෙයින් සැලකිලිමත් වන්නේ නම්, සෑම විටම ඔබේ ස්ක්‍රිප්ට් ඔබේ HTML ශරීරයේ අවසාන ටැග් බවට පත් කිරීම වඩාත් සුදුසුය. ඒ ආකාරයෙන්, ඔබට විශ්වාසයි DOM හි ඉතිරි කොටස පටවා ඇති අතර ඔබ අවහිර කර විදැහුම්කරණය නොකරනු ඇත.

  • IE <10 ගැන ඔබ වැඩි සැලකිල්ලක් නොදක්වන්නේ නම්, ඔබේ ස්ක්‍රිප්ට් ඔබේ ලේඛනයේ ප්‍රධාන කොට තබා deferඒවා ක්‍රියාත්මක වන්නේ ඔබේ DOM පූරණය කිරීමෙන් පසුව පමණක් බව සහතික කිරීමට භාවිතා කළ හැකිය ( <script type="text/javascript" src="path/to/script1.js" defer></script>). ඔබේ කේතය IE <10 හි වැඩ කිරීමට ඔබට තවමත් අවශ්‍ය නම්, ඔබේ කේතය ඒකාකාරව එතීමට අමතක නොකරන්න window.onload!


පිළිගත් පිළිතුරේ, මෙය “පෞරාණික නිර්දේශය” ලෙස හැඳින්වේ. ඔබ තවමත් එය අදහස් කරන්නේ නම්, ඔබ එය පිටුබලය දැක්වීම සඳහා යම් සඳහනක් ඉදිරිපත් කළ යුතුය.
ඩකාබ්

1

ස්ක්‍රිප්ට් අවහිර කර DOM පටවා එය පටවා ක්‍රියාත්මක කරනු ලැබේ.

ඔබ <body>සියලු DOM අවසානයේ ස්ක්‍රිප්ට් තැබුවහොත් පැටවීමට සහ විදැහුම් කිරීමට අවස්ථාවක් තිබේ (පිටුව වේගයෙන් "දර්ශනය වේ"). <script>එම DOM මූලද්‍රව්‍ය සියල්ලටම ප්‍රවේශය ඇත.

අනෙක් අතට එය <body>ආරම්භයෙන් පසුව හෝ ඊට ඉහළින් තැබීමෙන් ස්ක්‍රිප්ට් ක්‍රියාත්මක වේ (තවමත් DOM අංග නොමැත).

ඔබ jQuery ඇතුලත් කර ඇති අතර එයින් අදහස් කරන්නේ ඔබට අවශ්‍ය ඕනෑම තැනක එය භාවිතා කළ හැකි බවයි. සූදානම් ()


1

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


1

ඔබට බොහෝ <script>යොමු කිරීම් අවසානයේ තැබිය හැකිය <body>,
නමුත් බාහිර ස්ක්‍රිප්ට් භාවිතා කරන ඔබේ පිටුවේ සක්‍රීය සංරචක තිබේ
නම්, ඒවායේ යැපීම (js ගොනු) ඊට පෙර පැමිණිය යුතුය (ඉතා මැනවින් හෙඩ් ටැග් වලින්).


-1

ඔබේ JavaScriptකේතය ලිවීමට හොඳම ස්ථානය වන්නේ ලේඛනය අවසානයේ ටැගයට පෙර හෝ දකුණට පෙර </body>ලේඛනය පූරණය කර js කේතය ක්‍රියාත්මක කිරීමයි.

<script> ... your code here ... </script>
</body>

ඔබ JQueryපහත සඳහන් දේ ලිවුවහොත් ප්‍රධාන ලේඛනයේ තිබිය හැකි අතර එය ලේඛනය පැටවීමෙන් පසු ක්‍රියාත්මක වේ:

<script>
$(document).ready(function(){
   //your code here...
});
</script>

එය විසි කරයිSyntaxError
රාස්

ඔබගේ පිළිතුර වැරදියි නමුත් යාවත්කාලීන කිරීමේ දැඩි අවශ්‍යතාවයක් තිබුණි.
පෝල් කාල්ටන්

-2

HTML පසු තිර රචනය ඇතුළත් කිරීම මට වඩාත් අර්ථවත් කරයි. මගේ ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමට පෙර බොහෝ විට මට ඩොම් පැටවීමට අවශ්‍ය නිසා. මට එය ශීර්ෂ ටැගයට දැමිය හැකි නමුත් සවන්දෙන්නන්ට ඉහළින් පටවන සියලුම ලේඛනයට මම කැමති නැත. මගේ කේතය කෙටි හා පැණිරස හා කියවීමට පහසු වීමට මට අවශ්‍යය.

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

මාර්ගය වන විට හොඳ ප්රශ්නයක්.

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.