近,我正在瀏覽Medium上的帖子,我發現了一個很好的圖像加載效果。首先,加載一個小的模糊圖像,然后轉換為大圖像。我發現它非常整潔,想要剖析它是如何完成的。
先來一個Demo,看下圖片是怎么進行加載的:
https://jmperezperez.com/assets/images/posts/medium-progressive-loading.mp4
我在Medium上對此頁面執行了WebPageTest測試,你可以在其中查看它的加載方式.
如果你想親眼看到它,在你的瀏覽器中打開Medium的帖子(需要梯子),禁用緩存并限制響應,這樣需要更長的時間來獲取圖像,你可以看到效果。
究竟發生了什么:
先來整體的看一下頁面布局結構
<figure>
<div>
<div/> <!-- 圖片占位 防止高度塌陷-->
<img/> <!-- 縮略圖-->
<canvas/> <!-- 用戶繪制設置模糊效果 -->
<img/> <!--大圖-->
<noscript/> <!-- fallback for no JS -->
</div>
<figure>
這有一個具體的示例代碼,你可以參考下對應的內容
請注意,請求的實際圖像大小取決于設備
嘗試重現效果
我在CodePen上實現了相同的效果,但是使用CS3過濾器來實現模糊的效果,而不是畫布。
你可以在全屏幕上看到它。我建議你打開瀏覽器中的網絡限制并禁用緩存以便完整的看到對應的動畫效果。
如下所示:(3g網絡環境)
值得這樣做么?
很明顯,有很多事情可以通過類的方式去加載圖像,幾年前,以高效的方式完成動畫和模糊效果幾乎是不可能的,但事實是,多數時延遲才是瓶頸,而不是設備的兼容性,然而我們可以利用這些視覺效果去提升用戶體驗。
這樣控制圖片的加載邏輯有哪些優點:
使用Data-url 方式
就是base64 因為縮略圖很少 沒必要從外部請求,可以直接將縮略圖轉成base64存放的html中,但這樣會增大html文件的大小,但是可以快速的渲染。原作者經過測試,效果和外部請求類同,相差不大。
模糊效果
默認情況下,瀏覽器將圖片放大的在展示的時候會稍微用點模糊效果在圖片上,這樣的效果也可以取消掉。從而避免讓大家覺得如此“粗獷”的完成渲染。參見Google Developers。
當然這種效果可以在Chrome,Firefox,Safari中工作(IE未測試),不過Chrome的效果會更好點。
記住這樣的圖片只有27像素,并且質量非常低,這樣反而可以帶來一種極好的效果。但是,如果上面的效果對你而言還不夠完美的話,我們可以考慮更為復雜的方案。
我們可以通過使用CSS 濾鏡.而且現在有很多瀏覽器都系支持該特性.我相信Medium的工程師在考慮用canvas之前,一定想到過這樣的方式,可能是她們覺得這種方式不值得鼓勵,從而放棄使用Css了。
這種方式的主要優點就是你可以通過Css去控制你需要模糊的程度,而且相對容易實現。
還有一種方式是,你可以嘗試SVG的模糊效果,詳見The “Blur Up” Technique for Loading Background Images和Textured Gradients in Pure CSS.
谷歌是如何使用圖片預加載的
當我們搜索圖片的時候,我們會看到下面這種情況:
谷歌在進行圖片加載的時候會預先將背景渲染出一種固定的顏色,隨后才顯示完成加載的圖片。
他們可能使用的是圖片中最主要的色彩,然后將其運用在背景上,從而給人一種快速加載的效果。
Facebook的 200 byte方案
早些時候facebook發表過一篇 圖片預覽背后的技術,里面闡述了它們是如何展示一張42px x 42px 的并且去掉JPEG頭的圖片。
由于這些圖片是用于服務端,它們知道該如何去添加一個明確的壓縮頭部的JPEG。但是做網站的我們,只能依靠JavaScript去完成這樣的工作。我們可以嘗試使用Worker 去完成組裝,然后在利用JS去發出圖片內容的請求。
無論如何,這都看起來像是對于Web扼殺,但我還是建議大家閱讀下使用Webp去生成小的的縮略圖。
LQIP(壓縮圖片優先呈現)
不用等到最終的圖片完成渲染,我們可以提供一張高度壓縮的圖片先展示出來,然后在將其替換掉.這大概就是LQIP的主要內容。其實這和Medium的方式大同小異,只不過這個方案要求更高的圖片壓縮,但是維持和原圖的一致的像素。
結論
隨著我們的頁面加載越來越多的圖像,最好考慮下如何優化圖片的加載過程,因為它會影響性能和用戶體驗。如果我生成了許多大小不同的縮略圖,那么你可以實現下,當圖片加載時,使用小的縮略圖做背景。
原文鏈接:
https://jmperezperez.com/medium-image-progressive-loading-placeholder/
原文作者: José M. Pérez
TML(英文Hyper Text Markup Language的縮寫)中文譯為“超文本標簽語言”,主要是通過HTML標簽對網頁中的文本、圖片、聲音等內容進行描述。
1 HTML骨架格式
日常生活的書信,我們要遵循共同的約定。
同理:HTML 有自己的語言語法骨架格式:
<HTML>
<head>
<title></title>
</head>
<body>
</body>
</HTML>
2 html基本標簽
作用:所有HTML中標簽的一個根節點。
作用:用于存放:title,meta,base,style,script,link
注意:在head標簽中我們必須要設置的標簽是title
作用:讓頁面擁有一個屬于自己的標題。
作用:頁面在的主體部分,用于存放所有的HTML標簽:p,h,a,b,u,i,s,em,del,ins,strong,img
3 顏色的表示方式
第一種方式:使用顏色名稱: 僅僅有16種顏色名可用英文字母,其余的要用16進制值。
aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow
第二種方式:RGB模式
第三種:十六進制
#000000 #ffffff #325687 #377405
4 文檔類型<!DOCTYPE>(重點)
<!DOCTYPE html>這句話就是告訴我們使用哪個html版本, 我們使用的是 html 5 的版本。 html有很多版本,那我們應該告訴用戶和瀏覽器我們使用的版本號。
標簽位于文檔的最前面,用于向瀏覽器說明當前文檔使用哪種 HTML 或 XHTML 標準規范,必需在開頭處使用標簽為所有的XHTML文檔指定XHTML版本和類型,只有這樣瀏覽器才能按指定的文檔類型進行解析。
5 HTML標簽的語義化(重點)
所謂標簽語義化,就是指標簽的含義。
為什么要有語義化標簽:方便代碼的閱讀和維護,同時讓瀏覽器或是網絡爬蟲可以很好地解析,從而更好分析其中的內容,使用語義化標簽會具有更好地搜索引擎優化
核心:合適的地方給一個最為合理的標簽。
語義是否良好: 當我們去掉CSS之后,網頁結構依然組織有序,并且有良好的可讀性,不管是誰都能看懂這塊內容是什么。
遵循的原則:先確定語義的HTML ,再選合適的CSS。
6 總結:(重要知識點)
<html></html>
<head></head>
<title></title>
<body></body>
<table></table>
<tr></tr>
<td></td>
<span></span>
<p></p>
<form></form>
<h1></h1>
<h2></h2>
<h3></h3>
<h4></h4>
<h5></h5>
<h6></h6>
<object></object>
<style></style>
<b></b>
<u></u>
<strong></strong>
<i></i>
<div></div>
<a></a>
<script></script>
<center><center>
<br>
<hr>
<img>
<input>
<param>
<meta>
<link>
1.注釋標簽:<!–注釋–>
-------------------------------------
2.換行標簽:<br/>
-------------------------------------
3.段落標簽:<p>文本文字
特點:段與段之間有行高
屬性:align對齊方式
(left:左對齊 center:居中 right:右對齊)
-------------------------------------
4.水平線標簽:<hr/>
屬性:
width:水平線的長度(兩種:第一種:像素表示;第二種,百分比表示)
size: 水平線的粗細 (像素表示,例如:10px)
color: 水平線的顏色
align:水平線的對齊方式(left:左對齊 center:居中 right:右對齊)
-------------------------------------
5.容器標簽(重點)
<div>:塊級標簽,獨占一行,換行
<span>:行級標簽,所有內容都在同一行作用
<div>:主要是結合css頁面分塊布局
<span>:進行友好提示信息
為了使網頁更具有語義化,我們經常會在頁面中用到標題標簽,HTML提供了6個等級的標題,隨著數字增大文字逐漸變小,字體是加粗的,內置字號,默認占據一行;
<h1>、<h2>、<h3>、<h4>、<h5>和<h6>
容器里面裝載著文字或圖表的一種形式,叫列表。列表最大的特點就是 整齊 、整潔、 有序
無序列表 ul (重點)
無序列表標簽: <ul></ul>
屬性:type :三個值,分別為:
circle(空心圓) ,disc(默認,實心圓),square(黑色方塊)
列表項:<li></li>
注意:
<ul></ul>中只能嵌套<li></li>,直接在<ul></ul>標簽中輸入其他標簽或者文字的做法是不被允許的。
<li>與</li>之間相當于一個容器,可以容納所有元素。
無序列表會帶有自己樣式屬性,放下那個樣式,一會讓CSS來!
有序列表 ol
有序列表標簽:<ol>
屬性:type:1、A、a、I、i(數字、字母、羅馬數字)
列表項: <li></li>
定義列表dl
\dl>
<dt>名詞1
<dd>名詞1解釋1
<dd>名詞1解釋2
…
<dt>名詞2
<dd>名詞2解釋1
<dd>名詞2解釋2
…
</dl>
dl>
名詞1
名詞1解釋1
名詞1解釋2
... 名詞2
名詞2解釋1
名詞2解釋2
...
獨立標簽
屬性:
src:圖片地址: 相對路徑 (同一個網站) 絕對路徑 (不同網站)
width:寬度height:高度border:邊框align:對齊方式,代表圖片與相鄰的文本的相當位置(有三個屬性值:top middle bottom)
alt:圖片的文字說明hspace 和 vspace 設定圖片邊沿上下左右空白,以免文字或其它圖片過于貼近
鏈接標簽
超鏈接可以是文本,也可以是一幅圖像,您可以點擊這些內容來跳轉到新的文檔或者當前文檔中的某個部分。(不僅可以創建文本超鏈接,在網頁中各種網頁元素,如圖像、表格、音頻、視頻等都可以添加超鏈接)
屬性:
href:跳轉頁面的地址(跳轉到外網需要添加協議);
name:名稱,錨點(回到錨點: 頂部,底部,中間),在訪問錨點的書寫格式:#name的值
target:_self(自己) _blank(新頁面,之前頁面存在) _
__parent top 默認
self_search相等于給頁面起一個名字,如果再次打開時,如果頁面存在,則不再打開新的頁面??梢允侨我饷帧?/code>
如果當時沒有確定鏈接目標時,通常將鏈接標簽的href屬性值定義為“#”(即href="#"),表示該鏈接暫時為一個空鏈接。
蘋果內存想要更大的,「加錢」買。但是近日,一位中國工程師成功破解了M1處理器的MacBook,將8GB內存升級到16G,將256GB固態硬盤升級到1TB。
一直以來蘋果電腦不僅價格貴,配置還不OK,特別是內存和硬盤簡直摳門到不行!
它們通常都是焊死在主板上,無法進行更換。
2020新款M1處理器Macbook,更是直接采用內存與處理器融合封裝的技術,破解難度非常大。
想要高配怎么辦?「加錢」!
現在,有人將M1芯片成功破解,即使不通過蘋果官方,也可以升級硬件。
近日,一位中國工程師就破解了M1處理器的MacBook,將8GB內存升級到16G,將256GB固態硬盤升級到1TB。
這位來自中國廣州一家手機維修培訓機構的工程師在他的微信朋友圈表示,「在變革的時代,勝利屬于適應變化的人」。
同樣是2020款MacBook,差距怎么那么大呢?
擴容不加錢,就是這么簡單
根據蘋果官方價格,8GB升級16GB,加1500元。
256GB固態硬盤升級512GB,再加1500元。
升級1TB的話,加3000元。
我們都知道,現在市場上的內存和硬盤的價格都已經很親民了,只需幾百塊就能解決。
但是在蘋果這兒就加了好幾倍的價錢。
我們先來了解一下2020款M1芯片的Macbook的基本配置:配有8GB統一內存,256GB固態硬盤。
由于蘋果已經將處理器、顯卡和內存一起打包在M1芯片中,我們只能在購買 MacBook 之前選擇更大容量的內存和SSD。
購買后,是無法升級內存,只能通過外部硬盤驅動器升級內存。
或許你還沒有見過長在Mac里M1芯片的真是樣子。
如下圖中左邊是M1芯片,右邊是兩個內存條,那個原裝銀色M1芯片只有一半。
實際上,右側的矩形芯片是集成的存儲芯片8GB SK hynix LPDDR4X內存。將其稱為UMA統一內存架構。
中國這位工程師將M1芯片內存和硬盤進行更換??梢钥吹皆诟鼡Q完成硬盤之后,電腦的硬盤容量從256GB升級到1TB,空間翻了4倍。
這位中國工程師能將集成度如此之高的M1芯片破解成功,并將其內存和儲存空間進行升級。
看到這個解決方案,你是否也對Macbook系統能夠自己擴容這一消息點燃了熱情。
不過小編要提醒你哦,擴容有風險,一定要先做好備份。
Mac「換芯」:蘋果最強芯片Mac M1
M1芯片具有劃時代意義!
這是蘋果歷史上第四次為電腦更換芯片。
專為移動設備設計的ARM架構,之前在桌面產品中應用稀少,很大一部分原因是因為擔心性能不足。
但Mac M1打破了這個局限。
M1芯片采用臺積電目前最先進的5nm工藝制造,搭載了8核CPU、8核GPU以及一個16核的神經網絡引擎。CPU、GPU、緩存集成在一起,其中包含160億個晶體管,數量創造了蘋果芯片的新高。
M1芯片采用臺積電目前最先進的5nm工藝制造,搭載了8核CPU、8核GPU以及一個16核的神經網絡引擎。CPU、GPU、緩存集成在一起,其中包含160億個晶體管,數量創造了蘋果芯片的新高。
M1芯片的8核CPU分為4個高性能核心和4個高效能核心。
每個高性能核心都提供出色的單線程任務處理性能,讓攝影師可以飛速編輯高分辨率照片,讓開發者能以近乎 3 倍于以往的速度構建 app。當四個核心同時運行,多線程處理性能表現將極大提升。
隨著英特爾處理器越來越高的功耗,與蘋果Mac產品的理念逐漸背道而馳。
作為一款低能耗芯片,M1 擁有迄今最快的中央處理器核心、最快的個人電腦集成顯卡,還有著機器學習超強的 Apple 神經網絡引擎。
M1 芯片還采用了統一內存架構,將一切都融入同一個高帶寬、低延遲的內存池中。所有的 SoC 技術都可以訪問同樣的數據,無需在多個內存池之間來回拷貝,從而讓性能和能效進一步提升。
蘋果表示,它提供了世界上最好的CPU每瓦特的性能。它能以四分之一的功耗提供與典型筆記本電腦CPU相同的峰值性能。
集耗能低、運行快、性能高于一身的M1芯片是蘋果的巨大的跨越,但是想要在內存上得到升級,我們只能「加錢」購買。
擴容須謹慎,擴容有風險。
參考資料:
https://www.cnbeta.com/articles/tech/1110533.htm
https://www.163.com/dy/article/FS1NEBKQ0511AMS8.html
*請認真填寫需求信息,我們會在24小時內與您取得聯系。