前言一般信息填写类的需求页面,都会增设「预览」和「打印」功能。我们会通过编写DOM及样式来绘制出预览视图,而打印则是基于预览来生成PDF文件。浏览器原生APIwindow.print()可以用于打印当前窗口(window.document)视图内容。调用此方法会产生一个打印预览弹框,用户可以根据具体设置来得到打印结果。接下来将从code层面带领大家熟悉「打印」的使用。一、打印样式默认情况下,基于页面上的内容,会将元素,布局和样式都进行打印;如果仅想在打印上设置特殊样式,可以通过以下方式:1.使用打印样式表:2.使用媒介查询:@mediaprint{p{color:lavender;backgr
大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。在服务端开发中,缓存常常被当做系统性能扛压的不二之选。在实施方案上,缓存使用策略虽有一定普适性,却也并非完全绝对,需要结合实际的项目诉求与场景进行综合权衡与考量,进而得出符合自己项目的最佳实践。缓存使用的演进现有这么一个系统:一个互动论坛系统,用户登录系统之后,可以在论坛上查看帖子列表、查看帖子详情、发表帖子、评论帖子、为帖子点赞等操作。系统中所有的配置数据与业务数据均存储在数据库中。随着业务的发展,注册用户量越来越多,然后整个系统的响应
大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。在服务端开发中,缓存常常被当做系统性能扛压的不二之选。在实施方案上,缓存使用策略虽有一定普适性,却也并非完全绝对,需要结合实际的项目诉求与场景进行综合权衡与考量,进而得出符合自己项目的最佳实践。缓存使用的演进现有这么一个系统:一个互动论坛系统,用户登录系统之后,可以在论坛上查看帖子列表、查看帖子详情、发表帖子、评论帖子、为帖子点赞等操作。系统中所有的配置数据与业务数据均存储在数据库中。随着业务的发展,注册用户量越来越多,然后整个系统的响应
在vue3的开发中,reactive是提供实现响应式数据的方法。日常开发这个是使用频率很高的api。这篇文章笔者就来探索其内部运行机制。小白一枚,写得不好请多多见谅。调试版本为3.2.45什么是reactive?reactive是Vue3中提供实现响应式数据的方法.在Vue2中响应式数据是通过defineProperty来实现的.而在Vue3响应式数据是通过ES6的Proxy来实现的reactive注意点reactive参数必须是对象(json/arr)如果给reactive传递了其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值的方式。import{reactiv
在vue3的开发中,reactive是提供实现响应式数据的方法。日常开发这个是使用频率很高的api。这篇文章笔者就来探索其内部运行机制。小白一枚,写得不好请多多见谅。调试版本为3.2.45什么是reactive?reactive是Vue3中提供实现响应式数据的方法.在Vue2中响应式数据是通过defineProperty来实现的.而在Vue3响应式数据是通过ES6的Proxy来实现的reactive注意点reactive参数必须是对象(json/arr)如果给reactive传递了其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值的方式。import{reactiv
大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。在上一篇文档《聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活》中,我们对缓存的庞大体系进行了个初步的探讨,浮光掠影般的介绍了本地缓存、集中缓存、多级缓存的不同形式,也走马观花似的初识了缓存设计的关键原则与需要关注的典型问题。作为《深入理解缓存原理与实战设计》系列专栏的第二篇内容,从本篇开始,我们将聚焦缓存体系中的具体场景,分别进行深入的阐述与探讨。本篇我们就一起具体地聊一聊缓存使用中需要关注的典型问题与可靠性防护措施。在分
大家好,又见面了。本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。在上一篇文档《聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活》中,我们对缓存的庞大体系进行了个初步的探讨,浮光掠影般的介绍了本地缓存、集中缓存、多级缓存的不同形式,也走马观花似的初识了缓存设计的关键原则与需要关注的典型问题。作为《深入理解缓存原理与实战设计》系列专栏的第二篇内容,从本篇开始,我们将聚焦缓存体系中的具体场景,分别进行深入的阐述与探讨。本篇我们就一起具体地聊一聊缓存使用中需要关注的典型问题与可靠性防护措施。在分
多用户即时通讯系统044.编码实现034.5功能实现-群聊功能实现4.5.1思路分析群聊的实现思路和私聊的实现非常类似。不同的是:私聊时,服务端接收到消息后,只需要找出接收方的socket并发送消息即可群聊时,服务端在接收到消息后需要遍历集合中所有的线程,找出除了发送方的所有客户端的socket,并发送消息群聊思路:客户端-发送者:用户在控制台输入信息,客户端接收内容将消息构建成Messgae对象,通过对应的socket发送给服务器服务器:读取客户端(发送者)发送给所有用户(接收者)的消息从管理线程的集合中,遍历所有线程,获取所有socket(除了发送者本身)将Message对象转发给所有的接
多用户即时通讯系统044.编码实现034.5功能实现-群聊功能实现4.5.1思路分析群聊的实现思路和私聊的实现非常类似。不同的是:私聊时,服务端接收到消息后,只需要找出接收方的socket并发送消息即可群聊时,服务端在接收到消息后需要遍历集合中所有的线程,找出除了发送方的所有客户端的socket,并发送消息群聊思路:客户端-发送者:用户在控制台输入信息,客户端接收内容将消息构建成Messgae对象,通过对应的socket发送给服务器服务器:读取客户端(发送者)发送给所有用户(接收者)的消息从管理线程的集合中,遍历所有线程,获取所有socket(除了发送者本身)将Message对象转发给所有的接
多用户即时通讯系统034.编码实现024.4功能实现-私聊功能实现4.4.1思路分析客户端-发送者:用户在控制台输入信息,客户端接收内容将消息构建成Messgae对象,通过对应的socket发送给服务器服务器:可以读取到客户端(发送者)发送给某个用户(接收者)的消息从管理线程的集合中,根据messgae对象的信息,获取到接收者的userId,从而获取接收者的socket最后将Message对象转发给指定客户(接收者)客户端-接收者:在接收者的线程(通信线程中),读取到发送者的message消息,并显示即可4.4.2代码实现1.客户端1.MessageClientService类这里新建一个类,