js骞惰鍔犺浇锛岄『搴忔墽琛
<script>杩愯鑴氭湰鎴栧姞杞藉閮ㄦ枃浠舵椂锛屼細闃诲椤甸潰娓叉煋锛岄樆濉炲叾浠栬祫婧愮殑鍔犺浇銆傚鏋滈〉闈腑闇瑕佸姞杞藉涓猨s鏂囦欢锛屽湪鍙よ佹祻瑙堝櫒涓ц兘浼氭瘮杈冪碂绯曘 鍥犳鏈変簡鏈鍘熷鐨勪紭鍖栧師鍒欙細鎶婅剼鏈斁鍦ㄥ簳閮銆
濡備綍瀹炵幇js闈為樆濉炪佸苟琛屽姞杞斤紝鐢氳嚦鑳戒繚鎸佹墽琛岄『搴忓憿锛熷悇娴忚鍣ㄨ〃鐜板浣曪紵绔欏湪宸ㄤ汉鐨勮偐鑶涓婏紝Kyle Simpson銆Nicholas C. Zakas鍜Steve Souders瀵规鏈夎繃鎬荤粨鍜屾柟妗堛
鑳屾櫙
1. Script DOM Element銆 鍔ㄦ佹彃鍏<script>锛屼笉浼氶樆濉烇紝浣嗘棤娉曚繚鎸佹墽琛岄『搴忋備絾鍞湁Firefox鍙互淇濇寔鎵ц椤哄簭锛屼絾涔熷樊鐐瑰湪Firefox 4 nightly鐨勭増鏈腑鍘绘帀杩欎釜鐗规с
2. HTML5 async 闈為樆濉烇紝鍔犺浇瀹屽悗绔嬪嵆鎵ц锛屼笉淇濊瘉椤哄簭銆傝繖涓睘鎬т笉绠℃湁娌℃湁鍊笺佸间负true鎴杅alse锛岄兘鏄瓑鍚岀殑鏁堟灉锛堢敱浜嶬yle鐨勬帹杩涳紝涓嶈兘淇濊瘉鎵ц椤哄簭涓庡叾鍊兼棤鍏充簡锛夈
Google Analytics鐨勬柊鐗堝祵鍏ヤ唬鐮佸氨缁撳悎浣跨敤浜嗕笂闈袱涓柟妗堬紝濡傦細
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www')
+ '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
3. IE defer灞炴с備笉闃诲锛屽彲浠ヤ繚璇侀『搴忥紝鍦―OM鍔犺浇瀹屾垚鍚庢墽琛岋紙鍦―OMContentLoaded涔嬪墠锛夈
4. <script>鐨則ype灞炴ц涓”script/cache” 闈炴爣鍑嗙殑type灞炴э紝浣縥s鏂囦欢鍙細琚姞杞借屼笉浼氭墽琛屻傞渶瑕佹墽琛屾椂锛屽垱寤轰竴涓猼ype灞炴т负”text/javascript”鐨勬甯<script>鍏冪礌锛宻rc璁句负鍓嶉潰宸茬粡鍔犺浇鐨刯s鍦板潃鍗冲彲锛屾墽琛岄『搴忓紑鍙戣呭彲鎺э紙鎵ц鏃舵満涔熷畬鍏ㄥ彲鎺э級銆傜被浼肩殑鏂瑰紡涔熸湁閫氳繃<img>鏉ュ仛棰勫姞杞界殑銆
5. document.write銆傛枃妗f祦鍏抽棴鍚庢墽琛屼細娓呯┖鏁翠釜椤甸潰銆
6. XHR 骞惰鍔犺浇锛屾墽琛岄『搴忓彲鎺э紝浣嗘湁鍚屽煙闄愬埗銆
鍩烘湰闇姹
Steve Souders 鍜 Nicholas C. Zakas 涓璧锋荤粨浜嗕笅锛岃涓js鍔犺浇鏂规蹇呴』瑙e喅浠ヤ笅闂锛
- 鏀寔鐗规ф娴
- 涓嶄細閲嶅鍔犺浇
- 鏀寔骞惰鍔犺浇
寮鍙戣呯殑缇庡ソ鎰挎湜
Nicholas C. Zakas 鍑犵粡鍛ㄦ姌锛屾湁浜嗕互涓嬬殑鎻愭锛鍒嗙js鐨勫姞杞藉拰鎵ц锛屾柟渚垮紑鍙戣呰嚜鐢辨帶鍒秊s鐨勬墽琛屾椂闂淬
var script = document.createElement("script");
// 姝ゅ睘鎬т粎鍙敱js鍔ㄦ佸啓鍏ワ紝鍦℉TML鏍囩涓洿鎺ュ啓鍏ユ棤鏁
script.preload = true;
// src璧嬪煎悗锛岀珛鍗宠Е鍙戝姞杞斤紙浠呭姞杞斤紝涓嶄細鎵цjs鍐呭锛
script.src = "foo.js";
// onpreload鏄渶瑕佹柊鏀寔鐨勪簨浠讹紝鍔犺浇瀹屾垚鍚庤Е鍙戞浜嬩欢
script.onpreload = function(){
// 鍦ㄩ渶瑕佹椂锛屽皢鍔犺浇鐨刯s鎻掑叆鍒癉OM涓紝鍗冲彲杩愯鐢熸晥
document.body.appendChild(script);
};
鍩轰簬鐗规ф娴媐eature detection锛堝尯鍒簬鐗规ф帹娴媐eature inference锛
var isPreloadSupported = (typeof script.preload == “boolean”);
杩欎竴鐗规у彧鏈夊湪Javascript涓姩鎬佽祴鍊兼椂鐢熸晥锛岀洿鎺ュ啓鍒癏TML鏍囩涓婃椂鏄棤鏁堢殑銆
浣嗚繖鍙槸涓涓彁妗堬紝寮鍙戣呬滑鐨勭編濂芥効鏈涳紝鑰岄潪琚祻瑙堝櫒鏀寔鐨勬爣鍑嗐傜洰鍓嶈繖涓鎻愭宸插湪LABjs涓敮鎸侊紝Zakas鏈汉涔熷湪绉瀬鎺ㄨ繘姝ゆ彁妗堢殑鏍囧噯鍖栥
鑰孠yle鍦ㄦ帹杩涘彟澶栦竴绉嶆柟寮忥紝鍗宠姹瀵瑰惈鏈夊睘鎬sync=false鐨<script>淇濇寔鎵ц椤哄簭銆傚鏋渁sync=true锛屽垯涓鏃﹀姞杞藉畬鍒欎細椹笂鎵ц鑴氭湰锛屼笉浼氫弗鏍间繚鎸侀『搴忋傞粯璁ゅ湴锛岄〉闈腑鐨<script>鐨刟sync灞炴т负false锛屽嵆淇濇寔鎵ц椤哄簭锛沯s鍒涘缓鐨<script>鐨刟sync灞炴т负true锛屽嵆鍔犺浇瀹岀珛鍗虫墽琛岋紝涓嶄繚璇侀『搴忋
涓轰簡鏀寔鐗规ф娴嬶紝涓涓敱js鍒涘缓鐨<script>鏍囩榛樿鍏锋湁async=true鐨勫睘鎬с
Kyle鐨勮繖涓鎻愭宸茶HTML5灏忕粍鎺ュ彈鏀惧叆鑽夋锛屽湪Firefox 4 nightly鐗堟湰涓殑涔熷凡瀹炵幇銆
Firefox 4涓轰簡鏇村悜HTML5鏍囧噯鐪嬮綈锛屼竴搴﹀湪寮鍙戣呯増鏈腑鍘绘帀浜嗗鍔ㄦ佸垱寤<script>鏉ュ姞杞絡s鏂囦欢鐨勬墽琛岄『搴忔敮鎸锛
<script> elements created using document.createElement() and inserted into a document now behave according to the HTML5 specification by default. Scripts with the src attribute execute as soon as available (without maintaining ordering) and scripts without the src attribute execute synchronously.
涓烘锛Kyle鍚慦ebKit寮鍙戝洟闃熸姉璁紝鎻愪簡涓涓猙ug锛屾渶缁堝緱鍒颁簡濡備粬鎵鎰跨殑鏀寔锛
To make script-inserted scripts that have the src attribute execute in the insertion order, set .async=false on them.
Zakas寰堟璧廗yle鐨勬柟妗堬紝Kyle鍦↙ABjs涓篃鏀寔浜哯akas鐨勬彁璁紝鍚勬祻瑙堝櫒浠篃杩欎箞鍜岃皭灏卞ソ浜嗐
鐜版湁瑙e喅鏂规
LABJS
浣滆咃細Kyle Simpson
鐗圭偣锛氬苟琛屽姞杞斤紝骞朵繚鎸侀『搴
涓昏鏂规锛歛sync=false銆乸reonload鏂版彁妗堢殑鏀寔锛屼互鍙婂吋瀹瑰悇娴忚鍣ㄧ殑鏂规锛岀淮鎶ゆ垚鏈笉灏忋
ControlJS
浣滆咃細Steve Souders
鐗圭偣锛氬苟琛屽姞杞斤紝鏃犻『搴忎繚璇
涓昏鏂规锛<script type=”text/cache”>