如何在 Remix.run 开发模式下使用内存缓存?

2024-03-03

我需要从一个非常慢且很少变化的 API 获取数据,所以我想我应该使用内存缓存。我首先尝试了一种非常简单的方法,只需将其保存到路径中加载器函数范围之外的变量中:

let cache;

export const loader = async () => {
  if (!cache) {
    // we always end up here
    cache = await (await fetch("...)).json()
  }
}

但这没有用。然后我尝试了一个合适的缓存库(lru-cache),但该缓存也始终为空。然后我意识到每个请求都会重新加载整个文件,我猜这是开发模式的事情,所以我尝试将缓存的创建移动到一个单独的文件中缓存服务器.ts并从那里导入它。

import LRU from "lru-cache";
console.log("Creating cache"); // this is logged on each request
const cache = new LRU({ max: 200 });
export default cache;

但该文件似乎也会根据每个请求重新加载。

如果我构建一个生产版本并运行一切都很好,但如果有某种方法让它在开发模式下工作也很好。


混音清除require缓存开发中的每个请求以支持<LiveReload/>。为了确保您的缓存在这些清除中幸存下来,您需要将其分配给global object.

编辑:这是处理这个问题的更好方法

// utils/singleton.server.ts

// since the dev server re-requires the bundle, do some shenanigans to make
// certain things persist across that ????
// Borrowed/modified from https://github.com/jenseng/abuse-the-platform/blob/2993a7e846c95ace693ce61626fa072174c8d9c7/app/utils/singleton.ts

export function singleton<Value>(name: string, value: () => Value): Value {
    const yolo = global as any
    yolo.__singletons ??= {}
    yolo.__singletons[name] ??= value()
    return yolo.__singletons[name]
}
// utils/prisma.server.ts

import { PrismaClient } from '@prisma/client'
import { singleton } from './singleton.server.ts'

const prisma = singleton('prisma', () => new PrismaClient())
prisma.$connect()

export { prisma }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Remix.run 开发模式下使用内存缓存? 的相关文章

  • 在 MongoDB 中查找具有字符串 ID 数组的文档

    我有一个 id 字符串数组 我想将其与 find 函数一起使用 db companies find id in arr arr看起来像这样 563a2c60b511b7ff2c61e938 563a2c60b511b7ff2c61e8b7
  • 限制文本区域中每行的字符数

    我整个周末都在寻找解决这个难题的方法 但尚未找到一个可以正常工作的解决方案 我想要实现的是限制文本区域中每行的字符数 不是相同地限制它们 而是我选择的每行不同的字符数 例如 我只想在我的文本区域中包含 4 行 第 1 2 和 3 行将限制为
  • ant-d upload中如何为removeFile添加PopConfirm一个图片文件

    我正在使用 Ant d Upload 通过本地系统上传文件 然后单击文件预览图像上的删除图标 图像文件将被删除 我想添加一个弹出确认 所以我尝试在 onRemovefunction 中添加确认作为承诺但它不起作用 它在浏览器中显示警报 on
  • 为什么 jQuery 点击事件会多次触发

    我这里有这个示例代码http jsfiddle net DBBUL 10 http jsfiddle net DBBUL 10 document ready function creategene click function confir
  • 原则 2 缓存:我可以将缓存与 Repository::find*() 一起使用吗?

    我是缓存新手 从文档中 我可以在查询中使用缓存 但是像这样的方法呢 em gt find Application Models project 1 如果你寻找一种自动性 我认为遮阳篷不是 他们不是这样的东西 我自己也在寻找这样的东西 您可以
  • 如何在 d3 js 中突出显示从根到选定节点的路径?

    我使用 d3 js 创建了一棵树 现在我创建了一个下拉菜单 其中包含树中所有节点的列表 现在 从下拉菜单中选择一个节点时 我想突出显示从根到该特定节点的路径 这个怎么做 首先创建一个 flatten 函数 它将分层数据变成一个 n 数组 f
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • v-file-input .click() 不是函数

    我试图以编程方式触发 v file input 的 click 事件 因为它在 Vuetify 的文档中 但它显示一个错误this refs imagePicker click is not a function我在这里错过了什么吗 代码重
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 在vscode中使用reactjs报错

    在 Visual Studio 代码中使用 jsx 语法 Visual Studio代码报错 请帮我 谢谢 符号 例如 而不是这样做 return lt button className square gt TODO lt button g
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • window.showModalDialog 的等效跨浏览器解决方案是什么?

    window showModalDialog 的等效跨浏览器解决方案有哪些 showModalDialog 在 IE 和 FF 3 中引入 我个人认为没有 但是有很多 UI 工具包提供了这样的功能 例如jQuery UI http jque
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • Bootstrap 3 / 显示模式不适用于 javascript 方式

    我用Modal http getbootstrap com javascript modalsBootstrap 3 0 的功能 我有这个代码 a href myNestedContent Open the modal containing

随机推荐

  • Windows attrib 命令行程序不会删除只读属性?

    我使用 windows attrib 命令删除目录只读属性并将其设置回来 如下所示 attrib r C build attrib C build C build attrib r C build attrib C build R C bu
  • 原始浮点编码

    Update原来的问题不再是这个问题的适当问题 所以我将单独保留这个问题来演示我尝试 学到的内容和背景 很明显 这不仅仅是一个 Base64 变体 而且涉及更多一些 背景 我使用 python 3 x 进行编程主要是为了与开源程序 Blen
  • 在日期/时间调用方法

    我正在寻找一个modern在给定日期 时间执行给定方法的方法 ZonedDateTime尤其 我知道Timer类和Quartz库 如下所示 线程包括完整的解决方案 Java 在特定日期执行方法 关闭 https stackoverflow
  • 如何将 Firestore 数据库从 Google 存储桶导出到 Json 文件

    情况如下 我有一个 Firestore 数据库 我每天都会将其下载到 Google Cloud Storage Bucket 作为备份 如果我想在本地下载它 我使用这个命令gsutil m cp r gs BUCKET PATH DESTI
  • ngrx/data 实体数据服务

    尝试理解ngrx data实体数据服务示例here https ngrx io guide data creating entity data services 其中显示 创建实体数据服务 在展示该服务之后 文档继续展示如何在组件中使用 n
  • C++ 重载虚函数发出 clang 警告?

    clang 在编译以下代码时发出警告 struct Base virtual void get char e virtual void get char e int index struct Derived public Base virt
  • 如果 ID 存在则更新记录,否则插入值

    如果记录存在 我正在尝试更新值 否则将值插入数据库 然而 这是行不通的 我写了下面的代码 String sqlCheck Select from UAP dbo UAP EMPLOYEE where EMP EMPLOYEE ID empI
  • 在 XCode 5 中应用程序窗口预计在应用程序启动结束时有一个根视图控制器

    我使用 Single View 或 Master View 模板在新的 XCode 5 中创建的每个新项目都会给我错误 应用程序窗口预计在应用程序启动结束时有一个根视图控制器 但只有当 UIView 等对象添加到类中时才会出现错误 我一如既
  • 无法在 Visual Studio 2010 中调试 MVC 源代码

    我正在尝试使用 Microsoft 符号服务器在 Visual Studio 2010 中调试 MVC 源代码 我已经配置了调试选项 如下所示 我的项目面向 NET Framework 4 0 如中所述调试 NET Framework 的源
  • 如何在 CMake 中使用 c++20 模块?

    Clang http clang llvm org docs Modules html and MSVC http blogs msdn com b vcblog archive 2015 12 03 c modules in vs 201
  • PHPUnit:模拟除某些方法之外的所有方法

    我正在编写一个 PHPUnit 测试 我需要模拟一些依赖项 但我需要一些方法才能使其仍然像以前一样工作 即 我有 class Dependency some stuff not important for the test public f
  • Rails 中两个表充当一个模型

    Rails 是否可以在依赖于两个表的联接的模型上进行设置 这意味着要找到 更新 销毁模型记录 需要将两个数据库表中的两条记录通过联接链接在一起 该模型只是将两个表的所有列包装在一起 然后可用于表单等 这样 当模型被创建 更新时 它只是一种应
  • 为 Mips 架构编译 C

    我已经看到了几种方法来做到这一点 到目前为止我还没有尝试过几种 但我想为了方便起见隔离这个方法 应该有一种方法可以通过 VIA gcc 来做到这一点 我更喜欢这个 我只是不断碰壁 我正在使用 debian7 并且可以使用其他任何风格 我暂时
  • 有人知道托管 TeamCity 构建提供商吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望建立一个 TeamCity 服务器来持续构建 NET Web 应用程序 我已经有了托管 所以我不想
  • 如何使用 PHP 将 base64 编码的二进制数据保存到 zip

    我从 API 请求响应中获取 Base64 二进制编码数据 我需要将其保存为 zip 文件 我使用如下代码
  • git-svn 可以像本地 subversion 客户端一样处理 CRLF 吗?

    我有一个托管在 Linux 上的 Subversion 存储库 但只能通过 Windows 客户端访问 因为它是大型 Windows 应用程序的源代码 如果我可以使用 git svn 由 msysgit 提供 处理这个存储库 那就太棒了 我
  • 在同一位置绘制顶点

    有没有一种方法可以在同一位置绘制两个图的共享节点 例如 两张图 g1 graph ring 5 V g1 name c node1 node2 node3 node4 node5 g1 g1 V g1 1 g2 graph ring 5 V
  • 更有效地编写 HTTP 脚本

    很多时候我想自动化 http 查询 我目前使用 Java 和 commons http 客户端 但可能更喜欢基于脚本的方法 事情真的又快又简单 我可以在其中设置标头 转到页面 而不必担心设置整个 OO 生命周期 设置每个标头 调用 html
  • GWT 2.4.0 RequestFactory 多态性

    GWT 2 4是否支持这种情况 Entity class MyBase Entity class MyChild1 extends MyBase Entity class MyChild2 extends MyBase ProxyFor M
  • 如何在 Remix.run 开发模式下使用内存缓存?

    我需要从一个非常慢且很少变化的 API 获取数据 所以我想我应该使用内存缓存 我首先尝试了一种非常简单的方法 只需将其保存到路径中加载器函数范围之外的变量中 let cache export const loader async gt if