电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

js中延遲加載和預(yù)加載的具體使用

瀏覽:77日期:2024-04-07 18:05:19

延遲加載(懶加載)和預(yù)加載是常用的 web 優(yōu)化的手段。。

一、延遲加載(懶加載)

原理: 當(dāng)在真正需要數(shù)據(jù)的時候,才真正執(zhí)行數(shù)據(jù)加載操作。目的: 延遲加載機(jī)制是為了避免一些無謂的性能開銷而提出來的

實(shí)現(xiàn)延遲加載的幾種方法1. 讓 js 最后加載

使用方法: 把 js 外部引入的文件放到頁面底部用途: 讓 js 最后引入,從而加快頁面加載速度說明:流覽器之所以會采用同步模式,通常加載 js 文件或者放<script>標(biāo)簽都在結(jié)構(gòu)最后面,也是因?yàn)樗鼤柚篂g覽器后續(xù)操作的原因,所以放在后面,當(dāng)頁面結(jié)構(gòu)和樣式全部渲染完成再執(zhí)行 js,提升用戶體驗(yàn)

2. defer 屬性

使用方法: 為 <script>標(biāo)簽定義了 defer屬性。用途: 讓腳本在執(zhí)行時不會影響頁面的構(gòu)造。也就是說,腳本會被延遲到整個頁面都解析完畢之后再執(zhí)行

<!DOCTYPE html><html><head> <script src='http://www.hdgsjgj.cn/bcjs/test1.js' defer='defer'></script> <script src='http://www.hdgsjgj.cn/bcjs/test2.js' defer='defer'></script></head><body><!-- 這里放內(nèi)容 --></body></html>

說明:

雖然<script>元素放在了<head>元素中,但包含的腳本將延遲瀏覽器遇到</html>標(biāo)簽后再執(zhí)行。 當(dāng)瀏覽器解析到 script 腳本,有 defer 時,瀏覽器會并行下載有 defer 屬性的 script,而不會阻塞頁面后續(xù)處理。 所有的 defer 腳本保證是按順序依次執(zhí)行的。(但實(shí)際上延遲腳本并不一定會按照順序執(zhí)行,因此最好只包含一個延遲腳本) defer 屬性只適用于外部腳本文件。3. async 屬性

使用方法: 為 <script>標(biāo)簽定義了 async屬性。用途: 不讓頁面等待腳本下載和執(zhí)行,從而異步加載頁面其他內(nèi)容。

<!DOCTYPE html><html><head> <script src='http://www.hdgsjgj.cn/bcjs/test1.js' async></script> <script src='http://www.hdgsjgj.cn/bcjs/test2.js' async></script></head><body><!-- 這里放內(nèi)容 --></body></html>

瀏覽器會立即下載腳本,但不妨礙頁面中的其他操作,比如下載其他資源或等待加載其他腳本。加載和渲染后續(xù)文檔元素的過程和 main.js 的加載與執(zhí)行并行進(jìn)行,這個過程是異步的。它們將在 onload 事件之前完成。

說明:

瀏覽器會立即下載腳本,但不妨礙頁面中的其他操作,加載和渲染后續(xù)文檔元素的過程和腳本的加載與執(zhí)行并行進(jìn)行。 這個過程是異步的,它們將在 onload 事件之前完成。 所有的 defer 腳本不能控制加載的順序。。 asyncr 屬性只適用于外部腳本文件。4. 動態(tài)創(chuàng)建 DOM 方式

//這些代碼應(yīng)被放置在</body>標(biāo)簽前(接近HTML文件底部)<script type='text/javascript'> function downloadJSAtOnload() { varelement = document.createElement('script'); element.src = 'http://www.hdgsjgj.cn/bcjs/defer.js'; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener('load',downloadJSAtOnload, false); else if (window.attachEvent) window.attachEvent('onload',downloadJSAtOnload); else window.onload =downloadJSAtOnload;</script>5. 使用 jquery 的 getScript 方法

使用方法:

Query.getScript(url,success(response,status)) url(必寫):將要請求的 URL 字符串 success(response,status)(可選):規(guī)定請求成功后執(zhí)行的回調(diào)函數(shù)。

其中的參數(shù)response - 包含來自請求的結(jié)果數(shù)據(jù)status - 包含請求的狀態(tài)('success', 'notmodified', 'error', 'timeout' 或 'parsererror')

用途: 通過 HTTP GET 請求載入并執(zhí)行 JavaScript 文件。

//加載并執(zhí)行 test.js:$.getScript('test.js');//加載并執(zhí)行 test.js ,成功后顯示信息$.getScript('test.js', function(){ alert('Script loaded and executed.');});6.使用 setTimeout 延遲方法的加載時間

用途: 延遲加載 js 代碼,給網(wǎng)頁加載留出時間

<script type='text/javascript'> function A(){ $.post('/lord/login',{name:username,pwd:password},function(){ alert('Hello World!'); }) } $(function (){ setTimeout('A()',1000); //延遲1秒 })</script>常用實(shí)例 - 圖片懶加載

原理: 一張圖片就是一個<img>標(biāo)簽,瀏覽器是否發(fā)起請求圖片是根據(jù)<img>的 src 屬性,所以實(shí)現(xiàn)懶加載的關(guān)鍵就是,在圖片沒有進(jìn)入可視區(qū)域時,先不給<img>的 src 賦值,這樣瀏覽器就不會發(fā)送請求了,等到圖片進(jìn)入可視區(qū)域再給 src 賦值。

<img src='http://www.hdgsjgj.cn/bcjs/img/loading.gif' lazy-src='http://www.hdgsjgj.cn/bcjs/img/pic1.jpg' ><img src='http://www.hdgsjgj.cn/bcjs/img/loading.gif' lazy-src='http://www.hdgsjgj.cn/bcjs/img/pic2.jpg' >

function lazyload(){ var visible; $(’img’).each(function () { if( typeof($(this).attr('lazy-src'))!='undefined' ){ // 判斷圖片是否需要懶加載 visible = $(this).offset().top - $(window).scrollTop(); //圖片距離頂部的距離 if ((visible > 0) && (visible < $(window).height())) {// 判斷圖片是否在可視區(qū)域 visible = true;// 圖片在可視區(qū)域 } else { visible = false;// 圖片不在可視區(qū)域 } if (visible) { $(this).attr(’src’, $(this).attr(’lazy-src’)); } } });} // 打開頁面觸發(fā)函數(shù) lazyload(); // 滾屏?xí)r觸發(fā)函數(shù) window.onscroll =function(){ lazyload(imgs); }二、 預(yù)加載

原理: 提前加載圖片,當(dāng)用戶需要查看時可直接從本地緩存中渲染目的: 犧牲前端性能,換取用戶體驗(yàn),使用戶的操作得到最快的反映。

實(shí)現(xiàn)預(yù)加載的幾種方法1. css 實(shí)現(xiàn)

原理: 可通過 CSS 的background 屬性 將圖片預(yù)加載到屏幕外的背景上。只要這些圖片的路徑保持不變 ,當(dāng)它們在 Web 頁面的其他地方被調(diào)用時,瀏覽器就會在渲染過程中使用預(yù)加載(緩存)的圖片。簡單、高效,不需要任何 JavaScript。

#preload-01 { background: url(http://domain.tld/image-01.png) no-repeat -9999px -9999px; }#preload-02 { background: url(http://domain.tld/image-02.png) no-repeat -9999px -9999px; }#preload-03 { background: url(http://domain.tld/image-03.png) no-repeat -9999px -9999px; }2. js 預(yù)加載圖片

原理: 通過寫函數(shù)進(jìn)行預(yù)加載。將該腳本封裝入一個函數(shù)中,并使用 addLoadEvent(),延遲預(yù)加載時間,直到頁面加載完畢。

function preloader() { if (document.images) { var img1 = new Image(); var img2 = new Image(); var img3 = new Image(); img1.src = 'http://domain.tld/path/to/image-001.gif'; img2.src = 'http://domain.tld/path/to/image-002.gif'; img3.src = 'http://domain.tld/path/to/image-003.gif'; }}function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != ’function’) { window.onload = func; } else { window.onload = function() { if (oldonload) {oldonload(); } func(); } }}addLoadEvent(preloader);3. 使用 ajax 實(shí)現(xiàn)預(yù)加載

原理: 使用 Ajax 實(shí)現(xiàn)圖片預(yù)加載的方法,利用 DOM,不僅僅預(yù)加載圖片,還會預(yù)加載 CSS、JavaScript 等相關(guān)的東西

window.onload = function() { setTimeout(function() { // XHR to request a JS and a CSS var xhr = new XMLHttpRequest(); xhr.open(’GET’, ’http://domain.tld/preload.js’); xhr.send(’’); xhr = new XMLHttpRequest(); xhr.open(’GET’, ’http://domain.tld/preload.css’); xhr.send(’’); // preload image new Image().src = 'http://domain.tld/preload.png'; }, 1000);};

上面代碼預(yù)加載了“preload.js”、“preload.css”和“preload.png”。1000 毫秒的超時是為了防止腳本掛起,而導(dǎo)致正常頁面出現(xiàn)功能問題。

三、 懶加載與預(yù)加載的對比1、概念

延遲加載也叫懶加載: 當(dāng)在真正需要數(shù)據(jù)的時候,才真正執(zhí)行數(shù)據(jù)加載操作。預(yù)加載:提前加載,當(dāng)用戶需要查看時可直接從本地緩存中渲染

2、區(qū)別 兩種技術(shù)的本質(zhì):兩者的行為相反,一個是提前加載,一個是遲緩甚至不加載。 懶加載會對前端有一定的緩解壓力作用,預(yù)加載則會增加前端的壓力。3、意義

懶加載的主要目的是優(yōu)化前端性能,減少請求數(shù)或延遲請求數(shù)。預(yù)加載是犧牲前端性能,換取用戶體驗(yàn),使用戶的操作得到最快的反映。

四、 參考資料

【1】https://www.jb51.net/article/154930.htm【2】https://www.jb51.net/article/57579.htm

到此這篇關(guān)于js中延遲加載和預(yù)加載的具體使用的文章就介紹到這了,更多相關(guān)js中延遲加載和預(yù)加載內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | 隆众资讯-首页_大宗商品资讯_价格走势_市场行情 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 上海诺狮景观规划设计有限公司| 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 超声波清洗机_超声波清洗机设备_超声波清洗机厂家_鼎泰恒胜 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 耐酸泵,耐酸泵厂家-淄博华舜耐腐蚀真空泵 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 菏泽知彼网络科技有限公司 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 日本SMC气缸接头-速度控制阀-日本三菱伺服电机-苏州禾力自动化科技有限公司 | 桐城新闻网—桐城市融媒体中心主办 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 自清洗过滤器-全自动自清洗过反冲洗过滤器 - 中乂(北京)科技有限公司 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 氧化铁红厂家-淄博宗昂化工| 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 |