- 博客(10)
- 收藏
- 关注
原创 浅谈HTTP协议的一些版本差异
而在HTTP 2.0中,通过使用多路复用技术,可以在同一个TCP连接上并发发送多个流(Stream),每个流可以承载一个或多个HTTP请求和响应,请求和响应之间没有顺序限制。另外,HTTP 2.0中还引入了头部压缩(Header Compression)技术,可以压缩HTTP头部信息,减少了数据传输的大小,提高了网络性能。而在 HTTP/2 中,头部信息可以被压缩,并且多个请求可以共享同一个连接,这样就可以减少需要发送的数据量和请求次数,从而减少了网络拥塞和 TCP 队头阻塞的问题。
2023-03-15 13:01:47 203
原创 了解Node.js与传统服务器语言的差别
非阻塞 I/O 是一种 I/O 模型,它的特点是在进行 I/O 操作时不会阻塞进程或线程的执行。而在 Node.js 中,所有的 I/O 操作都是非阻塞的,这意味着每个请求都不会阻塞线程,而是通过回调函数的方式异步处理,从而避免了线程阻塞和资源浪费。总之,Node.js 与传统服务器语言最大的差别在于其事件驱动、非阻塞 I/O 模型,这种模型使得 Node.js 能够高效地处理大量的并发请求,并且具有轻量、快速启动、易于开发和部署的优点,这使得它成为构建现代 Web 应用程序和微服务的理想选择。
2023-03-15 12:28:31 369
原创 Vue2的双向数据绑定原理
在一个双向绑定的场景中,当用户修改视图中的数据时,这些修改会触发Vue的setter方法,setter方法会通知所有相关的组件,然后更新视图。反过来,如果数据在Vue实例中发生了变化,getter方法会被调用,这会触发更新视图的操作。这种数据劫持的方式可以实现响应式的数据绑定,因为Vue能够监测数据的变化并立即更新相关的组件。中的所有属性并为每个属性添加了 getter 和 setter 方法,这样当这个属性被读取或被赋值时,就能触发 getter 或 setter 方法中的相关逻辑。方法,从而更新视图。
2023-02-17 15:14:50 563 1
原创 浏览器缓存机制
协商缓存协商缓存指的是浏览器向服务器发送请求,但是服务器通过比较资源的 ETag 或者 Last-Modified 字段来判断资源是否有更新,如果资源没有更新,则返回 304 Not Modified 状态码,通知浏览器可以直接从缓存中获取资源。需要注意的是,强缓存和协商缓存是互相独立的,浏览器在请求资源时,会优先检查强缓存,如果强缓存命中,则直接从缓存中获取资源,不需要向服务器发送请求;:该字段的值是上次请求中服务器返回的 Last-Modified 字段的值,表示客户端缓存的资源的最后修改时间。
2023-02-17 15:10:30 434
原创 实现js的单例模式
在JavaScript中,可以通过创建一个具有私有属性和方法的对象来实现单例模式。如果已经存在,则直接返回该实例。这样可以确保在整个应用程序中只有一个实例存在。在这个示例中,我们使用了一个自执行函数来创建一个闭包,该闭包包含了一个私有变量。方法返回一个包含公共方法和属性的对象,其中包括一个获取单例实例的方法。方法时,它首先检查单例实例是否已经存在。方法来创建一个新的实例,并将其存储在。在这个示例中,我们还可以通过访问。来访问单例对象的公共方法和属性。
2023-02-17 11:41:08 488
原创 cookie和localStorage的区别是什么
需要注意的是,如果使用非加密的HTTP协议传输Cookie信息,那么Cookie信息就会以明文的形式在网络中传输,容易被黑客攻击者窃取或篡改,因此一般情况下,我们建议使用HTTPS或SSL/TLS等安全的协议来保护Cookie信息的安全性。这些数据通常不包含敏感信息,因此不需要进行加密传输。当浏览器向服务器发送HTTP请求时,如果请求头中包含Cookie信息,那么这些Cookie数据会被自动加密,并在传输过程中使用HTTPS或SSL/TLS等协议进行加密传输,以确保在传输过程中不会被恶意程序窃取或篡改。
2023-02-17 11:39:43 3525
原创 手写一个Promise对象
定义Promise原型对象上的then方法,then方法接受两个参数:onFulfilled和onRejected,分别表示异步操作成功和失败时的回调函数。在Promise构造函数内部,定义resolve和reject函数,分别用于异步操作成功和失败时更新状态值和结果变量,并触发对应的回调函数。在Promise构造函数内部,将executor函数作为参数进行调用,并传入resolve和reject函数。在then方法中,根据当前状态的不同,调用相应的回调函数,并将异步操作的结果作为参数传入。
2023-02-17 11:27:12 70
原创 怎么防止接口被恶意地多次请求
这是因为服务器在处理大量请求时,需要消耗更多的CPU和内存资源,而频繁的拒绝请求会导致服务器花费更多的时间和资源在处理这些请求上,从而影响正常的请求处理。当服务器接收到请求时,会根据请求中的相关信息(例如请求的URL、请求的参数、请求的头部信息等)进行一系列处理,最终返回一个响应。此外,还可以考虑采用负载均衡技术,将请求分散到多台服务器上处理,以分摊服务器的负载。请求方法不支持:当客户端使用不被服务器支持的请求方法(比如使用POST请求访问只允许GET请求的接口)时,服务器可以拒绝请求,返回405状态码。
2023-02-16 15:54:09 4223
原创 执行栈与栈内存
它会按照函数调用的顺序,将函数调用添加到栈中执行,并在函数执行完毕后弹出栈。当执行栈中的所有函数执行完毕后,事件循环会检查消息队列中是否存在待执行的回调函数,如果存在则将其添加到执行栈中执行。总之,JavaScript 的事件循环机制保证了 JavaScript 的单线程执行模型,通过将异步操作添加到消息队列中,从而实现异步执行。消息队列中的消息是异步操作完成后的回调函数,它们会在执行栈中的所有函数执行完毕后按照顺序依次添加到执行栈中执行。)时,会将变量的声明添加到执行栈中,并为变量分配内存空间。
2023-02-16 15:43:21 212
原创 使用异步函数优化代码
如果函数涉及到网络请求、文件读写等 IO 操作,那么通常是可以异步化的,但如果函数本身是计算密集型的,则需要使用其他优化策略,如 Web Worker。因此,在使用异步函数时,我们需要权衡性能和代码复杂度,并确保异步函数的实现合理、使用恰当,以达到更好的性能表现和更好的代码可读性、可维护性。需要注意的是,异步加载可能会带来一些新的问题,如代码顺序的不确定性、资源的加载顺序问题等,需要在实际开发中进行综合考虑和测试。如果一个函数的执行时间较慢,会导致阻塞后续代码的执行,因此将其改为异步函数是一种解决方案。
2023-02-16 15:35:18 233 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人