<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>前端 on 月盾的博客</title>
    <link>https://blog.hopefly.top/tags/%E5%89%8D%E7%AB%AF/</link>
    <description>Recent content in 前端 on 月盾的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 10 May 2020 03:44:34 +0000</lastBuildDate>
    <atom:link href="https://blog.hopefly.top/tags/%E5%89%8D%E7%AB%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>你是拿锤子的前端开发吗？</title>
      <link>https://blog.hopefly.top/blogdetail/5eb778a2bd7e796e7100c718/</link>
      <pubDate>Sun, 10 May 2020 03:44:34 +0000</pubDate>
      <guid>https://blog.hopefly.top/blogdetail/5eb778a2bd7e796e7100c718/</guid>
      <description>&lt;h3 id=&#34;前言&#34;&gt;前言&lt;/h3&gt;&#xA;&lt;p&gt;接上篇《&lt;a href=&#34;https://blog.hopefly.top/blogdetail/5b66733ae7e37a672f015c10&#34;&gt;说道说道前后端分离&lt;/a&gt;》今天再次对前端现状作一次分析（吐槽）。&lt;/p&gt;&#xA;&lt;p&gt;再次引用一句《穷查理宝典》中的理论：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在手里拿着锤子的人看来，所有的东西都会是钉子。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;因为有锤子的关系，遇到任何问题，都会先想如何用锤子解决。久而久之，陷入了一种思维定式。任何工具带来便利的同时，也带来了局限性。而这往往是用锤子的人很难看到的。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;事出有因&#34;&gt;事出有因&lt;/h3&gt;&#xA;&lt;p&gt;这种现状在开发圈内决不少见，不仅限于前端。本文只说说前端的现状，原因是笔者最近在工作中遇到一个棘手的问题：性能优化。&lt;/p&gt;&#xA;&lt;p&gt;最近接手了多个现有的前端项目，是公司比较核心的移动端官网，作为门户网站访问量和用户量都比较大，但是随着项目的迭代出现了性能问题，页面加载速度在WiFi网络下达到3s,3G网络15s以上，更差的网络40s+。加载的资源小则3M，大则6M。如果一切往好处想，假设所有用户使用最好的网络，用户和公司都不在乎流量费，两三秒的加载速度也还挺快的，每次打开页面费个3M流量也不是个事。但如果考虑这些问题的话就会发现这不是小问题。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://qn-img.hopefly.top/1%E5%AF%B91M%E7%AB%99%E4%BC%98%E5%8C%96%E5%89%8D.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;对以上问题分析得出结论之一：&lt;strong&gt;资源过大&lt;/strong&gt;，有兴趣的可以打开&lt;a href=&#34;http://www.taobao.wang&#34;&gt;淘宝网&lt;/a&gt;看下首屏资源做下对比，可以看到资源不超过3M，时间不超过2s。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://qn-img.hopefly.top/taobao.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;而我们一个移动端网站的资源居然能超过3M，究其原因：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;图片大&lt;/li&gt;&#xA;&lt;li&gt;js大&lt;/li&gt;&#xA;&lt;li&gt;css大&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;图片大是因为图片基本没任何大小控制，都是使用了最高标准原图。js和css大基本是属于架构问题，一个项目中包含的上百的页面每个页面600多k的js是绕不过去的（vendor.js,app.js等打包资源，不包含其他引入资源）。&lt;/p&gt;&#xA;&lt;p&gt;看到&lt;code&gt;vendor.js&lt;/code&gt;,&lt;code&gt;app.js&lt;/code&gt;这两个名称很多人应该想到了，这是vue（react）框架开发的网站。&#xA;是的，就是用vue开发的移动端网站，使用vue开发网站本身也不是什么大问题，毕竟有实力的公司不需要SEO，直接竞价排名就行。而我要说的问题是，不是什么网站都可以用vue来开发，不信请继续往下看。&lt;/p&gt;&#xA;&lt;h3 id=&#34;问题分析&#34;&gt;问题分析&lt;/h3&gt;&#xA;&lt;p&gt;我司的移动端网站作用并不仅仅是用来展示公司形象的，更重要的是用户转化的，就是让用户注册的。而且是要和很多第三方机构合作投放引流，经常需要分析页面UI的不同对转化率的影响，所以需要的页面不是几个，而是几十上百个，还在不停增加，每周都有三五个页面增加。&#xA;由于vue主要是以开发单页SPA应用为主的，在开发人员不考虑真实需求的情况下自然会使用流行的技术，最终把网站开发成一个单页应用。单页应用的特点就是&lt;strong&gt;单页&lt;/strong&gt;，就是把不同的页面做成一个页面一次加载，加载完成后页面之间的切换就会很快，一般无需再加载资源，用户体验也会好很多，可以套用一句话：“一次等待，处处快速”。&lt;/p&gt;&#xA;&lt;p&gt;这个特点在管理后台项目中很合适，但是在只需要展示一次的项目中也合适吗？不合适。&lt;/p&gt;&#xA;&lt;p&gt;我们的网站项目是用来做很多落地页的，各个落地页之间没有关联性，不会A页面跳到B页面，从B页面跳到C页面，A页面中不需要B页面的资源，B页面也不需要C页面的资源。然而vue项目打包的时候会把每个页面独有的一些资源都融合在一起，形成公共资源。结果就显而易见了，一个页面总要加载一堆无关资源，不仅资源大，还有很长的白屏时间，用户体验下降。&lt;/p&gt;&#xA;&lt;p&gt;还有一点不该使用单页应用的原因是我们的页面是纯展示的页面，不需要很多数据交互，vue能起到什么作用？操作数据？驱动UI？模块化？通通不需要。现代html可以不借助第三方库和框架的情况下完全能实现。&lt;/p&gt;&#xA;&lt;h3 id=&#34;结论&#34;&gt;结论&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;JavaScript 的最大优势之一是它不需要编译，所以可以在浏览器中直接运行。这样你就可以立刻获得编码的反馈。入门门槛很低；你只需一个文本编辑器和一个浏览器就能编写软件了。&#xA;不幸的是，这种简单性和可访问性已被称为过度工具链的风气破坏了。这种风气已经将 JavaScript 的开发工作变成了一场噩梦。我甚至看过一整套关于配置 Webpack 的课程。这种乱象需要有个尽头——生命苦短啊。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;VUE，React这类框架用于构建&lt;strong&gt;应用&lt;/strong&gt;方面很合适，但不太适合构建&lt;strong&gt;网站&lt;/strong&gt;。应用是需要有较多的UI和数据方面的交互，而网站则更多的是信息展示，你可能根本不需要JavaScript（框架）。&lt;/p&gt;&#xA;&lt;p&gt;追求新技术可以让我们获得新奇感，成就感，解决老问题，而不是带来新问题。复杂性才是造成软件问题的根本原因。——试问：离开框架的你还会开发网站吗？&lt;/p&gt;</description>
    </item>
    <item>
      <title>说道说道前后端分离</title>
      <link>https://blog.hopefly.top/blogdetail/5b66733ae7e37a672f015c10/</link>
      <pubDate>Sun, 05 Aug 2018 03:47:06 +0000</pubDate>
      <guid>https://blog.hopefly.top/blogdetail/5b66733ae7e37a672f015c10/</guid>
      <description>&lt;p&gt;要说前端界的发展速度，那真是快！&lt;/p&gt;&#xA;&lt;p&gt;2012年那时候接触过extjs，用于企业级后台开发还真不错，有好看的UI界面，组件丰富，基本能满足各类需求。但此时，HTML5正在蓬勃发展，尤其是乔布斯宣布苹果设备不支持flash后HTML5发展更是迅猛。并且angularjs这类MVVM框架被大多数所知，reactjs,vuejs如雨后春笋般生长。&lt;/p&gt;&#xA;&lt;p&gt;2014年使用了一段时间angularjs，感觉学习难度有点大，并且据官方说2.0下向下兼容于是放弃继续学习。2015年使用vue1.0做了一个项目后我逢人便说angular，vue有多好用，推荐他们放弃jquery使用vue。不到2年时间再看看前端界，vue，react等框架已经是前端开发标配，如果你说公司项目还在使用jquery会被人笑话，对于前端新人MVVM框架是必学，jquery反而不会被重视。&lt;/p&gt;&#xA;&lt;p&gt;这就导致一个结果：**“手里拿着锤子，看什么都是钉子”，因为有锤子的关系，遇到任何问题，都会先想如何用锤子解决。久而久之，陷入了一种思维定式。任何工具带来便利的同时，也带来了局限性。而这往往是用锤子的人很难看到的。**就拿一个需要SEO的网站来说，该选择哪种技术好？如果只会vue，那么肯定是选择vue，就算vue不太适合做这类网站，也会拿出ssr来强行做事。殊不知需要SEO的网站使用静态文件是最合适的。大多数人认为前后端分离是使用vue，react，angular，使用jquery的不叫前后端分离，这完全是搞混了概念，实际上后端的controller层也属于视图层，也可以归属于前端。&lt;/p&gt;&#xA;&lt;p&gt;现在去网上一搜，问一下身边的人怎么看待前后端分离的，大多数人秉持着支持的态度，认为前后端分离好处多多，列举几条：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;专业的人做专业的事&lt;/li&gt;&#xA;&lt;li&gt;前后并行开发，效率高&lt;/li&gt;&#xA;&lt;li&gt;前端工程化，组件化&lt;/li&gt;&#xA;&lt;li&gt;解耦&lt;/li&gt;&#xA;&lt;li&gt;降低了开发学习难度&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;等等……&#xA;&lt;img src=&#34;https://qn-img.hopefly.top/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20180805104325.jpg&#34; alt=&#34;前后端分离&#34; title=&#34;前后端分离&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;大家说的都说到点上了，这也是前后端分离能发展起来的驱动力。但是道理说的都挺好，如果不结合实际情况的话就是大炮打蚊子，不但达不到理想的效果还浪费资源。而且前后端分离带来的负面情况也不可忽视：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;增加了沟通成本，一些前后端都可以做又都不想做的事或许只能由权利大的来决定。&lt;/li&gt;&#xA;&lt;li&gt;一般前端开发速度会比后端快，在接口没开发好时前端只能闲等着。也有反过来的情况。前后端分离也意味着任务关联性减弱，可能不是同时开发，需要一方催着一方来完成。&lt;/li&gt;&#xA;&lt;li&gt;跨域问题导致联调困难，前端只能等待接口开发上了服务器才能调试。&lt;/li&gt;&#xA;&lt;li&gt;职责分离后确认职责也困难，一个问题出现到底是谁的问题？谁解决？&lt;/li&gt;&#xA;&lt;li&gt;一个需求需要前后端开发同时参与理解需求，有理解偏差问题。&lt;/li&gt;&#xA;&lt;li&gt;小公司多一个人多一份支出。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;那么到底该不该进行前后端分离，如何进行技术选型？这需要根据一些实际情况来决定，大体判断准则有以下几点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;后台系统采用前后端分离比较合适。&lt;/li&gt;&#xA;&lt;li&gt;需要SEO引流的就不要强行前后端分离了，react，vue的服务端渲染也很勉强，徒增开发难度而已。&lt;/li&gt;&#xA;&lt;li&gt;数据交互比较多的使用前后端分离，操作数据比jquery方便。&lt;/li&gt;&#xA;&lt;li&gt;页面本身特别简单，只负责简单数据展示，要求打开速度，直接服务端渲染即可。这种页面本身就是单页面，如果还要使用框架就是多此一举，增加页面负担，增加开发调试难度。&lt;/li&gt;&#xA;&lt;li&gt;开发资源充足最好前后端分离，开发资源不足时不分离，一人包揽前后台端反而更快。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;最后，前后端分离是一个趋势，但不是必须。更准确的说法应该叫做“前后端分工”，毕竟在5年前这些活都是一个开发来做的，因为技术复杂性提升，前端不想只是切图，后端不想学变化太快的前端就出现了分离。你可以想象测试的工作，现在的测试大多还是测业务，但是也出现了一个自动化测试的职位，因为测试不想天天鼠标点呀点的测，想搞点高深的东西，而开发又特别烦写单元测试代码，这就又出现分离。再者，数据库也是一样，所以出现了DBA这个角色。谁知哪一天又会合起来呢！&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
