路由器网页模板(路由器网页设置教程)

  原创专栏|司徒正美

  

  司徒正美,本名钟钦成,著名的Java专家,去哪儿网前端架构师,立志做考古学家的日语系工程师,穿梭于二次元与二进制间的"魔法师",做过陶艺,写过小说,涉猎Java、Ruby、 Java。曾出版《Java框架设计》一书。

  本文将蜻蜓点水的介绍一下avalon2,因为代码总是令人生厌,让人入睡。大家先了解一下avalon2能做什么,做得如何,再入坑吧。

  1. avalon1的现状

  说到avalon2,不能不提一下avalon1。avalon1在我没有加入去哪儿网前,已经被酒店事件部的同学引进来了。那时他们还开发一个叫onion adapter的库。因为在这之前还有一个叫onion的UI库,是基于jQuery的。后来的是一个适配库,基本上覆盖了原有的接口。我来去哪儿网后,就是继续升级avalon,创建一个全新的基于avalon的UI库,取onion的简写,叫oniui。当然还有其他工作。这个庞大的UI现在在公司30多条业务线在使用。

  当然 avalon面世时,国内只有ko能支持IE6,但它的用法比较怪异,因此在当时赢取了不份市场,BAT都有业务线在用,类型包括内部OA系统, 游戏, 电商平台,政府网站,企业网站 ,手机,微信公众号。最大的两个客户是广东移动内部OA系统与银联钱包APP,都是上万台服务器。

  

  得益一些人脉关系,avalon也带到国外,其主要组件mmRequest, mmRouter都实现了国际化。 当然avalon 成功的另一个原因是它的学习资源广泛分布离不开的。国内出名的前端论坛都有它的身影。

  

  2. avalon2的优势

  学如逆水行舟,不进则退。IT行业要求我们不断学习,因此每天都涌现新的技术。一个框架不可能吃一辈子。加之,avalon 是匆匆黄袍加身,成为去哪儿网后台的御用框架,它是没有准备好的,不完善的。这几年的缝缝补补,不能改变先天的缺憾。近几年react 带来了虚拟DOM这大杀器,大大改善UI库的性能问题。基于这些原因,avalon2起航了。

  

  avalon2是基于上面4个目标进行大升级。

  1

  高性能

  首先avalon2是使用虚拟DOM解决性能问题。虚拟DOM从结构上来看,只是一个树状结构的对象,但它是附加一套复杂的diff算法。即每次我们修改数据时,都会生成一份新的虚拟DOM,然后新旧虚拟DOM进行比较,算出最少的更新步骤。这样说大家没有什么具体的感觉。

  DOM在我们的框架上通常是指文本节点与元素节点。一个普通的元素节点有7层原型链,这意味着,我们随便访问一个自定义属性,可能一层层往上的7层,每层都要经过几十至上百个属性。而用普通对象代替了DOM对象,我们就减少这些不必要的属性访问。按照avalon2文档上的术语,叫做以轻量对象代替重型对象做计算。

  

  更多有关虚拟DOM为什么这么多的话题,可以见下面链接。这里就不展开了。大家知道这是一个很牛B的东西就行了。

  

  https://www.zhihu.com/question/31809713

  2

路由器网页模板(路由器网页设置教程)

  组件化

  这次主要参考对象是WebComponent,chrome推出的东西,但在chrome54时就被废弃。但它有许多牛B的思想值得借鉴。比如标签化,生命周期,插槽……

  

  https://sentsin.com/web/1089.html

  为了兼容低版本浏览器,avalon2是选择使用JS实现了它们。

  3

  无入侵性

  

  无排它性,是指能与jQuery, zepto等库友好混用。

  为了达成这个目标,主要做了如下几个工作:

  使用同步刷新降低使用难度。即上面是avalon代码,下面是jQuery代码,上面改了某个值,jQuery能立即拿到修改后的值。换是angular, react, vue等库,由于是异步刷新,从视图那边只能取得之前的值。没有异步,就不用掺和什么Promise, callback等东西。

  不替换现有节点是非常重要的。比如说backbone,它每次刷新都是大片区域刷新,因此绑定事件时只能使用事件委托实现。一些jQuery组件需要重新挂载初始化。但总有一些东西你是不能还原现场的,如光标的位置,选区什么的。像react,它会将页面上所有空白都用span元素包起来,是严重破坏原来结构,导致许多 jQuery组件用不了。

  value属性的劫持。当第三方组件(比如日历组件,富文本编辑器),这些组件也在修改value,当它们修改value时,通过value的劫持手段,能立即能知我们的vm发生变化,然后再同步其他用到这个属性的地方。

  继承react的优点,为用户提供各种钩子。比如说整个视图渲染后的回调(如loading),循环区域渲染后的回调(列表的父容器重设高度),值更新后的回调(可能我们要做格式化处理,只能输入中文或数字),组件的生命周期回调等等。有了这些钩子,用户就不用自己写一些奇怪的代码来做获取组件的当前状态。

  4

  兼容性

  最后一点的兼容性,也是一直是avalon的优势。这是主要针对高级浏览器的优化。高级浏览器添加了一些更好用的API,它们以一敌十,可以大大减少avalon2框架的代码量。

  

  下面来一个简单的例子:

  

  

  点击按钮,那个格子的数值就会换成11,22,33,44……

  5

  后端渲染与arthur

  除了以上四者,在升级过程中,avalon2实际上还达成更多目标: 后端渲染与arthur。

  后端渲染是基于虚拟DOM上实现的。由于JS对象在前后端都可以运行,只要我们有效隔离框架中的DOM 代码,那么我们就让avalon直接运行于nodejs环境中。这样前后可以共用一份VM,一份模板,一套业务逻辑。

  这里是avalon2 koa2的后端渲染例子:

  https://github.com/RubyLouvre/avalon-server-render-example

  arthur是一个超微型的avalon,支持浏览器为IE9+,与vue, angular等运行环境相同。但相对于他们动辙上万的代码,arthur不到1500行。麻雀虽小,五脏俱全。arthur合适于一些对体积非常严苛的环境,如广告,性能监控等场合。

  https://github.com/RubyLouvre/avalon/blob/v2.1.16ee/dist/arthur.js

  3. avalon2的相关设施

  此外,avalon2也不是单打独斗,它提供了一整合构建SPA的方案,包括数据请求(mmRequest),动画(mmAnimate),路由器(mmRouter)及事件总线(mmDux, 这只是redux的一个简单包装,方便实现时间旅行,可以任意跳到某一帧)。avalon2与这些组件都是基于webpack构建的,因此所有东西都可以直接用webpack打包。

  

  目前, avalon2已经在社区中一点点铺开使用,有了这些先行者的努力,avalon2会变得更好。当然avalon2不满足于作为一个MVVM框架而存在。基于虚拟DOM,avalon2将构建多个渲染层,向数据可视化领域迈进!

  如有疑问,欢迎留言,会在第一时间回复大家。

  

  Qunar技术沙龙

  欢迎关注我们


【免责声明】:

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

【关于转载】:

本站尊重互联网版权体系,本站部分图片、文章大部分转载于互联网、所有内容不代表本站观点、不对文章中的任何观点负责、转载的目的只用于给网民提供信息阅读,无任何商业用途,所有内容版权归原作者所有
如本站(文章、内容、图片、视频)任何资料有侵权,先说声抱歉;麻烦您请联系请后台提交工单,我们会立即删除、维护您的权益。非常感谢您的理解。

【附】:

二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

注:本站资源来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系我们处理!

-----------------------------------------------------------------------------------------------------------

【版权声明】:

一、本站致力于为源码爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。
-----------------------------------------------------------------------------------------------------------


内容投诉
源码村资源网 » 路由器网页模板(路由器网页设置教程)

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论