前端开发经验总结和分享
<h1>前端开发经验总结和分享</h1><p> </p>
<p>我要分享的内容有3点</p>
<ol>
<li> 代码规范</li>
<li> mockdata</li>
<li> RxJS</li>
</ol>
<p> </p>
<p> </p>
<p>正文</p>
<h1><span style="background-color: rgba(192, 192, 192, 1)">一、代码规范</span></h1>
<h3> 1. vscode 代码格式化工具 Prettier</h3>
<p>配置一致</p>
<p>1.1 vscode安装Prettier</p>
<p>搜索插件名称:<span class="name clickable" title="扩展名">Prettier - Code formatter</span></p>
<p>1.2 项目根目录下添加配置文件.prettierrc</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"tabWidth": 2<span style="color: rgba(0, 0, 0, 1)">,
</span>"printWidth": 100<span style="color: rgba(0, 0, 0, 1)">,
</span>"singleQuote": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"semi": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"trailingComma": "all"<span style="color: rgba(0, 0, 0, 1)">,
</span>"bracketSpacing": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"overrides"<span style="color: rgba(0, 0, 0, 1)">: [
{
</span>"files": ".prettierrc"<span style="color: rgba(0, 0, 0, 1)">,
</span>"options": {"parser": "json"<span style="color: rgba(0, 0, 0, 1)">}
}
]
}</span></pre>
</div>
<p> </p>
<h3>2. 小函数</h3>
<p>坚持定义简单函数</p>
<p>考虑限制在75行之内</p>
<p>为什么呢?</p>
<ul>
<li>简单函数更易于测试,特别是当它们只做一件事,只为一个目的服务时。</li>
<li>简单函数促进代码重用</li>
<li>简单函数更易于阅读</li>
<li>简单函数更易于维护</li>
<li>小函数可避免易在大函数中产生的隐蔽性错误,例如与外界共享变量、创建意外的闭包或与依赖之间产生意外耦合等。</li>
</ul>
<p> </p>
<h3>3. 命名约定</h3>
<p>看到名字立刻知道它包含了什么,代表了什么</p>
<p> </p>
<h3>4. 扁平</h3>
<p>坚持尽可能保持扁平的目录结构</p>
<p> </p>
<h3>5. 惰性加载</h3>
<p> </p>
<p> </p>
<h1><span style="background-color: rgba(192, 192, 192, 1)">二、mockdata</span></h1>
<p> 提前跟后端把接口数据约定好,包括接口名称,数据字段等</p>
<p>http://mockjs.com/</p>
<p> 因为上一家公司用的框架是Angular,实现方法是把mockdata写成一个底层服务。Vue应该有也它的实现方式。</p>
<p>https://www.cnblogs.com/famensaodiseng/p/12015281.html</p>
<p> </p>
<h1><span style="background-color: rgba(192, 192, 192, 1)">三、 rxjs</span></h1>
<h3><strong>1. rxjs是什么?</strong></h3>
<p>RxJS是一个库,它通过使用observable序列来编写异步和基于事件的程序。</p>
<p>它提供了一个核心类型Observable和各种操作符(map, filter, reduce, every, 等等),这些数组操作符可以把异步事件作为集合来处理。</p>
<h3><strong>2. rxjs能做什么?</strong></h3>
<p>javascript写前端页面的时候,除了展示数据UI之外,还需要相应用户的操作,展示动态的数据,动态加载UI。于是前端的异步有:事件,ajax,动画,定时器等,处理这些的时候常见的问题有:异步的回调地狱,race condition,内存泄漏,管理复杂状态,错误处理等</p>
<p>(1)回调地狱:按照普通的javascript方法写,所有的处理写在某个事件的完成后的回调中,当有多个回调一次执行后1->2->3->4很容易将代码写成火箭形,很大一团根本没法改。</p>
<p>(2)race condition:是指系统出现不恰当的执行时序,而得到不正确的结果。比如搜索框中,每次输入后发送请求获取结果展示在搜索框下面,由于网络或者后端查询的原因有可能导致最后发送的请求比之前的请求更快的完成了,这时最终展现的并不是最后那个请求的结果。</p>
<p>(3)内存泄漏:当单页面应用切换页面时,未在合适的时机移除监听事件造成内存泄漏</p>
<p>(4)复杂状态的管理:异步带来了状态的改变,可能会使状态管理变得非常复杂,尤其是某个状态有多个来源时,比如有些应用,一开始有一个默认值,再通过Ajax获取初始状态,存储在localStorage,之后通过WebSocket获取更新。这时查询状态可能是同步或者异步的,状态的变更可能是主动获取也可能是被动推送的,如果还有各种排序、筛选、状态管理将会更加复杂</p>
<p>(5)错误处理:javascript中的try catch只能捕获同步的错误,对于异步的错误难以获取。</p>
<p>promise中可以使用一个全局的catch</p>
<p> </p>
<h3><strong>3. 有了promise,为什么还需要rxjs?</strong></h3>
<p>Promise已经解决了很多异步的难点,比如将回调地狱改为了链式调用,统一同步和异步代码,但是promise只有一个结果,并且不可以被提前取消。</p>
<p> </p>
<p>通过使用rxjs,我们得以将业务逻辑,与流本身的变化规律分离,获得更高级的表达能力。</p>
<p>这里有一个潜藏的重要问题,就是这些流的具体取值,实际上运行时决定的,我们在编码期并不知道,但是不妨碍我们在编码期描述针对流的操作。</p>
<p> </p>
<p>RxJS项目实战——请求依赖合并,代码如下:</p>
<p>https://stackblitz.com/edit/rxjs-jq8wmr</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>参考:https://segmentfault.com/a/1190000020268578</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/cathy1024/p/13704839.html
頁:
[1]