我們在react專案開發時,通常會遇到this
繫結的問題。解決的方法總結下分為下面的三種情況:
import react from 'react'
export default
class
demo
extends
react.component
click1()
click2=()=>
click3()
render()>
this.click3.bind(this)}>
div>}}
三種方式都能達到同樣的效果,但是效能上還是有很大的差別的。
首先,第三種方式效能是最差的,每次在render的時候都要去繫結this
。
對於第二種和第三種,我們這樣看其實看不出差別,但是如果我們將**編譯為es5
之後,就能看到其中的區別了:
首先,使用箭頭函式的方式,該方式其實是定義在this
上的,也就是說,在每乙個例項化之後的this
都會定義該方法,但是通過方式1,該方式其實是定義在prototype
上的,各個例項物件共享該方法。所以,單純從記憶體空間的消耗上來看,方式1其實是最好的。
但是定義在原型鏈上的方法,在實際呼叫該方法的時候,其查詢的過程是這樣的:
首先檢查this
上是否有該方法的定義,如果沒有的話,則去prototype
上查詢是否有該方法,所以在方法呼叫的過程中,會經歷一次跨原型鏈的查詢。該過程是方法1帶來的額外的消耗。
但是箭頭函式的方式,在實際呼叫的時候,訪問的是外層作用快取的_this
, 所以在作用域查詢上有一層消耗。
經過私底下的測試發現,在原型鏈上的查詢比作用域上的查詢,效能會好很多。所以綜合來看,還是第二種的方式是最優的。
另外,看老外的**中,發現過乙個批量繫結的方式,其實是對方案一的一種優化,可以簡單借鑑一下:
浮動的幾點
下面是一些自己理解和網上摘錄的 浮動的元素會脫離normal流 文件流或標準流 例子 浮動的元素會脫離normal流 文件流或標準流 br 所以div2無法識別div1的位置,就出現在首位,結果div1會覆蓋div2。br 如果div2長度少於div1長度,就完全被覆蓋 br 無論div2長度是多少...
關於css的幾點
花了兩個星期,我看完了 精通css 高階web標準解決方案 第2版 看完了這本書我學到了很多。1 是關於背景定位的 使用畫素設定背景定位和使用百分數進行背景定位是不一樣的,如果使用畫素設定背景定位,那麼影象左上角到元素左上角的距離為指定的畫素值。而百分數定位並不對背景影象的左上角進行定位,而是使用影...
UIImage的幾點建議
兩種初始化方式 1 uiimage imagenamed 適合 ui介面中反覆使用的貼圖,因為會儲存在 cache 中,所以速度會有保障。但是對使用次數較少,較大時候,不應這樣採用,因為會占用大量的 cache。2 uiimageimagewithcontentsoffile 直接從檔案中讀取,儲存...