avatar
Articles
156
Tags
0
Categories
18

Home
Archives
Categories
Salute Those Who Gaze at the Stars
Home
Archives
Categories

Salute Those Who Gaze at the Stars

React系列:第四回(诡异的点)
Created2024-03-15|React系列
本文重点罗列一些react中,令人诡异的点setstate改变值后,打印出来的,居然还是旧的值看如下代码: const AboutComponent = () => { const [count, setcount] = useState(0) const handleClick = (type) => { setcount(count + 1) console.log('count>>', count) } return ( <div> <span>{count}</span> <Button onClick={handleClick}>React点击</Button> </div> ) } 点击按钮变更count, 打印出来的count的值: count>> 0…写了两三年vue的我表示:what?setstate到底是同步的,还是异步的,开始一波调研 通过setstate ...
Https的加密过程
Created2024-03-13|网络杂谈
本文介绍目下的https协议,是如何进行加密的很久很久以前,数据都是明文传输的,这样的方式毫无安全可见。中间人可以随意获取甚至篡改数据,那现在的什么网上购物、支付等几无可能。后来就出现了https,在http的基础之上,加了一个安全套接层,它的作用,就是用来对数据进行加密和解密。熟悉osi七层模型的同学都很清楚,http是应用层协议,下面还有传输层的tcp和网络层ip。加密解密的操作,可以看作介于应用层和传输层之间,也就是货物上路之前的和卸货时的时间点。 对称加密和非对称加密形象的比喻,对称加密就是一把钥匙,既能加密,也能解密。而非对称加密则是,加密一把钥匙,解密一把钥匙。 加密策略的演进历程 纯对称加密发送请求前,浏览器会给s端发送加密相关的东西: 加密套件和加密列表.前者就是加密的具体方法,后者指的是浏览器能够支持的哪些方法。s端收到东西之后也会给c端返回数据。这里可以浅显的理解为使用的加密方式,也就是对称加密的钥匙。这样,浏览器之后发送的所有请求,都会用这把钥匙进行加密,到了服务器端,再用这把钥匙进行解密。 缺点: 那把钥匙,在传输过程中,也是明文的,因此问题并未解决。 对 ...
React系列:第三回(状态管理)
Created2024-03-09|React系列
本文见到那介绍下React中的状态管理主流就是俩: Redux 和 Context Redux// 安装 cnpm install @reduxjs/toolkit react-redux 基本使用redux是一个状态管理容器,类似vuex,几个重要的角色: store(数据源)、action及reducer(负责修改数据)。下面代码演示他的基本使用: // index.js中引入redux的store和provider方法 import store from './store' import { Provider } from 'react-redux' ... ... <Provider store={store}> <RouterProvider router={router}></RouterProvider> </Provider> // store的index import { configureStore } from "@reduxjs/toolkit"; ...
React系列:第二回(React-router)
Created2024-03-08|React系列
本文简单介绍下react-router的相关内容 类似于vue-router,安装react-router配置react项目的路由。先安装一下: cnpm install react-router-dom 简易版本import { createBrowserRouter, RouterProvider } from 'react-router-dom' const router = createBrowserRouter([ { path: '/login', element: <div>我是登陆页面</div> }, { path: '/index', element: <div>我是内容页面</div> } ]) ... ... // index入口文件配置 <RouterProvider router={router}></RouterProvider> 上面代码中,我们定义了两个路由的匹配规则,效果显示 通用路由 ...
Webkit系列:开篇谈谈2
Created2024-02-26|Webkit系列
代理神器-whistle
Created2024-02-23|前端剑气双修
本文简单备注一下,whistle工具的使用在网络的系列文章中,我们有聊到过代理,何为“代理”?说白了就是双方中间多了个“代理”层,充当中间人的角色。但凡爬过梯子或者去网吧打过游戏的,想必都不会陌生。爬梯子的使用场景是: 上个“油管”,卧槽,咋看个视频都不让呢?架哥梯子吧。首先为什么页面打不开看不了? 油管部署在外围,大陆网跟外界网络中间隔了一层GFW。由于某些政策原因,该站点被上黑名单。当我们的请求到达网络交界处“GFW”时,直接被咔嚓一刀,造成的看不了。为什么架个梯子就可以?当我们打开梯子软件之后,我们访问油管的请求会被梯子软件接管,他会带着这个请求,首先访问自己部署在外围的机器,然后将油管地址给到外围机器,让那台机器代替你的机器,给油管发请求。拿到内容后,返回给你的浏览器。这一波操作下来,就可以访问了。为什么可以了?因为绕过了中间那个审查隔离层。 代理的工具多如牛毛,那么本文的主角whistle,有什么亮眼的功能呢? 拦截请求到目标地址 https://www.baidu.com https://www.zhihu.com
canvas和svg渲染及其他
Created2023-12-10|性能的考量
本文介绍下canvas和svg相关内容渲染层面在目前前端2d层面,图形化开发有两种方案:canvas和svg。借助它们都能帮我们绘制各种图形,但是两者底层原理完全不同。canvas本质就是批量绘制像素点,从dom结构看,他就是一个完整的dom节点,不管你在上面绘制了多少path,最终就是一个dom节点canvas。但是用svg则完全不同,svg绘制的path本身,就是一个个的dom节点。所以如果是海量数据,很显然,使用canvas批量绘制像素点的效率,远高于创建海量的dom节点。但是svg也有优点,因为是一个个的dom,所以支持原生事件(click/hover)、CSS 样式控制,交互开发成本低,且矢量图形缩放无失真。 性能考量-canvas有时候有些极端场景不可避免,比如Canvas 渲染 10 万条折线时出现卡顿,该如何优化? 视图渲染。这种手段的叫法有很多,什么脏矩阵、局部渲染等,但都是一个逻辑:只渲染视图范围内的数据。 数据抽稀。说白了就是减少数据点。比如2d图形开发,本质就是一个个的点组成的。那么一条线段可以用10000个点描述,也可以只用两个点描述(起始点)。这里有一些算 ...
Threejs系列:md2模型
Created2023-12-07|前端三维系列
本文介绍如何将md2模型,导进我们的页面中前面有介绍过使用gltf的loader,加载glb模型。那么针对古老的md2模型文件,如何操作呢? 1. 导入md2库 import { MD2Character } from 'three/examples/jsm/misc/MD2Character.js'; 2. 加入一个平面贴图当作草地 const gt = new THREE.TextureLoader().load( 'textures/terrain/grasslight-big.jpg' ); const gg = new THREE.PlaneGeometry( 20, 20 ); const gm = new THREE.MeshPhongMaterial( { color: 0xffffff, map: gt } ); const ground = new THREE.Mesh( gg, gm ); ground.rotation.x = - Math.PI / 2; ground.material.map.repeat.set( ...
Threejs系列:补间动画
Created2023-12-07|前端三维系列
本文介绍threejs中的补间动画什么是补间动画?物体从a位置移动到b位置,移动过程中的展现形式,就是补间动画。 1. 导入tween库 // threejs自带了,无需安装 import * as TWEEN from 'three/examples/jsm/libs/tween.module' const cube1 = new THREE.Mesh( new THREE.BoxGeometry(2,2,2), new THREE.MeshBasicMaterial({color: 'black'}) ) scene.add( cube1 ); const tween1 = new TWEEN.Tween(cube1.position) tween1.to({ x: -10}, 3000) tween1.easing(TWEEN.Easing.Bounce.InOut) tween1.start() const tween2 = new TWEEN.Tween(cube1.position) tween2.to({ x: ...
Threejs系列:光线投射(捕获点击目标)
Created2023-12-05|前端三维系列
本文介绍threejs中的光线投射我们都知道,threejs是一个三维场景,但是在前端页面中,三维的场景,是画在二维的canvas画布中的,那么问题来了,在二维画布上的点击事件,需要到三维场景中获取点击目标,如何实现?光线投射。 实现思路: 先要归一化,针对坐标系,将通过点击事件获取的坐标值,转换成笛卡尔坐标系(右正上正)的数值,且区间范围控制在[-1, 1]。然后通过光线投射,由转换后的坐标点及相机位置点,得到一条线,这条线穿过的空间中的物体,就是我们的点击目标。 1. 归一化:坐标转换通过点击事件,获取当前画布的x、y。然后根据视图区域的宽高,归一化坐标数据到下图的坐标系中。 具体代码: let mouse = new THREE.Vector2() window.addEventListener('click', (event) => { mouse.x = (event.clientX / window.innerWidth) * 2 - 1 mouse.y = -((event.clientY / window.innerWidth) * 2 - 1) ...
1…456…16
avatar
Miles|佚心
Articles
156
Tags
0
Categories
18
Follow Me
Announcement
変わらない闘志,折れない魂
Recent Post
3d点云项目性能测试2025-12-25
大模型领域调研-第一回2025-12-22
博弈论浅谈2025-12-17
借助AI的能力,实现本地知识库(非工具版)2025-09-26
借助AI的能力,实现本地知识库(工具版)2025-09-25
Categories
  • AI3
  • Miscellany6
  • Paperjs专栏7
  • React系列11
  • Rust系列1
  • Webkit系列4
  • Webpack系列8
  • css专栏5
Archives
  • December 20253
  • September 20255
  • August 20252
  • July 20253
  • March 20251
  • February 20251
  • January 20251
  • December 20241
Info
Article :
156
UV :
-
PV :
-
Last Push :
©2020 - 2025 By Miles|佚心
Framework Hexo|Theme Butterfly