脚本宝典收集整理的这篇文章主要介绍了

以vue依赖统计为核心的框架(函数),mve

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。
<p><code></p> <p>初接触vue,惊为天人,它的更新方式极为取巧,但也是人们保持路人的原因:似乎没有一个严格的数学证明保证按它的方式能精确更新到<a href="http://www.js-code.com/tag/dom" title="浏览关于“DOM”的文章" target="_blank" class="tag_link">DOM</a>。不过脑子里推演的似乎不会发生失败,而且每次界面都能按预期更新的效果十分动人——这似乎是目前mvvm中最快最准确的更新方式。</p> <p>试用过几回,不满的地方,vue是一个框架,必须、最好按它的方式来编码,xml与jscss混编,使用.vue文件。虽然后来放开可以使用template字符串。以及它内聚成字典的写法,xml语法都是我不习惯的地方,我只想用纯粹的js语言来编程。经过一翻网络搜索,勉强明白了依赖更新的实现方式,便尝试着自己去实现一个框架。</p> <p>没接触vue之前,我制作了一个叫js<a href="http://www.js-code.com/tag/do" title="浏览关于“do”的文章" target="_blank" class="tag_link">do</a>m的小模块,使用其中一个叫parseElement的函数,接受一个嵌套的字典/<a href="http://www.js-code.com/tag/%e6%95%b0%e7%bb%84" title="浏览关于“数组”的文章" target="_blank" class="tag_link">数组</a>作参数。因为js的字典/数组声明跟json一样树状嵌套,而且更加灵活(key不必双引号,value可以是函数),而html/xml也是树状的,便可以模拟html/xml,不用像模板引擎或jquery一样拼凑xml字符串,内部递归调用DOM元素的创建修改方法,也就很好地避免了注入攻击。而且传统的各种界面编程使用各种xml,访问属性调用方法又在源码文件,这种分离很不方便,因此在这种嵌套的<a href="http://www.js-code.com/tag/Object" title="浏览关于“Object”的文章" target="_blank" class="tag_link">Object</a>/<a href="http://www.js-code.com/tag/array" title="浏览关于“Array”的文章" target="_blank" class="tag_link">Array</a>中内置函数,至少减少了代码,明确了调用。字典中如果有id,将字典解析生成的元素节点放置进me.k这个字典里,用来修改DOM元素,也可以实现局部模块化(jsdom源码也在附的开源代码中,可进入查看)。而且在js这种完整的语言下,也可以对局部片段像模板引擎一样轻松重复。性能,我是没考虑的,但至少安全是保证了的,因为已经快到超过人的感知,而且相信用纯粹一种语言,肯定比几种语言混编性能高。</p> <div class="widget-codetool" style="display:none;"> <div class="widget-codetool--inner"> <span class="selectCode code-tool" data-toggle="tooltip" data-placement="top" title="" data-original-title="全选"></span> <span type="button" class="copyCode code-tool" data-toggle="tooltip" data-placement="top" data-clipboard-text="//简单示例 jsdom.parseElement({ type:&quot;div&quot;, attr:{ a:1, b:2 }, style:{ color:&quot;red&quot;, &quot;background-color&quot;:&quot;green&quot; }, children:[ { type:&quot;div&quot;, id:&quot;a&quot; }, { type:&quot;button&quot;, text:&quot;点击&quot;, action:{ click:function(e){ console.log(e); } } } ] },me);" title="" data-original-title="复制"></span> </div> </p></div> <pre class="javascript hljs"><code class="js"><span class="hljs-comment">//简单示例</span> jsdom.parseElement({ <span class="hljs-attr">type</span>:<span class="hljs-string">"<a href="http://www.js-code.com/tag/div" title="浏览关于“div”的文章" target="_blank" class="tag_link">div</a>"</span>, <span class="hljs-attr">attr</span>:{ <span class="hljs-attr">a</span>:<span class="hljs-number">1</span>, <span class="hljs-attr">b</span>:<span class="hljs-number">2</span> }, <span class="hljs-attr">style</span>:{ <span class="hljs-attr">color</span>:<span class="hljs-string">"red"</span>, <span class="hljs-string">"background-color"</span>:<span class="hljs-string">"green"</span> }, <span class="hljs-attr">children</span>:[ { <span class="hljs-attr">type</span>:<span class="hljs-string">"div"</span>, <span class="hljs-attr">id</span>:<span class="hljs-string">"a"</span> }, { <span class="hljs-attr">type</span>:<span class="hljs-string">"<a href="http://www.js-code.com/tag/button" title="浏览关于“button”的文章" target="_blank" class="tag_link">button</a>"</span>, <span class="hljs-attr"><a href="http://www.js-code.com/tag/text" title="浏览关于“text”的文章" target="_blank" class="tag_link">text</a></span>:<span class="hljs-string">"点击"</span>, <span class="hljs-attr">action</span>:{ <span class="hljs-attr">click</span>:<span class="hljs-function"><span class="hljs-keyword"><a href="http://www.js-code.com/tag/function" title="浏览关于“function”的文章" target="_blank" class="tag_link">function</a></span>(<span class="hljs-params">e</span>)</span>{ <span class="hljs-built_in">console</span>.log(e); } } } ] },me);</code></pre> <p>但jsdom.parseElement使用要回写DOM,使用DOM的<a href="http://www.js-code.com/tag/api" title="浏览关于“API”的文章" target="_blank" class="tag_link">API</a>修改元素属性,这很麻烦,这也是各家mvvm创建的原因。如果attr节点,或style节点下的value不是字符串或数字,而是函数,就能动态更新这些属性,这就是我理想中的mvvm方式。如今有vue依赖更新这种技术的存在,我觉得找到了可能。</p> <p>实现mve的过程中,我发现组件的watch需要在销毁时回收,于是不得不改变mve的调用方式,和jsdom.parseElement不同。具体可以参见开源代码中的示例。</p> <div class="google-auto-placed ap_container" style="text-align: center; width: 100%; height: auto; clear: none;"><ins data-ad-format="auto" class="adsbygoogle adsbygoogle-noablate" data-ad-client="ca-pub-6330872677300335" data-adsbygoogle-status="done" style="display: block; margin: auto; background-color: transparent;"><ins id="aswift_4_expand" style="display: inline-table; border: none; height: 0px; margin: 0px; padding: 0px; position: relative; visibility: visible; width: 697px; background-color: transparent;"><ins id="aswift_4_anchor" style="display: block; border: none; height: 0px; margin: 0px; padding: 0px; position: relative; visibility: visible; width: 697px; background-color: transparent; overflow: hidden; opacity: 0;"><iframe width="697" height="175" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&amp;&amp;s.handlers,h=H&amp;&amp;H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&amp;&amp;d&amp;&amp;(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_4" name="aswift_4" style="left:0;position:absolute;top:0;border:0px;width:697px;height:175px;"></iframe></ins></ins></ins></div> <p>后来越来越觉得js很烦人(即使已经比各面向对象语言方便多了;我一直使用其函数式的部分lambda的部分而不使用其原型式的部分),逗号很多很容易写错,函数声明很烦,字符串必须包含在引号中难免前后空格,字典没有默认顺序。。。。为了优化js的写法,我去研究lisp,然后有了我的另一个开源项目S-Lisp这套语法方案,越深入思考越发现这套方案的威力强大,甚至C++版实现的S-Lisp可以通过引用计数精确回收内存,因此顺带推荐。同时mve下有一个js实现的S-Lisp,及这个S-Lisp实现的mve,然而只是部分实现,children的repeat还未实现。欢迎大家关注,希望能够帮助到大家,同时也希望大家如果有什么好的改进,不要吝惜分享出来,共同进步。</p> <h1 id="articleHeader0">开源地址</h1> <p><a href="https://github.com/wangyang2010344/mve" rel="nofollow noreferrer" target="_blank">github</a><br /><a href="https://gitee.com/wy2010344/mve" rel="nofollow noreferrer" target="_blank">gitee</a></p> <p>附:S-Lisp<br /><a href="https://gitee.com/wy2010344/S-Lisp" rel="nofollow noreferrer" target="_blank">gitee</a><br /><a href="https://github.com/wangyang2010344/S-Lisp" rel="nofollow noreferrer" target="_blank">github</a></p> <p></code></p>

总结

以上是脚本宝典为你收集整理的

以vue依赖统计为核心的框架(函数),mve

全部内容,希望文章能够帮你解决

以vue依赖统计为核心的框架(函数),mve

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过