当前位置: 首页 > Web前端 > CSS

【杂谈】多学点知识让前端开发锦上添花

时间:2023-03-30 14:59:07 CSS

劝了别人无数次,让别人喝鸡汤,帮别人填坑,自己却掉坑里了1.前言中的前端学习,很多人都关注学习代码(html、css、js)。或者一些框架、库(jquery、vue、react),或者各种工具(webpack、gulp)。在之前的文章中,或者跟别人交流的时候,我都建议别人多多练习,不要光写代码,多学习原理和思想。但是除了代码的知识,作为前端还应该学习什么?以下是近期学习资源的简要列表和整理。如果大家有其他推荐,欢迎在评论区留言。下面的知识可能不需要太深入太详细,但是一定要了解,这样在开发中遇到问题的时候,即使在解决问题的时候没有锦上添花,也是锦上添花。2、对于http和https前端,不可避免的要处理接口。除了与后台交互,请求数据,渲染页面。对于http请求,你也要有一个了解,比如http协议,请求方法,请求过程,结果状态码等,知道了这些,在开发中可能遇到问题的时候,就可以大致知道问题是怎么产生的,知道怎么处理的更快地解决和避免它们。2-1.Request首先是请求,包括请求头、请求行、请求文本。具体看下面的代码:'Fred',lastName:'Flintstone'}});上面说了,method和url就是这次请求的请求行(这里是请求行的一部分信息,其实请求行还包括了http协议的版本等信息)。headers中的属性就是请求头,里面的属性都包含在请求的头中,是服务器获取客户端版本、缓存等信息的一种方式。数据对应请求文本,也就是通常所说的参数。2-2。Response当请求发出并且响应已经返回时,信息可以分为响应行、响应头和响应文本。响应行以看云请求为例。下面的代码是本次请求的响应行,返回请求的http协议和版本、状态码、请求状态等描述信息。请求地址:https://www.kancloud.cn/yunye/axios/comment?article_id=234845&page=1请求方式:GET状态码:200OK远程地址:117.23.61.221:443响应头响应头格式与请求头,返回的版本,缓存等信息。响应文本通常是接触最多的响应文本,是日常开发需要的数据。开发人员拿到数据后,会进行相应的处理。2-3。关于https关于https。我们先了解一下http的缺点。https是在http的基础上进行加密处理。1.通讯采用明文不加密,内容可能被窃听。2.通讯方身份未经核实,可能存在伪装。3.无法验证消息的完整性,可能被篡改。2-4.关于http和https的相关信息这里只是简单的提一下,详细的推荐看下面的信息。HTTP教程HTTP协议【详解】-经典面试题一个故事讲完https3.ResponseStatusCode响应状态码上面说了,这里简单写一下。在前端,请求接口可能会暴露在各种情况下。常见的如下。如何解决,具体问题具体分析。状态码含义200请求成功400参数错误403拒绝或禁止访问(无权限访问)404地址不存在405客户端请求中的方法被禁止(一般是请求方法错误)500服务器报错502请求超时,无效网关503ServerOverloadormaintenance,unabletorespond3-1.参考详细的状态码请参考以下内容。HTTP状态代码4.前端安全4-1.XSSXSS(CrossSiteScripting)是一种跨站脚本攻击。为了区别CSS,简称为XSS。XSS攻击方式是在网页中插入恶意的JavaScript代码。当用户浏览网页时,插入的代码就会被执行,从而达到攻击的目的。比较多的应用之一是在网页的一些公共交互区域。比如在搜索文本框中,除了可以输入一些关键字,还可以输入一些JavaScript代码。一旦点击代码进行搜索,代码就会被执行,从而达到攻击的目的。下面的例子在文本框中输入上面的代码,然后点击提交,就会弹出用户的cookie。XSS预防1.将重要的cookies标记为HTTPONLY,这样就无法调用JavaScript代码,只能调用http。或者在会话中保存重要信息。2.只允许用户输入我们期望的数据。例如,在消费金额框中只能输入数字和小数点。3.加密数据。4.过滤或去除特殊的HTML标签,过滤JavaScript代码等。4-2.CSRFCSRF(Cross-siterequestforgery)是一种跨站请求伪造。XSS利用站点中受信任的用户。与XSS不同,CSRF通过假装来自受信任的用户并在受信任的网站上发出请求来窃取信息。事实上,攻击者盗用了受害者的身份,并以受害者的名义向网站发出了恶意请求。CSRF攻击的思路参考一张CSRF攻击原理和防御的图来说明。图片来自:CSRF攻击原理及防御按照步骤,看了图片相信不难理解,就是在一个网站里预留一个cookie,然后访问一些危险的网站,然后用户信息被危险网站窃取。CSRF防御1.在表单中添加一个Hash值来验证这确实是用户发送的请求,然后在服务器端验证Hash值。2、验证码:用户每次提交时,都需要用户在表单中的图片上填写一个随机字符串。3.修改和添加重要信息,如密码、个人信息操作,尽量使用post。避免使用get来暴露url上的信息。4-3。反爬虫不同于以往的XSS、CSRF攻击防护。反爬虫的目的是为了防止网站的重要数据被别人拿走,比如电商的交易金额、电影网站的票房统计、音乐网站的评论等等。反击爬虫,前端工程师的脑洞能有多大?五、渲染过程,原理1、浏览器通过DNS解析URL,找出对应的IP地址;2、向IP地址发起网络请求,进行http协议会话:客户端发送一个header(请求头),服务器返回Header(响应头)3、服务器根据请求,处理完成后返回文件数据,浏览器收到文件数据(HTML、JS、CSS、图片等);返回一个页面(根据页面上的外部链接)4.浏览器收到文件后,解析加载的资源和对应的内部数据结构(网页渲染)6.在跨域和跨域方面,我们平时接触不多,这里的相遇也是为了让后台允许跨域(跨域资源共享),但是这个跨域也是绕不开的话题。由于篇幅局限性,以下作简要说明。6-1。情况分析URL描述是否允许通信http://www.example.com/a.js,http://www.example.com/lab/b.js同域名不同文件或路径允许http://www.example.com:8000/a.js,http://www.example.com/b.js同一个域名,不允许不同的端口http://www.example.com/a.js,https://www.example.com/b.js同一个域名,不同的协议不允许http://www.example.com/a.js,http://192.168.2xx.2x/b.js域名和域名对应同一个ip不允许http://www.example.com/a.js,http://x.example.com/b.js,http://domain.com/c.js主域相同子域不同允许http://www.example.com/a.js,http://www.demo.com/b.js不允许不同的域名6-2.解决方案网上有很多跨域的解决方案,大家看看参考一下即可。虽然列出了这么多,但我只用过两个。1、jsonp2、document.domain+iframe3、location.hash+iframe4、window.name+iframe5、postMessage6、跨域资源共享(CORS)7、nginx代理8、nodejs中间件代理9、WebSocket协议6-3。参考数据前端常用跨域解决方案(全)前端跨域知识总结七、性能优化这只是一个大概的思路,具体操作还得自己问搜索引擎。7-1。首屏优化按需加载,非首屏图片使用预加载或延迟加载、DNS、压缩代码、合并图片、减少请求。7-2。算法优化减少冗余代码,控制循环次数,避免庞大的函数等。8.SEO作为前端开发人员,应该和SEO有很多接触。在前端,SEO需要注意的点很多。下面简单写下。在我开发的项目中,也有几个需要SEO的项目。我个人的建议如下:8-1.meta标签可以定义关键字,网站描述8-2。语义html标签一方面,使用html标签来达到语义优化的目的,比如列表使用ul,ol。表格使用table等,不建议所有元素都使用div。还有一个方面就是尽量使用html5提供的语义标签。以前的写法

建议写法
8-3.html嵌套层数不宜过多这是为了让HTML尽量扁平化,避免嵌套过多,但是这个相对比较难。8-4。img标签的四大属性不能省略。alt属性是为了让图片由于网速慢,src引用错误,浏览器禁用图片时,用户使用屏幕阅读器等,当显示失败时,仍然可以显示文字,让用户大致知道图片的内容。宽度和高度是为了防止页面重新渲染或者因为图片无法显示而导致布局混乱。8-5。h1-h6标签的使用1、建议一个页面只出现一个h1标签,一般用在网页日志上。2、h2标签一般用于详情页的主标题。详情页没有logo,标题使用h1。如果有副标题,请使用h3。3.h1-h6标签有自己的权重。如果只是为了设置字体大小或区分样式,不适合使用h1-h6。8-6。其他方面关于SEO的其他方式,网上看有这样的方法,但是我在开发中从来没有尝试过,所以这里简单罗列一下,供大家参考。避免iframe标签重要内容,谨慎使用display:none;尽可能在标签中添加title属性使用布局将重要内容的HTML代码放在最前面使用“rel=nofollow”属性来集中网站应用的权重。但是不清楚前后端分离和单页应用如何做SEO(目前据我所知做不到)。我们现在做的是需要做SEO项目。前端只负责切图,然后布局背景数据,服务器渲染,不是前端。9.堆,栈?栈(stack)会自动分配内存空间,自动释放。堆(heap)动态分配内存,大小可变,不会自动释放。基本类型:Undefined、Null、Boolean、Number和String。这5种基本数据类型可以直接访问。它们是根据它们的值分配的。它们是存储在堆栈(stack)内存中的简单数据段。数据大小确定,可以分配内存空间Size。下面的例子让a=1;让b=a;如果修改bb=2;虽然b最初是由a赋值的,但是a和b是独立存放在栈内存中的,修改其中一个不会对另一个产生任何影响。引用类型:存放在堆(heap)内存中的对象,变量实际上持有一个指针,而这个指针指向另外一个位置。下面的例子leta={name:'waiting'};letb=a;如果修改bb.name='sh';b由a赋值,a和b共享一块堆内存,修改a或b。两者都直接修改堆内存的值,会影响对方。10.Responsive和adaptive这两个概念现在听的不多了。可能是因为现在的主流是PC和手机是两个独立的项目,也可能是因为这两个概念应该是设计图的工作。上次和别人谈这个问题是一年前了,那时候我还是乞兔仔。不过至于这两个概念的区别,大家了解一下就好了。看看下面两张图,你大概就明白了。图片来自:responsive和adaptive有什么区别?(这篇文章可能是抄袭,但由于找不到图片来源,在此声明一下)简单来说:Adaptive:一个网页,根据屏幕的宽度变化而变化。只有一组代码。在个别屏幕上,排版很丑,但设计和开发成本很低。响应式:一个网页根据屏幕的宽度显示不同的效果,基本上有两套以上的代码。在所有屏幕上显示效果都很好,但设计、开发成本很高。自适应示例:携程响应示例:segmentfault11。之所以要发这样的总结,总结这些概念,是因为我跟别人说话的时候,总有一个是非的概念。所以最近我花时间研究了这些概念,并与大家分享这些知识。这些概念性的知识可能只是一点点了解,了解一下就好了。有些可能需要深入了解。这取决于个人需要。最后,如果大家有什么比较重要需要理解的概念知识推荐,欢迎在评论区留言。--------------------------华丽的分割线-------------------------想了解更多,关注我微信公众号:手厚书阁