问题标签 [lazy-loading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - 我应该如何延迟生成缩略图?
作为背景,我有一个数据层和服务层,松散地基于Rob Conery 的店面模型,就像 Rob 的一样,我的许多域对象都用LazyList<>
's 和LazyItem<>
's 链接,以利用 Linq2Sql 提供的延迟执行,因为我的Lazy*
类型利用IQueryable<T>
而不是这种令人敬畏的委托方法。
所以我有一个像这样的对象图(基本上,每个活动都应该有一个包含许多图像的照片库 - 缩略图和全尺寸照片):
该Gallery
类型具有 Images 属性,LazyList<PhotoGalleryImage>
因此IList<PhotoGalleryImage>
LazyList 就是Inner
您所看到的。每个PhotoGalleryImage
项目都有一个FullImage
属性和一个Thumbnail
属性,两者都是 type Image
。
这个想法是将完整的 rez 上传照片存储在PhotoGalleryImage.FullImage
属性中,最初,Thumbnail
属性是Null
. 我要的是:当Thumbnail
第一次访问该属性时,如果Null
我希望我的服务层生成 Thumb,将其保存到数据库,然后返回Image
较小照片的实例。我拥有从全尺寸图像创建缩略图的所有代码,所以这不是这里的问题。
我想不通的是如何捕获Thumbnail
属性的第一次访问(在我的IQueryable<>
架构上下文中),然后让服务层进行调整大小而不是存储库(DAL)。我强烈认为服务(业务)层应该负责这个功能决策,但我不知道如何使它工作。
目前,我正在考虑从存储库中的域类到 Linq2Sql 类的映射将是识别我所指的这种“首次访问”的好地方,但我不知道较低层如何调用服务层并执行收缩(或者即使可以,也应该这样做)。
也许我的设计限制了我让 Repos 进行转换。也许我根本不希望服务层执行这个逻辑。也许我的设计太可怕了,我真的不应该面对这个烂摊子。
请帮忙。感谢所有反馈。
java - 延迟加载或不努力提高性能
有人建议,为了提高我们系统的性能,应该全面使用延迟加载。也就是将带有“mappedBy”属性的 OneToOne 映射更改为 @OneToMany 映射。这是为了解决和停止从数据库加载不需要的数据,这会导致应用程序运行缓慢。
我们运行一个多层系统(基本上是 2 层)。我们有前端 - 使用 JSF 和包含业务和数据库访问层的后端。前后通信视图 EJB - 但 EJB 在其中没有真正的逻辑。使用的其他技术 - Spring 和 Hibernate
现在,在对该主题进行了一些阅读之后,似乎延迟加载的使用并不是灵丹妙药,因为它需要正确应用。对于每次延迟加载,都会发出一条 Select 语句来获取数据。还有一个问题是,如果前端访问要延迟加载的属性并且会话/连接在后端关闭,那么我们将得到一个空值。
以上是正确的担忧吗?
那么,在实施延迟加载解决方案或性能改进时,最好的方法/实践是什么?希望尽可能不要重做数据模型。
我最初的想法是与 DBA 团队合作,以了解两个系统之间发生的情况 - 查询的外观,我们如何使用数据等。识别问题点,检查 Hibernate 对象/查询以了解如何最好改进它。还要查看前端以确定数据从后端传递到前端以显示的内容和方式等。
好的方法/其他方法?
java - 如何将对象从休眠状态中拉出并进入内存。我遇到了会话问题
我有一个相当庞大的项目,我正在尝试改进内存中的数据。本质上,我有一大堆对象,其中包含原语和其他存在于休眠状态的对象。大部分非 dao 代码依赖于通过休眠的延迟加载来动态地对对象进行水合。但是,由于一切都存在于内存中,我的对象没有加载,并且我得到了休眠延迟加载异常。
我可以通过手动浸入休眠和水合休眠对象来手动实现休眠延迟加载,但是该对象的对象图很大,包含数百种需要初始化和设置的类型。这似乎不切实际,我正在寻找一个可行的解决方案来解决这个问题。如果有人对此类问题或类似问题有任何提示、提示、解决方案或故事,我将不胜感激。
非常感谢。
java - 如何手动打开休眠会话?
我有一个涉及spring和hibernate的相当大的项目。现在,我正在将某些对象从休眠状态恢复到内存中,并且遇到了一些障碍。我有以下设置。
A 类包含许多原语和一个 B 类。B 包含原语和一个 C 类,它以前是延迟加载的。
现在我有这个
服务调用 1:
1.)创建 A 类的
对象 2.)获取 B 类的对象
3.)在 A 中设置 B
4.)将 A 添加到内存
服务调用 2:
1.) 从内存中获取 A
2.) 从 A 中获取 B
3.) 从 B 中获取 C
4.) 对 C 进行操作
因为 C 是延迟加载的,所以它依靠现有的休眠会话从 B 延迟加载自身,至少我相信是这样的。但是,现在我需要延迟加载而不修改 DAO 以返回 ID,并且不存在当前的休眠会话可以使用 OpenSessionInView 劫持。考虑到限制,解决这个问题的最佳方法是什么?我发现的唯一解决方案依赖于不合适的代码更改或现有会话,因此我认为我也许可以手动打开休眠会话。我该怎么做呢?或者,是否有更好的解决方案来解决这个问题?
ruby-on-rails - 如何使用 ActiveRecord 和 Rails 获得一个急切加载的条件,以便稍后延迟加载
首先让我展示一些代码。
好的,所以稍后在控制器中我想搜索所有员工。我设置了命名范围以帮助通过连接和条件搜索来做到这一点。但问题出在我想显示所有用户角色的视图中,但它只会显示员工角色。
无论如何我可以说“user.roles”并在我已经迫不及待地加载它之后将它延迟加载到视图中吗?
javascript - 等待延迟加载的对象没有锁定?
我已经有代码可以根据请求延迟加载脚本。我现在的问题是等待执行某些代码,直到对象可用。我不能使用 setTimeout() 因为它不会阻止执行。
那么在不锁定浏览器的情况下“等待”加载的好方法是什么?
同样,不能使用原始 setTimeout()。
javascript - JQuery动态加载Javascript文件
我有一个非常大的 javascript 文件,我只想在用户单击某个按钮时才加载。我使用 jQuery 作为我的框架。是否有内置方法或插件可以帮助我做到这一点?
更多细节:我有一个“添加评论”按钮,它应该加载 TinyMCE javascript 文件(我已将所有 TinyMCE 内容归结为一个 JS 文件),然后调用 tinyMCE.init(...)。
我不想在初始页面加载时加载它,因为不是每个人都会点击“添加评论”。
我知道我可以这样做:
但有更好/封装的方式吗?
c# - ASP.NET HoverMenuExtender 延迟加载
我正在尝试让我的 hovermenuextenders 进行一些延迟加载。我在整个网站上都有头像,当悬停在上面时应该拉回各种东西(图像、最近的帖子、帖子计数等)。出于明显的原因,我不想对 page_load 上的所有头像执行此操作。
使用以下代码,我可以获得悬停事件以异步触发回发到服务器(断点在 onmouseover 上命中)。但是,回发中的命令在执行完成后似乎没有反映。加载图像/标签停留在悬停面板中。任何帮助表示赞赏!
编辑:我刚刚意识到页面上呈现的最后一个头像可以正常工作,但上面的头像都没有。任何想法可能导致这种奇怪的行为?
和代码隐藏:
sql - 如果存在子级,如何仅显示 TreeView 展开符号 [+]
我开发了一个从数据库中的分层数据填充树视图的应用程序。
我将它设计为使用延迟加载,因此它仅在扩展节点时获取子节点。
我的问题是,除非我调用数据库并查看,否则显然我不知道节点是否有子节点。目前我已经实现了一个虚拟子节点,因此所有节点都会出现 [+] 图标,然后我删除这个虚拟节点并在BeforeExpand
事件中获取真正的子节点。
这意味着对于没有子节点的节点,我会得到一个 [+] 图标,因此用户单击展开图标并且没有任何显示看起来有点粗制滥造。
在延迟加载树视图中处理子节点的首选方法是什么?如果我调用数据库以查看是否有子节点,那么我还不如只加载子节点而忘记延迟加载对吧?
我的一个想法是在数据库中存储一个“HasChildren”标志,这样我就可以有选择地只为实际上有子节点的节点创建我的虚拟子节点。
不好意思扯远了,我很想看看其他人的想法……
asp.net - LINQ to SQL 中延迟加载属性的编程控制
使用 LINQ to SQL,有没有办法为使用代码的实体上的某些属性指定“延迟加载 = true”?
我可以在设计器中手动完成,但如果表格更新/反弹,我将失去该自定义。
我知道 DataLoadOptions 和 LoadWith(),但那是为了使用预先加载而不是延迟加载,我想指定延迟加载,其中预先加载是默认设置。
ScottGu 在这里做出了一些有趣的承诺,但他从未跟进过。:-)