首页
统计
关于
正则表达式手册
Search
1
React中编写css的几种方式
48 阅读
2
rollup.js的个人理解
41 阅读
3
【整理】Nginx基础知识
37 阅读
4
前端工程化的思考
36 阅读
5
package.json的配置参考
35 阅读
默认分类
服务器端
前端工程化
react
vue
nodejs
js+
html&css
问题集录
临时
dylin
gu
登录
/
注册
Search
标签搜索
问题
前端工程化
基础知识
css
数据库
docker
nginx
rollup.js
react
golang
js
性能优化
js基础
dylin
累计撰写
21
篇文章
累计收到
1
条评论
首页
栏目
默认分类
服务器端
前端工程化
react
vue
nodejs
js+
html&css
问题集录
临时
dylin
gu
页面
统计
关于
正则表达式手册
搜索到
4
篇与
的结果
2023-12-24
【整理】开发注意事项-1
开发注意事项考虑 边界值 :如果要展示一个列表,就要考虑列表为空、列表长度超过一页的情况;如果展示的是文字,则要考虑文字为空、文字超长的情况;访问a.b.c时,a或b是否可能为undefined。考虑 特殊场景 :如交互状态(hover、disabled、文字提示)、浮点数计算精度(使用utils方法)、防重复提交、分辨率兼容、移动设备兼容、事件冒泡、防抖和节流;考虑 需求变更和功能拓展 :需求变更是不可避免的,那就要在开发的时候考虑到哪些地方容易变(数值、变量),哪些不容易变(框架、模式),提前做好设计规划,减少因需求变更造成的大规模重构。考虑代码 可读性 :复杂方法标注用途、复杂逻辑解释清楚、修改他人代码先理解上下文并做好自测。保持优化代码的好习惯:所有不合理的问题,都是可以改的,代价大,就细致谋划,不要搁置,避免埋雷。代码越短就越好吗?实际的业务书写中,如果减少10%的代码换来的是可读性变差,那并不推荐这么做。我们推荐的是,在保证可读性的前提下,尽可能让代码变少。 // bad 三元嵌套三元不利于可读性 let message = (age < 3) ? 'Hi, baby!' : (age < 80) ? 'Hello!' : 'What an unusual age!'; // good if (age < 3) { message = 'Hi, baby!'; } else if (age < 80) { message = 'Hello!'; } else { message = 'What an unusual age!'; } // bad if (company == 'Netscape') { return true; } else { return false; } // good return company === 'Netscape';魔法值的问题魔法值,也叫做魔法数值、魔法数字,通常是指在代码编写时莫名出现的数字, 无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白, 严重降低了代码的可读性。除数字之外,代码中作为key值的常量字符串也被认为是魔法值, 尽管其表示含义比数值较为清晰,但是仍然会产生不规范问题。 // 魔法值举例 if(flag === '5'){ ....... } if (businessType === 101){ ....... }通常会采用枚举类型来解决魔法值问题,由于JS中没有枚举类型,可以使用对象字面量的方式来模拟枚举,如下: const BusinessTypeEnum = { SYSTEM: 0, // 系统 CRM: 1, // CRM JXC: 2, // JXC UNKNOWN: 404, // 未知对象类型 CUSTOMER_MANAGEMENT: 100, // 客户管理 CUSTOMER: 101, // 客户 CUSTOMER_FOCUS: 102, // 重点客户 CUSTOMER_DEAL: 103, // 成交客户 CUSTOMER_FOLLOW: 104, // 跟进客户 CUSTOMER_PUBLIC: 105 // 客户公海池 } if (businessType === BusinessTypeEnum.CUSTOMER){ ....... }采用枚举的另外一个好处,当某个值因为需求迭代需求变更时,我们只需要在枚举中将该值替换,并不需要在全局搜素替换。程序中的电车难题如图,当一辆电车快速驶来,无论图上的人采取哪种选择,似乎都是错误的。但是,在程序中出现预期之外的错误必须要导致一个负面结果时,一定要选择代价最小的。举个例子: 某同学开发了一个新手引导弹窗功能,该功能有个透明的全屏遮罩,只有当新手引导结束时,遮罩才会消失。由于程序中存在一处逻辑判断不严谨,导致在特定情况下全屏遮罩不能被关闭,然后整个系统都不能被点击了。一个简单的新手引导功能却引发了系统不可用的严重故障,这是非常大的代价。通过上述例子去分析,系统不可用的负面影响远大于新手引导不可用。因此,我们应该修改逻辑判断方案,当程序脱离预期执行时,直接去关闭新手引导。 // before if (step === 0) { dialog.close() } else { dialog.show() } // after if ([1, 2, 3].includes(step)) { dialog.show() } else { dialog.close() }我们无法保证自己写的代码没有任何差错,但是我们可以提前考虑,万一发生预期之外的错误,我们要如何处理来让损失最低。不要让用户等待由用户触发的交互操作,应立即给予响应。立即响应不等于立即呈现数据,有些异步操作,无法立即呈现数据给用户,但应马上给予loading提示,告知用户数据正在处理中。下面的代码中,用户点击编辑按钮时,会先发起一个异步请求,拿到数据结果后再显示弹窗。这个短暂且没有任何提示的等待,会让用户认为是程序卡顿,体验不畅,间接诱导用户重复点击按钮。正确的做法应该是先展示弹窗,再去请求数据。三元和if该怎么选? // 如果条件表达式后面跟的是返回值,建议使用三元运算,如下方的例子,就可以优先考虑使用三元运算 // good a > b ? 1 : 2 // bad if (a > b) { return 1 } else { return 2 } // 其他复杂的分支代码,写成三元可能并不利于阅读,建议使用if语句,如下面的例子 // good if (a > b && b !== 0) { val = a + b } else { val = a - b } // bad a > b && b !== 0 ? val = a + b : val = a - bwhile和for该怎么选?for循环往往是用来遍历一个固定长度的可迭代对象,遍历的次数一定是<=可迭代对象的长度,如数组遍历、对象遍历等等;for和while在绝大部分场景下都可以互换,只是部分场景下,使用while会更符合我们的直觉。while循环往往用于 不定次数的条件执行 ,即达到目标条件就终止,但我们事先并不知道达到这个目标条件需要进行多少次执行。举个例子,我们希望从1开始,取前10个能整除3或5的数字,参考如下代码: let numArr = [] let i = 1 while (numArr.length < 10) { if (i % 3 === 0 || i % 5 === ) { numArr.push(i) } i++ }while在某些场景下,可以代替递归函数。比如我们希望得到100以内的斐波那契数列: // 使用递归 function fib (prev = 0, next = 1) { if (next < 100) { return [next, ...fib(next, prev + next)] } return [] } // 使用while functon fib2 (n = 100) { let prev = 0 let next = 1 let result = [] while (next < n) { result.push(next) const temp = prev prev = next next = next + temp } return result }上面的例子很难用for循环去实现,因为我们并不知道100以内存在多少个斐波那契数字,但知道终止条件是数字必须小于100,因此更适合用while循环来实现。再来说说递归和while,递归往往在代码量上来看是简洁的,但本质上它是一个N层的函数嵌套,所以直觉上不易理解,且耗性能(不考虑尾递归优化的前提下);while循环只有一层嵌套,所以直觉上更容易理解,且性能更优。这里并不是说递归不好,不推荐大家使用,一来性能并不是大家首先要考虑的问题,二来while只能在部分场景中来代替递归。
2023年12月24日
34 阅读
0 评论
0 点赞
2023-12-12
【CSS】font-weight设置为500显示不出加粗效果
【CSS】font-weight设置为500显示不出加粗效果问题出在操作系统上:macOS 系统默认的华文黑体(STHeiti) 有七个矢量级别:Heavy/Bold/MediumP4/Regular/Thin/Light/UltraLightP2 ,它包含上面 CSS 中设定的 500 这个精度。Windows 系统默认的宋体(simsun) 没有那么多级别。在缺少级别支持的前提下,CSS 会根据回退机制寻找一个类似的精度,结果就变成了400 (Normal)。回退机制:如果指定的权重值不可用,则使用以下规则来确定实际呈现的权重:如果指定的权重值在 400和 500之间(包括 400和 500):按升序查找指定值与 500之间的可用权重;如果未找到匹配项,按降序查找小于指定值的可用权重;如果未找到匹配项,按升序查找大于 500的可用权重。如果指定值小于 400,按降序查找小于指定值的可用权重。如果未找到匹配项,按升序查找大于指定值的可用权重(先尽可能的小,再尽可能的大)。如果指定值大于 500,按升序查找大于指定值的可用权重。如果未找到匹配项,按降序查找小于指定值的可用权重(先尽可能的大,再尽可能的小)。以上策略意味着,如果一个字体只有 normal 和 bold 两种粗细值选择,指定粗细值为 100-500 时,实际渲染时将使用 normal,指定粗细值为 501-900 时,实际渲染时将使用 bold 。
2023年12月12日
23 阅读
0 评论
0 点赞
2023-12-12
云服务器Docker内部署服务后,端口无法访问?
云服务器Docker内部署服务后,端口无法访问,可以按照以下思路进行排查: 以【docker run --name my-nginx -d -p 9395:80 nginx】举例:查看Docker映射是否正确,可使用docker ps命令查看。Docker是否设置端口映射,你的nginx是否放开80端口外部访问判断云服务器安全组是否放通相应端口。例如:查看你的云服务器防火墙是否放开9395端口外部访问。在/etc/sysctl.conf文件内,找到net.ipv4.ip_forward,将默认的参数0改为1,然后执行sysctl -p命令即可。总结:当你检测你的操作都没问题,还不行的话, 只能是服务器的问题,既然是服务器的问题,那就得找客服。
2023年12月12日
28 阅读
0 评论
0 点赞
2023-12-11
本地navcat怎么连接云服务器里的数据库
本地navcat怎么连接云服务器里的数据库首先要检查云服务器里的应用管理-是否有对应的数据库。然后通过运行 cat ~lighthouse/credentials.txt 来查看数据库的登录密码(云服务器数据库的默认密码强度足够高,如果你想自己设置,一定要设置足够复杂的密码,这是血淋淋的教训)。然后把你的ip 端口 用户名 密码输入navcat。下面是可能遇到的问题:1130 - Host '222.92.143.173'is not allowed to connect to this MariaDB server错误消息“1130 - Host '222.92.143.173' is not allowed to connect to this MariaDB server”表明来自特定IP地址(在本例中是222.92.143.173)的客户端尝试连接到MariaDB服务器时,该服务器的配置不允许来自该IP的连接。这通常是因为MariaDB的 user表中的 host字段没有为相应的用户配置为允许该IP地址或任何IP地址(通常使用通配符 %表示)。要解决这个问题,您可以采取以下步骤:连接数据库ssh远程到对于的linux服务器,使用mysql -u root -p 回车输入密码再次回车进行登录登录MariaDB后,显示MariaDB [(none)]> 如果你希望选择一个数据库作为当前工作数据库,可以使用 USE 语句。例如,如果你想选择名为 mydatabase 的数据库,可以执行以下命令:USE mydatabase;访问MariaDB服务器:您需要有足够的权限来登录到MariaDB服务器。这通常意味着您需要服务器的SSH访问权限以及MariaDB的root用户或其他具有足够权限的用户的凭据。检查用户权限:登录到MariaDB后,您可以检查 mysql.user表来查看特定用户的权限设置。使用以下SQL命令:SELECT user, host FROM mysql.user WHERE user = 'your_username';将 your_username替换为尝试连接的用户名。这将显示该用户的所有主机条目。更新用户权限:如果 host字段中没有条目允许来自222.92.143.173的连接,您可能需要更新它。如果您想允许该用户从任何IP地址连接,可以使用以下命令(注意,这可能会带来安全风险,因为它允许从任何网络地址进行连接):GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; FLUSH PRIVILEGES;或者,如果您只想允许来自特定IP的连接,可以这样做:GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'222.92.143.173' IDENTIFIED BY 'your_password' WITH GRANT OPTION; FLUSH PRIVILEGES;但是,请注意,如果用户已经存在并且您只是想要更改其主机设置,您可能需要先删除现有的用户条目(这可能会导致数据丢失,除非您非常确定自己在做什么),然后重新创建它,或者使用 UPDATE语句直接修改 mysql.user表(这通常不推荐,因为它可能会绕过MariaDB的安全机制)。考虑安全性:允许从任何IP地址连接可能会使您的数据库面临安全风险。相反,考虑配置防火墙规则以限制对MariaDB端口的访问,并仅允许受信任的IP地址进行连接。重启MariaDB服务:在某些情况下,您可能需要重启MariaDB服务才能使更改生效。这可以通过您的服务器的服务管理工具来完成。测试连接:最后,从222.92.143.173或其他允许的IP地址尝试重新连接,以确保更改已正确应用。注意云服务器的防火墙防火墙只控制服务器的入流量,出流量默认允许所有请求,可以设置允许或禁止公网或内网对轻量应用服务器实例的访问,未配置规则等同于禁止访问。如何配置防火墙规则如有发现无法访问接口和静态资源的情况,注意检查防火墙。
2023年12月11日
34 阅读
0 评论
1 点赞