开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

wf/react

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (30)
标签 (107)
master
facts
gaearon-patch-3
revert-14643-fun-sm-hooks
revert-14648-ctx-bad
lazy-wip
revert-14218-memory-leak-on-unmount
gaearon-patch-2
16.3-dev
yeswork
gaearon-patch-1
revert-13535-simpify-some-logic
radio-click
16.4.2-dev
is-renderable
15.6-dev
poc-event-registration
lazy-raf-warning
gh-pages
15-stable
v16.8.0-alpha.1
v16.7.0
v16.7.0-alpha.1
v16.6.3
v16.6.1
v16.6.0
v16.6.0-alpha.8af6728
v16.6.0-alpha.400d197
v16.5.2
v16.6.0-alpha.0
v16.5.1
v16.5.0
v16.4.2
v16.4.1
v16.4.0
v16.3.2
v16.3.1
v16.3.0
v16.3.0-rc.0
v16.3.0-alpha.3
master
分支 (30)
标签 (107)
master
facts
gaearon-patch-3
revert-14643-fun-sm-hooks
revert-14648-ctx-bad
lazy-wip
revert-14218-memory-leak-on-unmount
gaearon-patch-2
16.3-dev
yeswork
gaearon-patch-1
revert-13535-simpify-some-logic
radio-click
16.4.2-dev
is-renderable
15.6-dev
poc-event-registration
lazy-raf-warning
gh-pages
15-stable
v16.8.0-alpha.1
v16.7.0
v16.7.0-alpha.1
v16.6.3
v16.6.1
v16.6.0
v16.6.0-alpha.8af6728
v16.6.0-alpha.400d197
v16.5.2
v16.6.0-alpha.0
v16.5.1
v16.5.0
v16.4.2
v16.4.1
v16.4.0
v16.3.2
v16.3.1
v16.3.0
v16.3.0-rc.0
v16.3.0-alpha.3
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (30)
标签 (107)
master
facts
gaearon-patch-3
revert-14643-fun-sm-hooks
revert-14648-ctx-bad
lazy-wip
revert-14218-memory-leak-on-unmount
gaearon-patch-2
16.3-dev
yeswork
gaearon-patch-1
revert-13535-simpify-some-logic
radio-click
16.4.2-dev
is-renderable
15.6-dev
poc-event-registration
lazy-raf-warning
gh-pages
15-stable
v16.8.0-alpha.1
v16.7.0
v16.7.0-alpha.1
v16.6.3
v16.6.1
v16.6.0
v16.6.0-alpha.8af6728
v16.6.0-alpha.400d197
v16.5.2
v16.6.0-alpha.0
v16.5.1
v16.5.0
v16.4.2
v16.4.1
v16.4.0
v16.3.2
v16.3.1
v16.3.0
v16.3.0-rc.0
v16.3.0-alpha.3
LRU.js 3.35 KB
一键复制 编辑 原始数据 按行查看 历史
Andrew Clark 提交于 2018年10月24日 05:38 +08:00 . [react-cache] Remove cache as argument to read (#13865)
/**
* Copyright (c) 2014-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
import {unstable_scheduleCallback as scheduleCallback} from 'scheduler';
type Entry<T> = {|
value: T,
onDelete: () => mixed,
previous: Entry<T>,
next: Entry<T>,
|};
export function createLRU<T>(limit: number) {
let LIMIT = limit;
// Circular, doubly-linked list
let first: Entry<T> | null = null;
let size: number = 0;
let cleanUpIsScheduled: boolean = false;
function scheduleCleanUp() {
if (cleanUpIsScheduled === false && size > LIMIT) {
// The cache size exceeds the limit. Schedule a callback to delete the
// least recently used entries.
cleanUpIsScheduled = true;
scheduleCallback(cleanUp);
}
}
function cleanUp() {
cleanUpIsScheduled = false;
deleteLeastRecentlyUsedEntries(LIMIT);
}
function deleteLeastRecentlyUsedEntries(targetSize: number) {
// Delete entries from the cache, starting from the end of the list.
if (first !== null) {
const resolvedFirst: Entry<T> = (first: any);
let last = resolvedFirst.previous;
while (size > targetSize && last !== null) {
const onDelete = last.onDelete;
const previous = last.previous;
last.onDelete = (null: any);
// Remove from the list
last.previous = last.next = (null: any);
if (last === first) {
// Reached the head of the list.
first = last = null;
} else {
(first: any).previous = previous;
previous.next = (first: any);
last = previous;
}
size -= 1;
// Call the destroy method after removing the entry from the list. If it
// throws, the rest of cache will not be deleted, but it will be in a
// valid state.
onDelete();
}
}
}
function add(value: T, onDelete: () => mixed): Entry<T> {
const entry = {
value,
onDelete,
next: (null: any),
previous: (null: any),
};
if (first === null) {
entry.previous = entry.next = entry;
first = entry;
} else {
// Append to head
const last = first.previous;
last.next = entry;
entry.previous = last;
first.previous = entry;
entry.next = first;
first = entry;
}
size += 1;
return entry;
}
function update(entry: Entry<T>, newValue: T): void {
entry.value = newValue;
}
function access(entry: Entry<T>): T {
const next = entry.next;
if (next !== null) {
// Entry already cached
const resolvedFirst: Entry<T> = (first: any);
if (first !== entry) {
// Remove from current position
const previous = entry.previous;
previous.next = next;
next.previous = previous;
// Append to head
const last = resolvedFirst.previous;
last.next = entry;
entry.previous = last;
resolvedFirst.previous = entry;
entry.next = resolvedFirst;
first = entry;
}
} else {
// Cannot access a deleted entry
// TODO: Error? Warning?
}
scheduleCleanUp();
return entry.value;
}
function setLimit(newLimit: number) {
LIMIT = newLimit;
scheduleCleanUp();
}
return {
add,
update,
access,
setLimit,
};
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

A declarative, efficient, and flexible JavaScript library for building user interfaces.
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/ffgit/react.git
git@gitee.com:ffgit/react.git
ffgit
react
react
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /