標籤:

AC 2017實錄(二)

第二次來Alloy Team的Conference了,依舊是乾貨滿滿。感謝老師們的精彩分享,下次再來就不是學生票了。從大二就開始追隨著大牛們的腳步,依然還是那句話:Be a warrior not a worrior。

0x004 高效H5動畫設計與性能優化

常用動畫方案

使用GIF(適合小icon)

優點:

圖片資源,開發簡單

缺點:

最多支持256種顏色

只支持全透明,不支持半透明

不適用於真彩色

長時間的動畫體積較大

使用Animated PNG

優點:

體積小

支持半透明

缺點:

支持度低

使用Video標籤(適合酷炫動畫)

優點:

可以通過設置autoplay自動播放

可以通過設置loop控制循環(一般大於12s)

缺點:

佔用帶寬較大(一般小於30s)

使用SVG(適合矢量動畫)

優點:

矢量圖,無失真

缺點:

難以實現點陣圖的效果

使用Canvas

優點:

可編程,獲得Context API

單個DOM元素,方便操作

WebGL加速

使用Javascript

優點:

可以通過DOM、CSS控制節點

可以通過setTimeout、setInterval維護時間和動畫速度

使用CSS

優點:

可以使用transition過渡

可以使用keyframes關鍵幀

瀏覽器會保證動畫的流暢性

瀏覽器會停止或降低不可見動畫的刷新(最小化不再播放)

性能評估

使用statsjs對比FPS

var stats = new Stats();stats.showPanel( 1 ); // 0: fps, 1: ms, 2: mb, 3+: customdocument.body.appendChild( stats.dom );function animate() { stats.begin(); // 被監聽的code stats.end(); requestAnimationFrame( animate );}requestAnimationFrame( animate );

使用dev-tools的timeline

移動端適配

背景

  • 背景為純色或漸變直接鋪滿
  • 背景為單張大圖

主體

  • 使用REM布局
  • 屏幕居中縮放

邊緣元素

  • 基於屏幕定位
  • 使用transform的scale

性能優化

優化指標:

  • 內存佔用
  • 幀率

利用GPU

  • 應該避免重繪和重排
  • 應該避免width和height變化,使用transform的scale
  • 應該避免margin的變化,使用transform的translate
  • 元素創建後應該立刻設置transform:translateZ(0)或translate3D(0,0,0)
  • 這樣元素會新建立一個獨立的層
  • 使用will-change(不要濫用)

圖片壓縮

  • 圖片壓縮:tinypng
  • 圖片合併:東東
  • 去除透明像素:TextureMerger

從合圖到壓縮

幀動畫要不要合圖

  • 當合併後的圖片過大會引起顯卡罷工、丟幀
  • 當請求數過多會浪費請求頭的傳輸

因此建議這樣解決:

  • HTTP2.0無需合圖
  • 雪碧圖裁剪空白區域
  • 使用zip壓縮
    • 資源打包,減少請求數
    • 避免單個大圖渲染瓶頸
    • 使用jszip進行前端解壓
    • jszip解析出ArrayBuffer
    • URL.crateObjectURL()

export async functiono downloadZip(url) { let data = await new Promise(function(rs, rj) { JSZipUtils.getBinaryContent(url, function(err, result) { if (err) { throw err; } rs(result) }); }); let zip = await JSZip.loadAsync(data); let re = /(.jpg|.png|.gif|.ps|.jpeg)$/; let result = await Promise.all( Object.keys(zip.files) .filter(file => re.test(fileName.toLowerCase())) .map(async function(fileName)) { let file = zip.files[fileName]; let blob = await file.async(blob) return [ fileName, blob ] } )}

緩存策略

  • CDN部署,設置max-age
  • 前端緩存
    • localStorage(空間小)
    • webSQL
    • indexedDB

我們可以通過以下流程圖,決定是否載入緩存:

預載入策略

可以使用web workers開一個線程,提前載入

精準控制

使用animationStart、animationEnd控制動畫開始和結束的回調

this.num.addEventListener(webkitAnimationEnd, () => { console.log(num is end)})

使用requestAnimationFrame控制瀏覽器幀率

高清屏幕適配

500px * 500px的原圖畫在250px * 250px的畫布上會模糊。

我們可以在convas上繪製500px * 500px的圖像再 scale(0.5)

0x005 ES2017時代的後函數式編程

這裡直接上大佬的地址吧,真的太清楚了

ES2017時代的後函數式編程

0x006 如何把自己構建成大型互聯網公司需要的前端人才

在校生

去大型互聯網公司,不要去創業公司

  • 豐富的學習資源
  • 活躍的技術交流
  • 專註的前端研究

前端面試應該考什麼

  • 個人基本信息(自我介紹)
  • 前端基礎(綜合考察)
    • HTML
      • 常用meta頭
      • 語義化
      • HTML5新特性
      • HTML渲染解析知識
    • CSS
      • 盒模型
      • 動畫
      • 彈性布局
    • javascript
      • 事件模型
      • 閉包和內存泄露
      • 原型鏈
      • 渲染樹
      • 重繪
      • 分層渲染
    • HTTP
      • HTTP狀態碼
      • 不同請求類型
      • 如何緩存
      • HTTP2
    • 調試
      • 如何抓包
      • 如何debug
      • 如何做移動端調試
    • 移動Web開發
      • 響應式布局
      • 手勢和事件
      • 如何提高渲染性能
  • 項目經歷
    • react
    • vue
    • 性能優化
    • 安全問題
  • 興趣愛好
  • 收尾

舉例說明

這裡大佬舉了幾個基礎知識的例子,感覺都考過:

  • 用戶從輸入url到顯示最終頁面,中間發生了什麼?
  • 老闆反饋頁面打開白屏,而你的手機上是正常的,怎麼辦?
  • 頁面上有個動畫一卡一卡的性能不行,怎麼優化?

還有幾個項目考點:

  • 你為什麼用react而不用vue
  • 在項目過程中使用vue遇到過什麼困難
  • 你怎麼理解react的虛擬dom

總之,就是要對技術有熱情,要深入研究。不會不要緊,重要的是解決問題的思路和能力。

建議

  • 補齊學好前端基礎
  • 跟進新技術,多嘗試新語言
  • 吃透項目中用到的技術,深入原理

初入職場

大佬認為,新人初入職場應該做好兩點準備:

  • 技術準備
    • 補齊基礎知識
    • 單點深挖(達到瓶頸後再向廣度拓展,一專多長才有競爭力)
    • 以技術項目優化練兵
    • 多寫文章分享,形成影響力
  • 思想準備
    • 溝通能力
      • 用溝通代替自作主張
      • 多做反饋,主動反饋
      • 及時拋出風險
    • 正視資源不足,挑戰自我
    • 問題到我為止,多做一點
    • 培養高效的工作方法

社招跳槽

社招T3要達到騰訊高級前端工程師的要求。聽了一個高工的述職項目,感覺太深入了。不停的優化,很厲害,涉及的範圍也很廣。

大概可以選擇的方向:

  • 性能優化
  • nodejs
  • 構建工具
  • 熱門框架
  • web安全
  • 圖形動畫
  • web遊戲
  • RN

最後還是要感謝Alloy Team大牛們的精彩分享,剩下半個學期任重而道遠。Stay hungry stay foolish。

推薦閱讀:

前端日刊-2018.02.23
不小心掉進了 uglify-js 的坑
記錄一次阿里、網易的前端面試經歷
graphql-js 淺嘗
十本學習前端必看書籍,讓你效率提升10倍

TAG:前端開發 |