H5在線編輯器優化總結


花了三個半月做了個編輯器。自己一個人寫寫CSS,搞搞html,弄下JS,大部分精力都是掏鼓js,時間很倉促,后面領導幫忙寫了四個頁面邏輯(音頻,圖片,視頻)。

很多能優化的,以此文章記錄要已經優化和未來要優化的內容。

 

 

這貨能干哈子,這貨其實就是能做動畫的,當然,有交互,樣式。跟易企秀差不多,但,還有其他一些功能。

 

用戶能編輯組件的樣子。

 

修改事件動作。

 

 

 

動畫可以實時預覽。

詳細可以看:編輯器

 

手機端預覽:手機端預覽

 

 

說回正題,優化,其實這一版優化不行。

組件拖拽優化。

     

拖拽是很常用的功能,不就是修改left,top就行了?還能優化嗎?

可以,首先第一點,我可以做函數節流。第二點,left,top會觸發reflow,所以在拖動過程中可以先修改transform,結束的時候,再一次性修改left,top。

 

 

時間軸優化。

時間軸使用的是canvas,當內容很多,而且動畫很長的時候,時間軸必須只顯示滑動到的內容。例如下面這張圖,只顯示1-85幀的內容,而不是所有。

 

 

 

動畫優化。

動畫優化牽扯是最大的,這版本的動畫使用的是requestAnimationFrame(簡稱:RAF),封裝成ticker單例,其他要做動畫的組件都由ticker拋出事件進行更新。

這樣保證整個工程只有一處地方使用RAF。但是,還是不夠流暢。還能不能優化?我經常問自己。

能!動畫性能CSS3 > canvas動畫>RAF>setTimeout。按照這個順序,PC端還是使用RAF,手機端使用CSS3。實現方法,保存課件的時候,生成CSS3動畫字符串,當然,字符還能壓縮,壓縮算法可以參考HTTP2.0的頭部壓縮技術,生成的CSS3動畫字符串,在手機端獲取之后,轉換成style,轉換style的代碼具體參考手淘(這不算偷吧)。

 

組件自定義樣式優化。

現在的組件樣式,PC端編輯之后,保存到服務器,手機拿到之后,還要解析,解析需要花時間啊,明顯可以看出換頁的時候有一段空白時間。

優化方法:PC端編輯后生成CSS,組件使用狀態機。

 

資源預加載。

圖片現在手機瀏覽器有個特性,看不到的圖片不會加載,等要顯示的時候才加載,這樣很糟糕,也許顯示的時候,圖片還沒加載完,沒內容。

還有就是,假設場景里面有一百張圖片,不能一開始就一百張圖片雜亂無章的加載吧,要有順序,當然,哪張先顯示的就先加載,沒顯示的按順序預加載。

所以還要弄個圖片加載管理,包括預加載,按順序加載。

 

課件頁面數據預加載。

當用戶在播放第一頁的過程中,第一頁的資源已經全部加載了,這時候可以馬上加載下一頁的頁面數據。

 

 

數據保存優化。

每個課件有對應的工程數據,每個頁面有對應的頁面數據。數據的優化目前想到的就是不要保存默認值。例如下面的data,它的width是默認值,那么width就沒必要保存在服務器了。

var data = {
    width:100,//默認值
    height:200
}

 

組件樣式更新優化。

動畫過程中,會設置組件的skewX,skewY等,在同一幀每次操作skewX或者skewY都要更改組件的transform。性能肯定不如,把當前幀的所有樣式操作放到下一幀,下一幀一開始把同一個對象修改transform的所有操作合並了,再更改樣式。

 

開發流程優化。

傳統開發,在工程里新建一個js文件,然后引入。

1就是寫script標簽,設置順序。2使用require.js寫配置,然后define。3使用sea.js,require.

本人as3出生,一個文件對應一個類,一個類只完成一個職責。這個項目總共249個類,每個類都去配置或者寫require,那太糟糕。

這流程能優化嗎?可以,自己定個規范,利用gulp,配合require.js自動生成配置文件,自動生成引用。無論是個人開發,還是團隊合作,都很方便。

下下圖的R.js就是自動生成的。為什么叫R.js。因為我曾經玩過安卓開發。

 

 

 圖片優化.

使用svg代替一些簡單的圖形。svg體積小,保存工程的時候可以合並成一個或多個字符串,讀取的時候,分割就好。這樣可以減少HTTP請求。

 

離職了,第一版可優化空間還是很大,第二版也不知道什么時候做好,畢竟是用業余時間。

第二版准備使用ES6,angular2.0,當然引擎部分可能引入VUE。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM