Node에서 Redis를 어떻게 사용하나요? 다음 글에서는 Node.js에서 Redis를 사용하는 방법이 매우 간단하다는 것을 알게 될 것입니다. 도움이 되길 바랍니다.
이전 기사에서는 실제로 redis
로 최적화할 수 있는 두 곳을 남겼습니다. redis
优化的地方:
- 一个是我们的在做登录时,通过
JWT
已经实现了服务端生成token
以及验证客户端发送的token
信息。【相关教程推荐:nodejs视频教程 、编程视频】 - 实现对文章点赞功能,采用的是将点赞数据直接写入数据库
JWT token
实现方式, 将基本信息直接放在token
中,以便于分布式系统使用, 但是我们没有设置有限期(这个是可以实现的),并且服务端无法主动让token
失效。 而Redis天然支持过期时间,也能实现让服务端主动使token
过期。
当然并不是说JWT token 不如 redis+token实现方案好, 具体看使用的场景,这里我们并不讨论二者孰优孰劣,只是提供一种实现方案,让大家知道如何实现。
1. 认识redis
对于前端的小伙伴来说,Redis可能相对比较陌生,首先认识一下
Redis是什么
Redis是一个开源(BSD许可)的,基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件,是现在最受欢迎的 NoSQL 数据库之一。
其具备如下特性:
- 速度快
- 单节点读110000次/s,写81000次/s
- 基于内存运行,性能高效
- 用 C 语言实现,离操作系统更近
- 持久化
- 数据的更新将异步地保存到硬盘(RDB 和 AOF
- 多种数据结构
- 不仅仅支持简单的 key-value 类型数据
- 还支持:字符串、hash、列表、集合、有序集合
- 支持多种编程语言等等
Redis 典型使用场景
缓存
缓存可以说是Redis最常用的功能之一了, 合理的缓存不仅可以加快访问的速度,也可以减少后端数据库的压力。
排行系统
利用Redis的列表和有序集合的特点,可以制作排行榜系统,而排行榜系统目前在商城类、新闻类、博客类等等,都是比不可缺的。
计数器应用
计数器的应用基本和排行榜系统一样,都是多数网站的普遍需求,如视频网站的播放计数,电商网站的浏览数等等,但这些数量一般比较庞大,如果存到关系型数据库,对MySQL或者其他关系型数据库的挑战还是很大的,而Redis基本可以说是天然支持计数器应用。
(视频直播)消息弹幕
直播间的在线用户列表,礼物排行榜,弹幕消息等信息,都适合使用Redis中的SortedSet结构进行存储。
例如弹幕消息,可使用ZREVRANGEBYSCORE
排序返回,在Redis5.0中,新增了zpopmax
,zpopmin
命令,更加方便消息处理。
Redis的应用场景远不止这些,Redis对传统磁盘数据库是一个重要的补充,是支持高并发访问的互联网应用必不可少的基础服务之一。
纸上谈兵终觉浅,必须实战一波~
Redis的安装和简单使用,我这里就不一一介绍了,这里贴上我之前写的两篇文章:
可以快速的安装、了解Redis数据类型以及常用的命令。
可视化客户端
在Windows下使用 RedisClient, 在mac下可以使用Redis Desktop Manager
RedisClient下载链接:https://github.com/caoxinyu/RedisClient
下载后直接双击redisclient-win32.x86.2.0.exe
文件运行即可
启动后, 点击server -> add
- 하나는 로그인할 때
JWT 서버는 <code>토큰
생성과 클라이언트가 보낸토큰
정보 확인을 구현했습니다. [추천 관련 튜토리얼: nodejs 동영상 튜토리얼 - 기사 좋아요 기능을 구현하기 위해 좋아요 데이터는 데이터베이스에 직접 기록됩니다
JWT 토큰
구현 방식이며, 기본 정보는 token을 사용하지만 마감 기한을 설정하지 않았으며(이는 달성 가능함) 서버가 token
을 적극적으로 무효화할 수 없습니다. Redis는 당연히 만료 시간을 지원하며 서버가 토큰
을 적극적으로 만료하도록 허용할 수도 있습니다. 🎜🎜물론 JWT 토큰이 redis+token 구현 솔루션만큼 좋지 않다는 의미는 아닙니다. 여기서는 어느 것이 더 나은지 논의하지 않고 모든 사람이 사용할 수 있는 구현 솔루션만 제공합니다. 그것을 구현하는 방법을 알고 있습니다. 🎜1. Redis 알아보기
🎜프론트엔드 친구들에게는 Redis가 상대적으로 낯설 수도 있으니 먼저 알아볼까요🎜Redis란 무엇입니까
🎜Redis는 오픈 소스(BSD 라이선스), 메모리 기반 데이터 구조 저장 시스템으로 데이터베이스, 캐시 및 메시징 미들웨어는 오늘날 가장 인기 있는 NoSQL 데이터베이스 중 하나입니다. 🎜🎜다음과 같은 특징이 있습니다: 🎜- 빠른 속도
- 단일 노드는 초당 110,000회 읽기, 초당 81,000회 쓰기 가능
- 메모리 기반으로 실행됩니다. 효율적인 성능을 제공합니다. li>
- C 언어로 구현되어 운영 체제에 더 가깝습니다.
- 지속성
- 데이터 업데이트가 비동기식으로 수행됩니다. 하드디스크에 저장(RDB 및 AOF
- 다중 데이터 구조
- 간단한 키-값 유형 데이터를 지원할 뿐만 아니라
- 문자열 및 해시, 목록, 집합, 순서 집합도 지원합니다.
- 여러 프로그래밍 언어 등을 지원합니다.
Redis 일반적인 사용 시나리오
🎜캐싱🎜🎜캐싱은 Redis에서 가장 일반적으로 사용되는 기능 중 하나라고 할 수 있습니다. 액세스 속도를 높일 뿐만 아니라 백엔드 데이터베이스에 대한 부담을 줄일 수 있습니다. 🎜🎜순위 시스템🎜🎜Redis 목록 및 정렬된 컬렉션의 특성을 사용하여 순위 시스템을 만들 수 있습니다. 현재 쇼핑몰, 뉴스, 블로그 등에서 사용되는 순위 시스템은 모두 필수입니다. 🎜🎜카운터 적용🎜🎜카운터 적용은 기본적으로 일반적인 순위 시스템과 동일합니다. 비디오 웹사이트의 재생 횟수 등 대부분의 웹사이트에서 요구하는 사항이지만 이러한 수치는 일반적으로 관계형 데이터베이스에 저장되는 경우 큰 문제가 됩니다. MySQL이나 기타 관계형 데이터베이스, Redis는 기본적으로 카운터 애플리케이션을 자연스럽게 지원한다고 할 수 있습니다. 🎜🎜 (라이브 영상) 메시지 공세🎜🎜생방송 방의 온라인 사용자 목록, 선물 순위, 공세 메시지. 및 기타 정보는 Redis의 SortedSet 구조를 사용하여 저장하는 데 적합합니다. 🎜🎜예를 들어, 사격 메시지는ZREVRANGEBYSCORE
를 사용하여 Redis5.0에서 zpopmax를 정렬하고 반환할 수 있습니다. code> 및 <code>zpopmin
명령이 추가되어 메시지 처리가 더욱 편리해졌습니다. 🎜🎜Redis. Redis는 기존 디스크 데이터베이스에 대한 중요한 보완 기능이며 필수적인 기본 기능 중 하나입니다. 높은 동시 접속률을 지원하는 인터넷 애플리케이션 서비스입니다. 🎜🎜말로는 쉽지만 실천에 옮겨야 합니다~🎜🎜Redis에서는 설치 및 간단한 사용법을 하나씩 소개하지 않겠습니다. 이전에 작성한 기사 두 개: 🎜🎜을 사용하여 빠르게 설치하고 Redis 데이터 유형을 이해하고 일반적으로 사용되는 명령. 🎜Visual Client
🎜Windows에서는 RedisClient를 사용하고 Mac Desktop Manager에서는 Redis를 사용하세요. Strong>🎜🎜RedisClient 다운로드 링크: https://github.com/caoxinyu/RedisClient🎜🎜다운로드 후redisclient-win32.x86.2.0.exe
파일을 더블클릭하여 실행하세요🎜 🎜 
서버 -> 추가
🎜🎜🎜🎜를 클릭하세요.접속 후 전체적인 상황을 보실 수 있습니다.
Redis는 SQL 형태의 데이터와 달리 16개(0~15)개의 데이터베이스가 제공되기 때문에 새로운 데이터베이스를 생성하는 동작을 제공하지 않습니다. 기본). 동일한 라이브러리에서 키는 유일하게 존재하며 반복이 허용되지 않습니다. 이는 "열쇠"와 같으며 하나의 "잠금"만 열 수 있습니다. 키-값 저장의 핵심은 키를 사용하여 값을 검색하는 것입니다.
Redis 지식이 전제 조건입니다. 본론으로 들어가겠습니다~
이 글에서는 주로 Redis를 사용하여 캐시 기능을 구현합니다.
2. Nest.js에서
버전 상태 사용:
라이브러리 | 버전 |
---|---|
Nest.js | V8.1.2 |
이 프로젝트는 Nest.js 9.x
버전과 다른 Nest.js 8.x
버전을 기반으로 하며, 다음 문서에서는 차이점을 구체적으로 정리합니다. 두 버전 사이의 요점에 대한 설명과 V8
에서 V9
로 업그레이드하는 방법은 여기서 자세히 논의하지 않습니다. Nest.js 8.x
版本,与Nest.js 9.x
版本使用有所不同, 后面的文章专门整理了两个版本使用不同点的说明, 以及如何从V8
升级到V9
, 这里就不过多讨论。
首先,我们在Nest.js项目中连接Redis, 连接Redis需要的参数:
REDIS_HOST:Redis 域名 REDIS_PORT:Redis 端口号 REDIS_DB: Redis 数据库 REDIS_PASSPORT:Redis 设置的密码
将参数写入.env
与.env.prod
配置文件中:
使用Nest官方推荐的方法,只需要简单的3个步骤:
1、引入依赖文件
npm install cache-manager --save npm install cache-manager-redis-store --save npm install @types/cache-manager -D
Nest
为各种缓存存储提供统一的API,内置的是内存中的数据存储,但是也可使用 cache-manager
来使用其他方案, 比如使用Redis
来缓存。
为了启用缓存, 导入ConfigModule
, 并调用register()
或者registerAsync()
传入响应的配置参数。
2、创建module文件src/db/redis-cache.module.ts
, 实现如下:
import { ConfigModule, ConfigService } from '@nestjs/config'; import { RedisCacheService } from './redis-cache.service'; import { CacheModule, Module, Global } from '@nestjs/common'; import * as redisStore from 'cache-manager-redis-store'; @Module({ imports: [ CacheModule.registerAsync({ isGlobal: true, imports: [ConfigModule], inject: [ConfigService], useFactory: async (configService: ConfigService) => { return { store: redisStore, host: configService.get('REDIS_HOST'), port: configService.get('REDIS_PORT'), db: 0, //目标库, auth_pass: configService.get('REDIS_PASSPORT') // 密码,没有可以不写 }; }, }), ], providers: [RedisCacheService], exports: [RedisCacheService], }) export class RedisCacheModule {}
-
CacheModule
的registerAsync
方法采用 Redis Store 配置进行通信 -
store
属性值redisStore
,表示'cache-manager-redis-store' 库 -
isGlobal
属性设置为true
来将其声明为全局模块,当我们将RedisCacheModule
在AppModule
中导入时, 其他模块就可以直接使用,不需要再次导入 - 由于Redis 信息写在配置文件中,所以采用
registerAsync()
方法来处理异步数据,如果是静态数据, 可以使用register
3、新建redis-cache.service.ts
文件, 在service实现缓存的读写
import { Injectable, Inject, CACHE_MANAGER } from '@nestjs/common'; import { Cache } from 'cache-manager'; @Injectable() export class RedisCacheService { constructor( @Inject(CACHE_MANAGER) private cacheManager: Cache, ) {} cacheSet(key: string, value: string, ttl: number) { this.cacheManager.set(key, value, { ttl }, (err) => { if (err) throw err; }); } async cacheGet(key: string): Promise<any> { return this.cacheManager.get(key); } }
接下来,在app.module.ts
中导入RedisCacheModule
即可。
调整 token 签发及验证流程
我们借助redis来实现token过期处理、token自动续期、以及用户唯一登录。
- 过期处理:把用户信息及token放进redis,并设置过期时间
- token自动续期:token的过期时间为30分钟,如果在这30分钟内没有操作,则重新登录,如果30分钟内有操作,就给token自动续一个新的时间,防止使用时掉线。
- 户唯一登录:相同的账号,不同电脑登录,先登录的用户会被后登录的挤下线
token 过期处理
在登录时,将jwt生成的token,存入redis,并设置有效期为30分钟。存入redis的key由用户信息组成, value是token值。
// auth.service.ts async login(user: Partial<User>) { const token = this.createToken({ id: user.id, username: user.username, role: user.role, }); + await this.redisCacheService.cacheSet( + `${user.id}&${user.username}&${user.role}`, + token, + 1800, + ); return { token }; }
在验证token时, 从redis中取token,如果取不到token,可能是token已过期。
// jwt.strategy.ts + import { RedisCacheService } from './../core/db/redis-cache.service'; export class JwtStrategy extends PassportStrategy(Strategy) { constructor( @InjectRepository(User) private readonly userRepository: Repository<User>, private readonly authService: AuthService, private readonly configService: ConfigService, + private readonly redisCacheService: RedisCacheService, ) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: configService.get('SECRET'), + passReqToCallback: true, } as StrategyOptions); } async validate(req, user: User) { + const token = ExtractJwt.fromAuthHeaderAsBearerToken()(req); + const cacheToken = await this.redisCacheService.cacheGet( + `${user.id}&${user.username}&${user.role}`, + ); + if (!cacheToken) { + throw new UnauthorizedException('token 已过期'); + } const existUser = await this.authService.getUser(user); if (!existUser) { throw new UnauthorizedException('token不正确'); } return existUser; } }
用户唯一登录
当用户登录时,每次签发的新的token,会覆盖之前的token, 判断redis中的token与请求传入的token是否相同, 不相同时, 可能是其他地方已登录, 提示token错误。
// jwt.strategy.ts async validate(req, user: User) { const token = ExtractJwt.fromAuthHeaderAsBearerToken()(req); const cacheToken = await this.redisCacheService.cacheGet( `${user.id}&${user.username}&${user.role}`, ); if (!cacheToken) { throw new UnauthorizedException('token 已过期'); } + if (token != cacheToken) { + throw new UnauthorizedException('token不正确'); + } const existUser = await this.authService.getUser(user); if (!existUser) { throw new UnauthorizedException('token不正确'); } return existUser; }
token自动续期
实现方案有多种,可以后台jwt生成access_token
(jwt有效期30分钟)和refresh_token
, refresh_token
有效期比access_token
有效期长,客户端缓存此两种token, 当access_token
过期时, 客户端再携带refresh_token
获取新的access_token
。 这种方案需要接口调用的开发人员配合。
我这里主要介绍一下,纯后端实现的token自动续期
实现流程:
- ①:jwt生成token时,有效期设置为用不过期
- ②:redis 缓存token时设置有效期30分钟
- ③:用户携带token请求时, 如果key存在,且value相同, 则重新设置有效期为30分钟
设置jwt生成的token, 用不过期, 这部分代码是在auth.module.ts
文件中, 不了解的可以看文章 Nest.js 实战系列第二篇-实现注册、扫码登陆、jwt认证
// auth.module.ts const jwtModule = JwtModule.registerAsync({ inject: [ConfigService], useFactory: async (configService: ConfigService) => { return { secret: configService.get('SECRET', 'test123456'), - signOptions: { expiresIn: '4h' }, // 取消有效期设置 }; }, });
然后再token认证通过后,重新设置过期时间, 因为使用的cache-manager
没有通过直接更新有效期方法,通过重新设置来实现:
// jwt.strategy.ts async validate(req, user: User) { const token = ExtractJwt.fromAuthHeaderAsBearerToken()(req); const cacheToken = await this.redisCacheService.cacheGet( `${user.id}&${user.username}&${user.role}`, ); if (!cacheToken) { throw new UnauthorizedException('token 已过期'); } if (token != cacheToken) { throw new UnauthorizedException('token不正确'); } const existUser = await this.authService.getUser(user); if (!existUser) { throw new UnauthorizedException('token不正确'); } + this.redisCacheService.cacheSet( + `${user.id}&${user.username}&${user.role}`, + token, + 1800, + ); return existUser; }
到此,在Nest中实现token过期处理、token自动续期、以及用户唯一登录都完成了, 退出登录时移除token比较简单就不在这里一一上代码了。
在Nest中除了使用官方推荐的这种方式外, 还可以使用nestjs-redis
来实现,如果你存token时, 希望存hash
结构,使用cache-manager-redis-store
时,会发现没有提供hash
.env
및 .env.prod
에 씁니다. 구성 파일 매체: 🎜🎜
Nest
는 다양한 캐시 저장을 위한 통합 API를 제공하며, 하나는 메모리 데이터 저장소에 있지만 cache-manager
를 사용하여 캐싱에 Redis
를 사용하는 등의 다른 솔루션을 사용할 수도 있습니다. 🎜🎜캐싱을 활성화하려면 ConfigModule
을 가져오고 register()
또는 registerAsync()
를 호출하여 응답 구성 매개변수를 전달하세요. 🎜🎜2. 모듈 파일 src/db/redis-cache.module.ts
를 생성하고 다음과 같이 구현합니다: 🎜rrreeeregisterAsync of <code>CacheModule code>
메서드는 Redis Store 구성을 사용하여-
store
속성 값redisStore
를 통신하며 'cache-manager-redis-store를 나타냅니다. ' library li> -
isGlobal
속성은RedisCacheModule
를 넣을 때 전역 모듈로 선언하기 위해true
로 설정됩니다. >AppModule code>에서는 다른 모듈을 다시 import하지 않고 바로 사용할 수 있습니다.
- Redis 정보는 구성 파일에 기록되므로
registerAsync()
메서드 비동기 데이터를 처리하는 데 사용됩니다. 정적 데이터인 경우register
redis-cache.service.ts를 생성하세요. code> 파일을 작성하여 서비스에서 캐시된 읽기를 구현합니다. 🎜rrreee🎜를 작성하고 <code>app.module.ts
에서 RedisCacheModule
을 가져옵니다. 🎜토큰 발급 및 확인 프로세스 조정
🎜redis를 사용하여 토큰 만료 처리, 자동 토큰 갱신 및 고유한 사용자 로그인을 구현합니다. 🎜- 만료 처리: 사용자 정보와 토큰을 redis에 넣고 만료 시간 설정
- 토큰 자동 갱신: 토큰 만료 시간은 30분 내에 만료가 없으면 30분입니다. 분 작업이 있으면 다시 로그인하세요. 30분 이내에 작업이 있으면 토큰은 자동으로 새로운 시간으로 갱신되어 사용 중 연결이 끊어지는 것을 방지합니다.
- 각 사용자의 고유한 로그인: 동일한 계정과 다른 컴퓨터로 로그인하면 먼저 로그인한 사용자는 나중에 로그인하는 사용자에 의해 오프라인으로 푸시됩니다.
토큰 만료 처리
🎜로그인 시 jwt에서 생성된 토큰을 redis에 저장하고, 유효기간을 30분으로 설정하세요. Redis에 저장되는 Key는 사용자 정보로 구성되며, Value는 토큰 값이다. 🎜rrreee🎜토큰을 확인할 때 redis에서 토큰을 가져오세요. 토큰을 가져올 수 없다면 토큰이 만료되었을 수 있습니다. 🎜rrreee사용자 전용 로그인
🎜사용자가 로그인하면 발급된 새 토큰이 이전 토큰을 덮어쓰게 되며 redis가 요청의 토큰이 전달된 토큰과 동일합니까? 그렇지 않은 경우 사용자가 다른 곳에 로그인하여 토큰 오류가 표시될 수 있습니다. 🎜rrreee토큰 자동 갱신
🎜다양한 구현 옵션이 있습니다. background(jwt 유효 기간은 30분) 및refresh_token
, refresh_token
은 access_token
보다 오래 유효합니다. >access_token code>가 만료되면 클라이언트는 refresh_token
을 전달하여 새로운 access_token
을 얻습니다. 이 솔루션은 인터페이스 호출 개발자의 협력이 필요합니다. 🎜🎜여기에서는 주로 순수 백엔드로 구현된 토큰의 자동 갱신을 소개하겠습니다🎜🎜구현 과정:🎜- ①: jwt가 토큰을 생성할 때 유효 기간은 사용 후 만료되도록 설정됩니다.
- ② : Redis가 토큰을 캐시할 때 유효 기간을 30분으로 설정
- 3: 사용자가 토큰 요청을 수행할 때 키가 존재하고 값이 동일하면 유효 기간이 30분으로 재설정됩니다. 30분
auth.module.ts
파일에 있습니다. Nest.js 실무 시리즈 2부 - 등록 구현, 스캔 코드 로그인, JWT 인증 기사를 읽어보세요. a>🎜rrreee🎜그런 다음 토큰 인증이 통과된 후 만료 시간을 재설정하세요. cache-manager
를 사용하면 유효 기간이 직접 업데이트되지 않고 재설정되기 때문입니다. 🎜rrreee🎜이 시점에서, 토큰 만료 처리, 토큰 자동 갱신, Nest의 사용자 고유 로그인 구현이 완료되었으므로 로그아웃 시 토큰을 제거하는 것이 비교적 간단하므로 여기서는 코드를 하나씩 다루지 않겠습니다. 🎜🎜Nest에서 공식적으로 권장하는 방법을 사용하는 것 외에도 해시
를 저장하고 싶을 때 토큰을 저장하려는 경우 nestjs-redis
를 사용할 수도 있습니다. code> 구조를 사용하여 cache-manager-redis-store
를 실행하면 hash
값 저장 및 제거 방법이 없음을 알 수 있습니다(찾는 데 약간의 노력이 필요함). . 🎜참고:
nest-redis
来实现redis缓存, 在Nest.js 8 版本下会报错, 小伙伴们可以使用@chenjm/nestjs-redis
를 대신 사용하거나 문제에 대한 해결 방법을 참조하는 경우: Nest 8 + redis 버그.
Summary
소스 코드 주소: https://github.com/koala-coding/nest-blog
더 많은 프로그래밍 관련 지식을 보려면 Programming Teaching을 방문하세요! !
위 내용은 Node.js에서 Redis를 어떻게 사용하나요? 정말 간단하다는 것이 밝혀졌습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
