--- title: "前端开发" date: 2019-12-26T16:07:49+08:00 draft: false --- # 序 ```前端设计,我个人认为最重要的还是html,css,js三件套。其中想要见效快就得把html和css搞得大概明白,而js我个人认为也很重要,具体不多赘述。目前的前端框架有很多,但是万变不离其宗,都是在这三件套的基础上发展的。 ``` ## 前端框架类型 想要让排版好看,好用的有bootstrap等主要用来整排版,组建的。其次,如果想要优化js,简化数据修改的方式,可以用vue,react等框架,这些都能极大的简化js的写法。 我个人目前主要使用bootstrap和vue框架,一个用来搞数据,一个用来美化ui。当然jquery也是我比较喜欢用的。 技巧: ## 使用方式 ### 善用框架 关于vue,两种思路,一种用vue脚手架,这个就对于ui美化没那么自由舒服了。另外一个就是不用vue脚手架,但是还是要用vue。因为vue能够优化数据绑定。 如果要有一个万能的办法去将不同的框架东西套用到一起的话,有办法。使用iframe,传参是可以的。 如果要快速开发,对前端要求也没太高的话,个人感觉vue脚手架很可以,如果对ui要求很高的话,(而且是不想自己从头开始设计的)那个就建议直接使用html。同时vue等操作数据的也可以后期加 ### 善用浏览器 #### 控制台 控制台的输出是很重要的,我们可以直接看到报错内容,也可以作为人肉调试的输出窗口。 ![](https://i.ibb.co/6W6xK7L/2020-02-14-11-38.png) #### network加载 在这个窗口,我们可以看到加载这个网站总计使用的元素,加载的次数,以及加载的先后顺序以及时间。 ![](https://i.ibb.co/dc0pRhm/2020-02-14-11-41.png) #### element 这是一个对于前端css调试十分重要的页面 ![](https://i.ibb.co/1d7bRc0/2020-02-14-11-44.png) 元素的大小等属性 ![](https://i.ibb.co/Ctfc9Yh/2020-02-14-11-45.png) 元素的css之类的属性 ![](https://i.ibb.co/0hC4N7W/2020-02-14-11-47.png) 这里最大的有点就是直接能够看到某个标签的属性,以及能够直接对***属性进行修改***。 同时也可以直接修改html。 #### 其他的也比较重要,不多赘述 ``` 这些工具不仅在开发时有用,在入侵时同样有用。 ``` ### 套html模板 目前通过实践,最好的套模板办法是通过nodejs做为中间层,然后直接将整个html静态网页的文件夹导入。 '主要思路是,使用nodeJS作为中间层,负责控制路由,以及优化ajxa,html上的数据绑定可以通过引入前端js框架的js文件,动态数据绑定' #### 关于套模板中的css等样式重复问题 在套html模板的时侯,我们可能会碰到一种问题,就是我们的模板往往可能只有一个或者少数几个符合我们的需求。 这中时侯,我们可能就会同时套几个模板,那么可能会有一个问题,静态资源重复问题,有些问题是可以解决的,也比较好解决(比如更改名再引用),但是有时候为了求快怎么办呢,有一个必定成功的办法,直接再开一个前端node,新建一个端口。另一个半就就是,同时引入,但是更改css文件的名称,虽然还是不可避免的可能会出问题,但是对于小页面而言,已经可以调节了。 ### vue和jquery配合使用 ``` 一定要注意,this,jquery里的ajax里的this会覆盖调上层的vue的this,导致访问不到值。 ``` ``` <script type="text/javascript"> new Vue ({ el : '#example', data : {data : ""}, created : function(){ var _self = this; $.ajax({ url : 'listTemController/queryTemplate', type : 'post', async : false, data : {list : '3'}, datatype: "json", success : function (data) { console.log(data); _self.data = data.list; } }) } }) </script> ``` ### 关于ajax异步请求导致的数据不一致问题, 异步有点类似我们的并发,可以选择修改ajax异步为同步。 具体只需要修改一个属性 ``` $.ajax({ url:'http://127.0.0.1:3001', type:'POST', data:data1, dataType: 'json', async: false, 这个属性就是异步还是同步属性 success:function(res){ //console.log(res); results.push(res); }, error:function (res) { console.log(res.responseText); } ``` ### 关于用户认证鉴权问题 如要要使用node JS作为中间层做用户代理的话,那么,可以使用jwt技术。jwt技术比传统的session技术要好,可以有效的减轻服务器的压力,轻易架构起多台服务器。 具体做法就是,在这之后的每次请求中,跨域的就自动带上cookie或者其他相关请求,同源的就不用。 在同域的情况下,我们发送请求会默认携带当前域下的cookie,但是在跨域的情况下,默认是不会携带请求域下的cookie 的,比如http://domain-a.com 站点发送一个 http://api.domain-b.com/get 的请求,默认是不会携带 api.domain-b.com 域下的 cookie. 要解决这个问题,我们就要让这个跨域请求可以携带上cookie,做法很简单: - 前端处理 在前端我是使用axios发起网络请求 axios.defaults.withCredentials = true - 在后端,我们也要否允许浏览器携带cookie访问进行设置,也就是说我们要将响应头的credentials设置为true credentials: true, //是否允许发送Cookie ### 关于ssr服务器端渲染 服务器端渲染也就是说在服务器将html渲染后然后返回给前端。 这样相对绝对的纯ajax在客户端获取数据的好处是,减小客户端压力,以及可以进行爬虫了,增强SEO。 有利于首屏加载 使用nodeJS进行服务器端渲染,可行。具体步骤可以自行搜索。 我目前使用nodeJS加上vue进行SSR。注意点 对于vue, - 服务器端渲染过程中,只会调用beforeCreate和created两个钩子函数,其它的只会在客户端执行。 - 由于服务器可客户端是两种不同的执行平台环境,那么一些特定平台的API就不能用了,比如window和document,在node.js(比如created钩子函数)中执行就会报错。并且,我们使用的第三方API中,需要确保能在node和浏览器都能正常运行,比如axios,它向服务器和客户端都暴露相同的 API(浏览器的源生XHR就不行)。