环境:
- Windows Server 2003 - IIS 6.x
- ASP.NET 3.5 (C#)
- 即 7,8,9
- FF(无论最新的 10 个版本是什么)
用户场景:
用户针对大型数据集输入搜索条件。发起请求后,他们被导航到结果页面,在那里他们等待数据加载,然后可以细化数据。
技术场景:
用户发送搜索条件(通过 ajax 调用)后,UI 调用后端服务。后端服务查询事务系统并将结果数据放入数据库“缓存” - 一个非规范化表,设置用于进一步细化数据(即排序、过滤)。UI 一直等到数据被缓存,然后在收到进程完成的通知后,导航到结果页面。然后,生成的页面会进行调用以从非规范化表中获取数据。
问题:
对于最终不得不根据输入的条件查询许多系统的大型查询,搜索相对较慢(15-25 秒)。其他查询相对较快(<4 秒)。
技术限制:
我们不能完全重新设计这个搜索/结果系统。UI 和后端之间的联系方式有很多复杂性。在执行搜索条件后,需要页面(因为在 StackOverflow 上无法解决的限制)才能打开。
我们也不能要求组织在搜索之前对数据进行非规范化,因为数据必须是实时的,即如果用户在其他系统中进行了更改,如果他们之后进行搜索,数据必须正确显示。
我要遵循的过程:
我想骗一点。我想通过火忘记模型中的异步 HttpHandler 发出“缓存”请求。
发出查询后,我想将页面转换到结果页面。
在转换页面上,我想轮询“缓存”表以查看数据是否已插入其中。
我想立即进行此转换的原因是生成的页面本身很昂贵(即使没有获取数据) - 在调用从缓存中获取数据的服务之前仍然需要 2 秒的加载时间。
问题:
即使我使用 javascript 重定向离开页面,通过异步处理程序调用的 ASP.NET 线程是否会可靠地继续处理?
技术边界2:
是的,我知道... 这个搜索过程听起来效率不高。我现在对此无能为力。在我们继续研究如何重新架构它的同时,我正在尽我所能让它表现得更好。
如果您的回答是:“扔掉它并重新开始”,请不要回答。这是不可接受的。