前兩天團隊的 MrDream 開發了新版的 掘金 Welcome 頁面:javascript
由於掘金在作一些推廣的活動,而且爲了接地氣更好地展現平臺裏的內容,所以首頁有了如上展現(你們也能夠反饋一下是否喜歡,有什麼地方能夠優化)。css
和以前小清新的首頁不一樣:html
新的頁面裏有了更多的數據和內容,從而能夠更好地展現掘金自己的活躍度和最熱門的文章。前端
可是,內容的增長無疑會加重數據、展現的爆炸,除了最基礎的 JS、CSS 打包壓縮,新版上線後首頁常有打開速度慢的狀況。所以,我在這裏作了幾個重要的優化,以提升頁面展現效率。vue
我分析了網站的狀況,把問題主要聚焦在:java
首先,我更新了一個更好地服務器,✌️android
網站首頁主要展現了每個分類下最熱的文章,這樣這些內容的刷新基本上都是能夠緩存的,所以用 Redis 作了緩存優化。git
而,後面的滑動加載的內容則是由前端完成,減小了初次 HTML 太重的狀況。github
網站裏有不少的圖標,如緩存
而每個圖標又有灰、藍兩個夜色的圖標,前兩天看掘進裏的的文章 擁抱Web設計新趨勢:SVG Sprites實踐應用 剛和看到了用 SVG Symbols 來實現 Sprite 的方法。進而使用了一下,發現實在好用。
<svg><use xlink:href='#SYMBOL_ID'></use></svg>
語法調用SVG Tool 下載地址:
具體的例子:
- each category in categories
li
svg.icon
use.active(xlink:href='##{category.category}')
use.inactive(xlink:href='##{category.category}_normal')
span.aside-list-span #{category.name}複製代碼
這個是展現側邊的 categories
且每個 category
都有一個圖標 svg.icon
裏面包含着在 active
和 inactive
下的圖標。如:
svg.icon
use.active(xlink:href='#android')
use.inactive(xlink:href='#android_normal')複製代碼
分別表明了 Android 分頁是不是當前頁面。在 .svg 的文件裏則是:
<symbol id="android">...</symbol>
<symbol id="android_normal">...</symbol>
我一開始不知道怎麼實現 :hover
的效果,擔憂還要用 JavaScript 實現,而後,發現其實 SVG 圖片是自然支持 CSS 屬性的。如上:
li:hover, li:active, li.true {
.active { display: inline-block; }
.inactive { display: none; }
}
.active { display: none; }
.inactive { display: inline-block; }複製代碼
就能夠實現 :hover
, :active
的效果了。
因爲咱們的網頁用的前端框架是 Vue.js,所以使用了佳文開發的 vue-lazyload 來實現了列表裏圖片的異步加載:
import Vue from 'vue'
import lazyload from 'vue-lazyload'
Vue.use(lazyload, {
error: 'dist/error.png', // 當 error 的時候展現的圖片
loading: 'dist/loading.gif' // 當 loading 的時候展現的圖片
})複製代碼
而後代碼中之間用:
<img v-lazy="PATH_TO_IMAGE">複製代碼
就 ok 啦!