zoukankan      html  css  js  c++  java
  • 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 = {
        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。

  • 相关阅读:
    弹丸类以及魂类的构想
    LaunchCharacter
    如何让Ue4画面产生振动效果
    解决Ue4C++使用UMG之类的模块时出现的拼写错误
    我认为我可以去尝试做一下Maya Ue4导出插件
    Wiki上的Ue4文件结构以及命名规范
    如何在修改了默认值之后跟新
    Ue4 BatteryCollector 教程笔记
    Ue4的GitHUB版本版本管理探索
    FString的相关文档,另外还有4种LOG的方法
  • 原文地址:https://www.cnblogs.com/geilishu/p/5420786.html
Copyright © 2011-2022 走看看