前端
哈娄
前端开发
展开
-
npm,yarn和pnpm
npm,yarn和pnpm区别原创 2023-03-03 14:52:23 · 437 阅读 · 0 评论 -
react native 实现拖动view (完善边界处理)
react native实现拖拽view原创 2022-07-14 10:01:53 · 1483 阅读 · 2 评论 -
antd RangePicker/DatePicker 动态满足多个条件禁用
DatePicker的disabledDate动态满足多个条件禁用原创 2022-06-27 09:00:00 · 700 阅读 · 0 评论 -
关闭/刷新浏览器,刷新页面发送请求解决方案
目录需求背景:踩坑记录:最终方案:记录登录时长,退出/异常退出的时候进行退出接口请求,完成退出标记,后端统计时长。navigator.sendBeacon(url, data)。使用blob方法传对象格式参数给后端。 参数表明 将要被发送到的网络地址。 可选 参数是将要发送的 ArrayBuffer、ArrayBufferView、Blob、DOMString、FormData 或 URLSearchParams 类型的数据..................原创 2022-06-21 12:18:27 · 1274 阅读 · 0 评论 -
sourcetree 每次拉取和推送都要输入密码
1. 点击终端2.在终端输入下代码,回车。git config credential.helper store3.拉取一次代码,在弹框中输入一次密码。4.之后的拉取和推送都不再需要输入密码了。原创 2022-04-22 18:36:05 · 2241 阅读 · 0 评论 -
xcode打开ios 的xcworkspace工程闪退问题
解决步骤: 找到ios下的的xxx.xcworkspace文件夹 右键显示包内容 删除xcuserdata 重启xcode原创 2022-02-14 15:40:59 · 1416 阅读 · 0 评论 -
nginx浅析5-镜像服务器
proxy_store作用是 把静态文件直接在本地硬盘创建并读取, 首次访问会自动获取源站的静态图片等文件,之后访问就是直接在CDN服务器读取,加快了速度。代码:http { server { listen 80; // 服务默认端口值 server_name localhost; // 访问server名称 location /test.html { expires 3d; proxy_se原创 2021-08-04 08:55:46 · 171 阅读 · 0 评论 -
版本回退 git reset/revert 选择区别
1.git reset原理:git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。版本之后的记录都会被删除。适用场景:如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。查看版本号:可以使用命令“git log”查看: 使用“git reset --hard 目标版本号”命令将版本回退 使用“git push -f ”强推提交更改 (简单的git push报错)2.git revert原理:撤销某一...原创 2021-08-02 09:40:38 · 345 阅读 · 0 评论 -
nginx浅析4-限流(秒杀,高并发)
限流:控制单位时间内用户访问服务器的次数 (秒杀,高并发场景下使用)限流算法:令牌桶算法 漏桶算法1.令牌桶算法算法思路:令牌以固定速率产生, 放到令牌桶中 令牌桶放满时,多余令牌丢弃 请求要在桶中拿到令牌才能被处理 令牌不够时,请求被缓存2.漏桶算法算法思路:请求在上方倒入水桶,在水桶下方流出被处理 来不及流出的请求 就缓存在桶中, 以固定速率流出 水桶满后丢弃两个算法区别:漏桶:只有一个桶,缓存请求,匀速处理,多余请求直接丢弃。强制限制数据的实...原创 2021-07-28 17:01:02 · 734 阅读 · 2 评论 -
nginx浅析3-负载均衡
负载均衡:在服务集群中,需要有一台服务器作为调度者, 客户端所有请求都由调度者接受,调度者再根据每台服务的负载情况,分配给指定服务器进行处理。负载均衡几种配置weight权重 iphash1.权重方法配置 weight权重比例,访问次数比例是3:1http { upstream halou2 { server 127.0.0.1:7003 weight=3; server 127.0.0.1:7004 weight=1; } ..原创 2021-07-22 10:01:14 · 698 阅读 · 2 评论 -
nginx浅析2 - 反向代理配置
模块的中文解释可以看上一个文章:模块名称含义简介代理配置http { // 代理服务器组群, 访问时会随机匹配到一个没有被占用的地址,减小服务器压力效果 upstream halou{ server 127.0.0.1:7001; server 127.0.0.1:7002; } upstream halou2 { server 127.0.0.1:7003; server 127.0.0.1:700.原创 2021-07-20 17:25:49 · 162 阅读 · 1 评论 -
nginx浅析1-模块配置简介
nginx常用功能api接口转发 反向代理 静态资源部署1. events模块 (工作模式)events { worker_connections 1024; // 工作连接数 一般1024就好}2. http模块 (http配置)2.1 upstream (负载均衡服务器设置)2.2 server (主机设置)localtion (匹配url) include (再读取生效哪些子文件)http { // 设定文件mime类型, 类型在配置文件..原创 2021-07-20 16:56:34 · 183 阅读 · 1 评论 -
前端axios请求, 后端接口返回文件流,完成下载
(设置相应数据的类型,设置后后台返回的数据会被强制转为blob类型)2.声明a标签, 完成下载功能函数。得到接口的 文件流返回值res.data, 调用此函数 downloadFn(res.data) 完成下载原创 2021-05-31 10:23:12 · 4762 阅读 · 4 评论 -
javascript设计模式---发布订阅模式
发布订阅模式订阅方对这个对象发起一个订阅的需求,当这个对象变化时,第三方会告诉订阅方,触发函数逻辑 -----主动权在第三方。(这也就是和观察者的区别)原创 2021-05-21 17:05:51 · 166 阅读 · 0 评论 -
h5页面实现浏览器全屏显示
目录开启全屏显示退出全屏显示获取当前是否全屏状态开启全屏显示let el = document.documentElement;// 不同浏览器兼容方法调用if(el.requestFullScreen){ el.requestFullScreen();}else if(el.webkitRequestFullScreen){ el.webkitRequestFullScreen();}else if(el.mozRequestFullScreen){ el.moz原创 2021-05-20 14:38:33 · 2899 阅读 · 0 评论 -
element-ui 动态表单规则,初始化规则报红提示解决
今天在做一个动态表单规则的需求, 但是赋值给rules规则值之后,初始化的时候,表单就会检验报红。解决办法如下:const ruleObj = { date1: [ { required: val, message: '请选择开始日期', trigger: 'change' } ], date2: [ { required: val, message: '请选择截止日期', trigger: 'change' } ],}this.rules =原创 2021-04-14 09:22:03 · 7416 阅读 · 7 评论 -
为什么javascript不能有多个线程
作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了避免复杂性,JavaScript就是单线程。为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变原创 2021-03-22 09:44:08 · 431 阅读 · 0 评论 -
面试--JavaScript单线程
GUI 渲染线程绘制页面,解析 HTML、CSS,构建 DOM 树,布局和绘制等 页面重绘和回流 与 JS 引擎线程互斥,也就是所谓的 JS 执行阻塞页面更新JS 引擎线程负责 JS 脚本代码的执行 负责准执行准备好待执行的事件,即定时器计数结束,或异步请求成功并正确返回的事件 与 GUI 渲染线程互斥,执行时间过长将阻塞页面的渲染事件触发线程负责将准备好的事件交给 JS 引擎线程执行 多个事件加入任务队列的时候需要排队等待(JS 的单线程) 定时器触发线程 负责执行异步的定时原创 2021-03-18 09:43:09 · 135 阅读 · 0 评论 -
函数防抖和节流实现
函数防抖function debouce(func, delay) { let start; return (...args) => { clearTimeOut(start) start = setTimeout(() => {func(...args)}, dealy) }}函数节流function throttle(func, delay) { let lock = false; return (..原创 2021-03-18 08:24:42 · 199 阅读 · 0 评论 -
Vue混合机制mixins使用
1.和正常父子组件引用区别父子组件引用:(是相互独立的, 通过props传值调用) 父组件 + 子组件 ==>父组件 + 子组件mixins:(集合成一个新的组件,在同一个作用域内,直接使用) 父组件 + 子组件 ==>new父组件2.mixins使用1. 写一个mixins文件,mixins/common.js。暴露出对象结构export default { methods: { testMix...原创 2021-03-01 15:20:08 · 239 阅读 · 0 评论 -
react预览回显html字符串 反转译方法
后端接口返回html结构,前端进行预览展示,需要先转译,然后进行div的dangerouslySetInnerHTML属性进行展示// 函数方法部分 const HTMLDecode = (text: any) => { let temp: any = document.createElement("div"); temp.innerHTML = text; let output = temp.innerText || temp.textContent; te.原创 2021-01-18 16:03:29 · 492 阅读 · 0 评论 -
对象参数转成url参数拼接
const obj2strUrl = (obj) => { let str=""; for (let key in obj) { str = `${str}${key}=${obj[key]}&` }; str = str.substring(0, str.length-1); return str; }原创 2021-01-12 18:33:49 · 1944 阅读 · 1 评论 -
Vue插槽slot使用
1.匿名插槽// 子组件 Child1<div> <slot></slot> // 此时插槽区域内显示文案hello</div>// 父组件<Child1>hello</Child1>2.具名插槽用途:让内容显示到组件内的指定位置// 子组件 Child1<div> <slot></slot> // 显示默认的插槽 <slot name="原创 2021-01-04 20:34:31 · 420 阅读 · 1 评论 -
react源码-setState思路设计解析
1. 调用setState时候并没有立即执行,而是触发Updater更新,将callback函数和nextState进行先添加操作setState(nextState,callback) { // 添加异步队列, 并不是直接进行更新 this.$updater.addCallback(callback); this.$updater.addState(nextState);}2.class Updater { addCallback(callba.原创 2020-12-26 20:14:14 · 338 阅读 · 0 评论 -
面试-函数柯里化
1.什么是函数柯里化通过把接受多参数函数,装换成一系列的嵌套函数,每个函数一次接受一个参数,这就是函数的柯里化。例:1.1 函数柯里化前原创 2020-12-26 15:24:12 · 195 阅读 · 0 评论 -
图片模糊问题,不同分辨率高倍图处理
媒体查询处理背景图.bgImg{ background-image: url(conardLi_1x.png);}@media only screen and (-webkit-min-device-pixel-ratio:2){ .bgImg{ background-image: url(conardLi_2x.png); }}@media only screen and (-webkit-min-device-pixel-ratio:3){原创 2020-11-12 14:23:05 · 542 阅读 · 0 评论 -
真机查看h5页面
前端的h5页面需要起服务之后,真机通过电脑的ip进行访问查看效果,用webpack或者node去搭服务有点麻烦。1. browser-sync node插件包快速搭服务文档参考:http://www.browsersync.cn/#install首先安装BrowserSync :npm install -g browser-sync 其次在项目文件夹下运行:browser-sync start --server --files"index.html",会启动你的h5页面了。 (修改...原创 2020-06-19 16:34:22 · 560 阅读 · 0 评论 -
使用ES2020优化冗余代码
目录可选链空值合并运算符dynamic-import可选链用途:可选链可让我们在处理多层级对象时不再需要进行冗余的前置防空校验之前:let name = user && user.info && user.info.name使用后:let name = user?.info?.name;可选链中的?表示如果问号左边表达式有值,就会继续查询后面的字段。空值合并运算符用途:数值处理时,对0,''也正常进入逻辑判断赋值// 如果变量l原创 2020-05-22 10:10:45 · 306 阅读 · 0 评论 -
git常用命令
git pull操作将远程指定分支 拉取到 本地指定分支上 ---------- git pull origin 远程分支名:本地分支名 将远程指定分支 拉取到 本地当前分支上-----------git pull origin 远程分支名 将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支) ---------git pull origingit push...原创 2020-04-08 10:14:27 · 189 阅读 · 0 评论 -
performance
window.performance是用来测量网页和Web应用程序的性能api属性介绍memory字段代表JavaScript对内存的占用。navigation字段统计的是一些网页导航相关的数据。timing字段的统计数据,它包含了网络、解析等一系列的时间数据。timing详细说明:startTime:有些浏览器实现为navigationStart,代表浏览器开始unl...翻译 2019-12-17 17:00:23 · 223 阅读 · 0 评论 -
平时开发遇到的问题
1.video视频ios无法播放ios和安卓对视频请求字节不一样。需要后端对视频输出进行断点续传2. 切换清晰度,指定特定时间播放视频无法快进导致3.修改iframe内页面跨域页面无法修改。进行css遮盖, 或者传参数,在被套页面进行调整4.支付宝小程序scroll-view组件,进行设置scrollLeft距离,手动滑动之后,设置滑动前的scrollL...原创 2019-11-13 08:09:11 · 247 阅读 · 0 评论 -
浏览器进程与线程
线程与进程进程是cpu资源分配的最小单位 线程是cpu调度的最小单位(线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程)不同进程之间也可以通信,不过代价较大 单线程与多线程都是指在一个进程内的单和多浏览器是多进程的 浏览器之所以能够运行,是因为系统给他的进程分配了资源(cpu, 内存) 每打开一个Tab页,就相当于创建了一个独立的浏览器进程...原创 2019-11-07 14:55:52 · 281 阅读 · 0 评论 -
js垃圾回收机制
js垃圾回收机制引用计数此算法把 ”对象是否不再需要“ 简化定义为 “对象有没有其他对象引用到它” 。如果没有引用指向该对象(零引用), 对象将垃圾回收机制回收限制: 无法处理循环引用。两个对象被创建,并互相引用,形成一个循环,它们被调用之后不会离开函数作用域,所以它们已经没有用了, 可以被回收了。然而引用计数算法考虑到它们互相都有至少一次引用,所以不会被回收标记清除当变量进入环境...原创 2019-10-24 10:59:46 · 184 阅读 · 0 评论 -
前端路由实现原理
1.hash路由实现1. hash路由改变不会触发浏览器刷新, 会触发相应的hashchange事件<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-widt...原创 2019-10-22 11:19:57 · 218 阅读 · 3 评论 -
前端接口跨域解决方案
1.nginx反向代理解决(访问nginx的端口,代理到首页访问)vim/usr/local/etc/nginx/nginx.conf 打开nginx配置文件,进行配置 server { listen 80; // nginx服务端口 server_name localhost; location / { ...原创 2019-08-04 17:10:27 · 631 阅读 · 0 评论 -
ajax实现
var xhr = new XMLHttpRequest();xhr.onreadystatechange = () => { if (xhr.readyState === 4 && xhr.status == 200) { var data = xhr.responseText; console.log(data); ...原创 2019-08-05 16:15:26 · 120 阅读 · 0 评论 -
React的suspense和hooks
https://segmentfault.com/a/1190000017483690#articleHeader9翻译 2019-08-08 10:56:33 · 376 阅读 · 0 评论 -
modult.export, export default 和 export暴露区别
1. modult.export {}是node.js的写法暴露, 引用需要var xx require('xx')2. export default 和 exportexport default 和export 是 es6的暴露写法,引用是import xx from 'xx'export default:向外暴露成员,可以使用任意变量来接受 一个模...原创 2019-08-02 10:04:59 · 964 阅读 · 0 评论 -
CSS加载阻塞的问题
css加载不会造成dom树的解析 会阻塞dom树的渲染 css加载会阻塞js的执行因此,为了避免让用户看到长时间的白屏时间,我们应该尽可能的提高css加载速度,比如可以使用以下几种方法:使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间) 对css进行压缩(可以用很多打包工具,比如webpack,gulp等,也可以通过开启g...原创 2019-08-30 09:56:00 · 251 阅读 · 0 评论 -
算法复杂度计算方法 , 排序算法和数据结构简介
一 时间复杂度和空间复杂度1.1时间复杂度一个算法的时间复杂度反映了程序运行程序开始到结束所需要的时间。把算法中基本操作重复执行的次数 (频度) 作为算法的时间复杂度没有循环语句记作O(1),也称为常数阶。 只有一重循环,则算法的基本操作的执行频度与问题规模n呈线性增大关系,记作O(n),也叫线性阶常见的时间复杂度有:O(1): Constant Complexity: Con...原创 2019-09-21 10:33:15 · 416 阅读 · 0 评论