leuisken.github.io/_posts/2015-07-17-web-dev.html
2015-07-24 10:40:16 +08:00

44 lines
9.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: post
category: "other"
tag: [Web开发]
title: WEB开发新人指南
---
<p>一、首先要知道的</p>
<p>如今我们使用的互联网客户端与服务器端的交互无时无刻不在发生。比如我们在浏览器打开网页浏览器就是客户端将网页数据发过来的也就是服务器。其实服务器并没有什么特别的也就是一台昼夜不停运转的电脑罢了。每一台入网的机器都会被分配一个ip我们可以通过ipconfig / ifconfig这样的命令知道我们电脑的ip地址。服务器本身运行着服务器程序他们监听着来源于网络的请求并对请求进行响应。</p>
<p>比较常见的服务器程序比如apache / Nginx / IIS等等我们可以通过以下这样的一个小的实验来了解网络中的客户端与服务器是如何进行交互的。</p>
<p>实验:一个小的局域网</p>
<p>第一步运行你电脑上的服务器程序以apache为例在apache的www目录下放入一些网页文件然后在浏览器的localhost下浏览网页。</p>
<p>第二步在电脑上打开wifi共享软件通过ipconfig / ifconfig命令查看本机在内网的ip让手机连接电脑共享的wifi或者是两者同连一个路由器的wifi在手机浏览器的地址栏输入电脑的ip进入电脑的服务器并浏览网页。</p>
<p>上面的小实验的第二步,就模拟了一个简单的浏览器+服务器系统BS系统也在一定程度上反映了网站基本的访问原理。同时这也是Web前端开发中真机测试移动端页面的一个行之有效的方法当然你也可以通过这种方式实现局域网络的文件共享。</p>
<p>继续深入一步我们在浏览网站的时候很少使用ip直接访问的而是用www.baidu.com这样的域名域名与提供对应服务的服务器的ip地址通过DNS服务器相互对应。我们可以通过ping命令也可以通过一些在线的工具<a href="http://ping.chinaz.com">http://ping.chinaz.com</a>来获取一个网站的ip地址有时候ping出来的ip是不一样的一般和你使用网络的地点有关这主要是为了将对服务器的请求分流减轻服务器的压力保证网站的访问速度。</p>
<p>二、开发的过程与设计的艺术</p>
<p>如何从0建立一个网站这就涉及到软件产品的开发了。一般会有以下几个职位。产品PM负责对软件产品的功能目标用户等许多部分进行一个详细的归纳整理包括前期的功能地位和后期的功能修缮设计UE对用户使用的产品界面、交互方式进行统筹和设计前端FE活跃于客户端的程序员负责使用代码实现设计师的设计并与后端协调数据在客户端的渲染工作后端BE活跃于服务器端的程序员为前端的渲染提供所需的数据系统SA保证开发过程中对于服务器权限的管理与协调以及服务器运行环境的提供同时保证网站在生产环境中的平稳运行。</p>
<p>限于个人能力,我在此仅从前端和后端这两个角度,探讨网站实现的技术细节,其中会涉及许多具体的解决方案,供大家参考。</p>
<p>现在我们从这样的角度去看一个网站我将他分为三层视图层数据层以及控制数据在视图上的显示方式的控制器。举个例子一个留言板他的数据层会包括留言者的留言内容、留言时间、留言者的信息等内容。这些数据就像一张excel表格一样存储在我们的服务器。而我们的用户肯定不希望看到一个简陋的表格他们希望看到的至少是一个界面数据内容被清新美观的显示在我们的浏览器上而这个界面也会随着数据内容的增删修改而做出相应的调整。存储表格数据的就是数据层用户看到的就是视图层让界面随数据产生改变则是控制器的使命。</p>
<p>现在,从技术的角度我们去实现他。首先,前端工程师根据设计师的设计,做出视图层的模板,后端工程师也做好相应的数据存储工作,包括设计创建数据库、数据表等等。现在,基本的工作完成。继续下去,我们则有很多的选择。</p>
<p>选择一:后端渲染数据到视图。</p>
<p>这种方法,就是前端将模板交给后端,告诉后端具体在哪个位置放什么样的数据,放的时候有什么具体的要求,剩下的渲染工作完全交给后端处理。这样的方法实现起来门槛低,而且由于服务器计算性能一般情况下强于客户机,后端来刷模板简单粗暴速度快,没有任何争议。缺点是后端工程师由于处理了数据填写的工作,相当于涉及了视图层(即前端)的工作内容,导致分工不够明确;同时,由于是后端更新数据,而后端代码是运行在服务器上的,每次要更新都要刷新页面重新请求一个完整的页面,某种意义上来说,用户体验相对较差。</p>
<p>选择二:后端将数据生成为小的数据文件,前端获取数据并由前端更新视图。</p>
<p>这种方法涉及到前端的Ajax。说白了就是在后台异步加载另外一个页面在加载过程中用户不会看到任何变化而加载完成后相当于在前端程序里获取了一个字符串剩下的任务就是将这个字符串解析取出里面的数据并将对应内容渲染到相应的位置上。通过这种方式首先可以保证视图层显示的内容都完全由前端工程师负责分工明确实现了一定程度上的前后端分离同时与服务器交互的文件大小从一整个页面缩小到了一个仅仅包含要更新的数据的小文件交互的量减小带来性能上的提升另外由于交互文件一般使用json这种多数编程语言都可以解析的数据格式不仅可以给网页前端使用也可以给移动端app的前端开发使用统一了接口扩展时减小了工作量。</p>
<p>选择三单页应用SPA</p>
<p>我先解释一下单页应用和传统网站相比他更接近于移动端应用程序其核心就是将路由控制在前端工程师的手里。核心技术除了上面的Ajax还有pushState又有人将两者合称为PJAX。</p>
<p>先说什么是路由路由可以理解为你网站域名后面的内容比如www.abc.com/p/123这样的网址后面的/p/123就标明了一个路径。可以类比于我们电脑的磁盘当我在路径的位置输入C:/p/123的时候我希望看到C盘下p文件夹下123文件夹的内容当123变成了456显示的内容应该有些变化。如果456文件夹存在显示该文件夹的内容如果不存在则会弹出错误信息提示不存在。对应我们的网站如果当/p/123变成/p/456的时候也应该给出对应的显示。路由由前端控制的含义就是说网站url的变化与对应的显示由前端处理。你的整个网站实际上只有一个页面前端根据url的变化通过Ajax异步加载需要的数据然后通过pushState操作浏览器的历史记录达到与浏览普通网站同样的效果。</p>
<p>SPA最大的优点大概就是响应速度了。当然使用SPA对前端的技术提出了相对比较高的要求。使用SPA的一般情况是你要做一个类似于安卓app的网站如淘宝的手机站和Gmail都是相当典型的SPA。不过虽然现在SPA很多并不是所有的场景都适合使用SPA的。</p>
<p>淘宝收藏夹的架构:</p>
<p>作为访问量如此高的网站淘宝是怎么做的。首先php的后台肯定是担负不起这样的访问量的。在淘宝UED他们介绍了“中途岛”项目基本架构是前端工程师使用Node.js进行模板渲染保证模板的渲染由服务器完成提高效率Node.js访问由java后台封装的高级数据接口而java在访问数据库的时候则是使用C语言来实现最有效率的访问。技术细节可以参考淘宝UED的博客。</p>
<p>三、项目开发中值得一提的点</p>
<!-- <p>任务进度管理:</p> -->
<p>版本控制:</p>
<p>几乎没有任何成功的软件项目是一个敲代码敲出来的况且就算是一个人敲代码也应该对自己所做的改动有所记录和备份。在这里我将介绍两种使用git进行版本控制的方式供大家参考。</p>
<p>分支管理:</p>
<p>整个项目是一个大的仓库这个大的仓库由于不同的修改而有不同的分支。一般来说有master稳定发布版本 / dev开发中的相对稳定版本 / 开发人员个人分支集中个人的修改这些。一般的工作过程为个人会在个人的分支上修改然后push到dev分支稳定下来的dev分支作为新的版本再合并到master分支。那一部分出了问题就在哪一部分进行修改。git在你每次更新分支的内容时都要求你输入一段描述修改的文字这在将来的版本控制和回退上都会很有帮助。</p>
<p>仓库管理:</p>
<p>个人理解其实是扩大化的分支管理项目负责人建立项目仓库项目开发人员fork母仓库做了自己的修改后对母仓库发出pull request申请合并到母仓库。这一方法最大的优点就是方便负责人进行code review保证代码质量同时也可以方便对开发人员的贡献度进行考核。通常公司里会选取这种方式。</p>
<!-- <p>项目的持续集成:</p>
<p>四、针对各个方向的啰嗦</p>
<p>前端:</p>
<p>模板引擎、CSS预处理器和更完善的javascript</p>
<p>项目自动化构建</p>
<p>自动测试框架</p> -->