我正在尝试优化Yesod应用程序,以使其在恒定空间中运行。
例如,我正在读取数据库表,并将其显示为HTML表。在处理完整个表之前,我应该能够开始发送第一行。我知道我可以使用selectSource
(读取数据库)和responseSource
或responseSourceDB
来做到这一点,但是我如何使用defaultLayout
将其包装在默认布局中? >
此刻,我必须消耗全部源代码才能一次性生成列表和HTML。例如,假设我有(可能无法编译)
data User = {name :: Text, email :: Text } deriving ...
userSource = selectSource [] [Asc UserName]
userToTR user = [whamlet|
<tr>
<td>#{user name}
<td>#{user email}
getUsers :: Handler Html
getUsers = do
rows <- runConduit $ userSource =$= mapC userToTR =$= sinkList
table = [whamlet|
<table>
<tr>
<th>Name
<th>Email
^{mconcat rows}
defaultLayout table
如何将其转换为流式处理的行? (这只是一个解释问题的虚构示例,实际问题要复杂得多)。