ajax預加載html seo,前端性能優化 — JS預加載和懶加載

JS預加載

需求:有時我們需要實現例如快速快速切換頁面、圖片之類的功能時,能盡快的加載出我們所需的圖片會極大提升用戶體驗,這時用預加載將圖片先緩存到瀏覽器,用戶使用需顯示圖片時無疑會順暢很多。

核心:當一個圖片在其它地方被加載過,那么它就會存在于瀏覽器緩存中,用到它時可直接從本地緩存中渲染。

特點:增強用戶的體驗,但會加載服務器的負擔。

實現方式:

1. CSS方式

通過css中設置background的方式將圖片加載進緩存,寫在任意標簽下,設置background-position使其不可見

background: url("img.jpg") no-repeat -9999px -9999px;

2. JS方式

實現圖片預加載

3. AJAX方式

實現CSS和JS預加載

window.onload = function() {

setTimeout(function() {

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

};

JS懶加載

需求:試想當一個網頁有非常多的圖片時,那么加載整個頁面的時間就會大量增加,對用戶而言需要好幾秒的時間加載一個頁面無疑是不友好的。然而更多時候用戶并不會瀏覽到全部加載進來的圖片,所以當用戶瀏覽到當前視口時再去加載相應的圖片無疑是兩全其美的選擇。

核心:將當前可視區域的圖片加載進來,監聽滾動顯示圖片。

特點:頁面加載速度快、可以減輕服務器的壓力、節約了流量,用戶體驗好。

實現方式:

1. 動態設置img的src屬性

1) 首先,不要將圖片地址放到src屬性中,而是放到其它屬性(data-original)中。

2) 頁面加載完成后,根據scrollTop判斷圖片是否在用戶的視野內,如果在,則將data-original屬性中的值取出存放到src屬性中。

3) 在滾動事件中重復判斷圖片是否進入視野,如果進入,則將data-original屬性中的值取出存放到src屬性中。

這里有一個細節,當img的src為空時,仍然會對服務器發起一次請求,詳情可參看:http://youngae520.lofter.com/post/28e9e5_a67a8a,因此使用此種方式往往會默認在src中寫入一個小的圖片作為默認圖片。

頁面懶加載

79d2748998b9f222177e8d8c5e8b9213.png

ac3c27104f880a38b41874d2c931ccec.png

1f47f68dbf13d7266cf4f1bc68b55705.png

7ebcb014bbd8ccf1318ee86dbfeaacaf.png

8e69867da42907de8f77730688d00906.png

8d21b16aae405d1e48acf2bdeaac2da2.png

79d2748998b9f222177e8d8c5e8b9213.png

ac3c27104f880a38b41874d2c931ccec.png

1f47f68dbf13d7266cf4f1bc68b55705.png

7ebcb014bbd8ccf1318ee86dbfeaacaf.png

8e69867da42907de8f77730688d00906.png

8d21b16aae405d1e48acf2bdeaac2da2.png

79d2748998b9f222177e8d8c5e8b9213.png

ac3c27104f880a38b41874d2c931ccec.png

1f47f68dbf13d7266cf4f1bc68b55705.png

7ebcb014bbd8ccf1318ee86dbfeaacaf.png

8e69867da42907de8f77730688d00906.png

8d21b16aae405d1e48acf2bdeaac2da2.png

emmm......有沒有發現這樣寫的問題......

好多代碼啊~用戶不一定會滾動到下面,而且JS中頻繁的DOM操作仍然會影響性能~

2. innerHtml

考慮到上述問題,我就去京東主頁上去偷學了一下他們咋實現的~

首先我們來看“頻道廣場”的下面有好多空的div(現在還沒有滾動到那里~):

34e0f5c3468a3fbab9ca6dcb9e924deb.png

而當我滾動到對應的地方時,再查看源代碼:

1ef6002ceb0207f5b20bb20098d2dc1c.png

發現不僅僅是這些顯示圖片的item里多了內容,其他的地方也多了很多東西,讓我們隨意看一個item:

5af058db154aead6fbb58817eb2871d2.png

多么熟悉的lazyimg出現了~~~~~~ 所以我懷疑這種做法是通過直接寫innerHtml實現的,相比于第一種設置src屬性的方法,首先剛開始加載的html就少了很多,那么頁面渲染就會更快~ 其次直接寫html也就避免了頻繁的DOM操作。

相關參考:

https://www.jianshu.com/p/5456a52e73e9

https://www.jianshu.com/p/c8a7c2019c09

https://www.cnblogs.com/leyan/p/6085148.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539241.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539241.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539241.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面向對象、繼承、抽象方法重載知識點整理

面向過程、面向對象 面向過程:從開始到結束自己獨立完成 面向對象:將一個事物劃分為單體來各自實現區域性的功能,最后通過調用組合完成 類、對象 類:某一些具有共同特征的物體 對象:指某一種具體的物體,屬于…

python for循環n次_Python入門10 —— for循環

1.字符串依次取值 students [egon, lxx, alex] i 0 while i < 3: print(students[i]) i 1 2.針對循環取值操作&#xff0c;while循環并不擅長&#xff0c;于是python提供一個專門循環取值操作&#xff1a;for循環 students [egon, lxx, alex] for x in students: # 有幾…

hive與依賴環境的交互

與linux交互命令 格式 在linux的命令前加上!&#xff08;英文感嘆號&#xff09;&#xff0c;以;&#xff08;英文分號結尾&#xff09; 操作實例 !ls; !pwd; hive> !ls; app derby.log hadoop-2.7.2.tar.gz jdk-8u73-linux-x64.tar.gz metastore_db t.sql hive> !pw…

和平精英顯示服務器人數太多,和平精英到底有多差 導致玩家紛紛國際服

原標題&#xff1a;和平精英到底有多差 導致玩家紛紛國際服和平精英上線以來爭議不斷&#xff0c;百分之九十九是對和平精英的各種不滿&#xff0c;還有百分之一是喜歡和平精英&#xff0c;認為刺激戰場已經免費給我們玩&#xff0c;讓騰訊虧了很多錢&#xff0c;現在和平精英上…

python中的wx_配置 Python的wxWidgets可視開發環境 | 學步園

注&#xff1a;轉載請注明出處 一、下載 Python 2.5.1 這一步是必須做的&#xff0c;下載 Python 語言的 SDK 下載地址(直接復制到迅雷)&#xff1a;點擊下載 下載完成后安裝 Python 2.5.1&#xff0c;注意安裝路徑中不要有空格&#xff0c;不然會引起一些問題。 二、下載 wxPy…

的write方法有哪些參數_向子進程傳遞大量數據的方法

如何傳遞大型數據給子進程昨天的一篇文章中&#xff0c;我們說到如果想向一個子進程傳輸多于32767個字符的數據&#xff0c;我們需要尋找其他的方法(而不是命令行參數)來實現。我們能想到的第一個方法是&#xff1a;WM_COPYDATA。當子進程創建并進入消息循環后&#xff0c;我們…

厲害了!中關村軟件園人工智能軍團有料有看點

人工智能已成為當下全球科技界的新熱點&#xff0c;中外競相攀登這座劃時代的科技高峰。上月&#xff0c;國務院印發《新一代人工智能發展規劃》&#xff0c;明確將人工智能作為未來國家重要的發展戰略。《規劃》提出前瞻布局新一代人工智能重大科技項目&#xff0c;到2030年中…

Hive的使用之hwi

概述 hwi是hive開發的網頁形式查看數據。方便非專業人士使用。 安裝步驟 1、下載hive源碼包 地址&#xff1a;http://apache.fayea.com/hive/ apache-hive-2.1.0-src.tar.gz 2、打包war 解壓apache-hive-2.1.0-src.tar.gz源碼包&#xff0c;進入到 C:\Users\zengmg\Deskto…

c 服務器傳輸大文件,cend.me:不須經過服務器,直接點對點的文件傳輸免費服務...

要傳送文件給遠程的手機、平板、電腦等設備&#xff0c;通常的做法就是先將文件上傳到服務器存放&#xff0c;然后再從服務器下載&#xff0c;這樣的做法看似合理&#xff0c;但如果上傳的同時就由遠程的設備來接收&#xff0c;不要經過服務器&#xff0c;這樣就能更節省上、下…

win10系統遷移后系統重裝_win7/win10系統遷移到新SSD硬盤的方法

隨著固態硬盤的普及&#xff0c;越來越多的朋友把電腦的硬盤換成了固態&#xff0c;原來的機械硬盤當數據盤使用&#xff0c;關于在固態硬盤中安裝系統&#xff0c;那是簡單的&#xff0c;和機械硬盤一樣&#xff0c;當是對原來的系統比較重要&#xff0c;不能重裝的朋友來說&a…

hive參數配置使用

概述 set命令設置hive的參數。 ${} 可以獲取配置項的值&#xff0c;作為參數使用。 在啟動hive時可以傳入配置項啟動。 hive參數初始化配置set命令~/.hiverc hive參數介紹 輸入set&#xff0c;可以查看所有可設置項和現在設置項的值。 hive> set; 項太多了&#xff…

Thrift源碼學習二——Server層

Thrift 提供了如圖五種模式&#xff1a;TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadSelectorServer ?? TSimpleServer、TThreadPoolServer 屬于阻塞模型 TNonblockingServer、THsHaServer、TThreadedSelectorServer 屬于非阻塞模型 TServer…

linux top 命令可視化_25個Linux性能監控工具

一段時間以來&#xff0c;我們在網上向讀者介紹了如何為Linux以及類Linux操作系統配置多種不同的性能監控工具。在這篇文章中我們將羅列一系列使用最頻繁的性能監控工具&#xff0c;并對介紹到的每一個工具提供了相應的簡介鏈接&#xff0c;大致將其劃分為兩類&#xff0c;基于…

base64是哪個jar包的_漲知識 | 用maven輕松管理jar包

前言相信只要做過 Java 開發的童鞋們&#xff0c;對 Ant 想必都不陌生&#xff0c;我們往往使用 Ant 來構建項目&#xff0c;尤其是涉及到特別繁雜的工作量&#xff0c;一個 build.xml 能夠完成編譯、測試、打包、部署等很多任務&#xff0c;這在很大的程度上解放了程序員們的雙…

Hive數據類型

概述 Hive的內置數據類型可以分為兩大類&#xff1a;(1)、基礎數據類型&#xff1b;(2)、復雜數據類型。 基礎數據類型 數據類型 所占字節 開始支持版本 TINYINT 1byte&#xff0c;-128 ~ 127 SMALLINT 2byte&#xff0c;-32,768 ~ 32,767 INT 4byte,-2,147,483,648 ~ 2,14…

JMS(Java消息服務)與消息隊列ActiveMQ基本使用(一)

最近的項目中用到了mq&#xff0c;之前自己一直在碼農一樣的照葫蘆畫瓢。最近幾天研究了下&#xff0c;把自己所有看下來的文檔和了解總結一下。 一. 認識JMS 1.概述 對于JMS,百度百科&#xff0c;是這樣介紹的&#xff1a;JMS即Java消息服務&#xff08;Java Message Service&…

python單詞反轉_python文本 字符串逐字符反轉以及逐單詞反轉

python文本 字符串逐字符反轉以及逐單詞反轉 場景&#xff1a; 字符串逐字符反轉以及逐單詞反轉 首先來看字符串逐字符反轉&#xff0c;由于python提供了非常有用的切片&#xff0c;所以只需要一句就可以搞定了 >>> aabc edf degd >>> a[::-1] dged fde cba …

hive復合數據類型之struct

概述 STRUCT&#xff1a;STRUCT可以包含不同數據類型的元素。這些元素可以通過”點語法”的方式來得到所需要的元素&#xff0c;比如user是一個STRUCT類型&#xff0c;那么可以通過user.address得到這個用戶的地址。 操作實例 1、創建表 create table student_test(id int,in…

pycharm 運行celery_Celery全面學習筆記

來源介紹Celery 是 Distributed Task Queue&#xff0c;分布式任務隊列。分布式決定了可以有多個 worker 的存在&#xff0c;隊列表示其是異步操作。Celery 核心模塊Celery有一下5個核心角色Task就是任務&#xff0c;有異步任務和定時任務Broker中間人&#xff0c;接收生產者發…

hive復合數據類型之array

概述 ARRAY&#xff1a;ARRAY類型是由一系列相同數據類型的元素組成&#xff0c;這些元素可以通過下標來訪問。比如有一個ARRAY類型的變量fruits&#xff0c;它是由[apple,orange,mango]組成&#xff0c;那么我們可以通過fruits[1]來訪問元素orange&#xff0c;因為ARRAY類型的…