我有一个使用 Codeigniter 创建的非常 AJAX 式的列表网页,我希望注册用户能够区分他们以前查看过哪些列表。
当前尝试:单击列表时,列表 ID 通过$.post()
发送到服务器端 PHP,后者将(使用 INSERT... ON DUPLICATE KEY UPDATE
)listing_id
、user_id
、view_timestamp
插入到一个表中,并在自动增量时viewed_id
。每次访问者进行新的搜索时,所有带有user_id
listing_id
都会通过 .getJSON()
从 MySQL 表中检索,并且通过循环,这些以前查看的列表的 CSS 都会发生变化。
我的问题是这种方法是否涉及服务器上的太多工作。
- 每个用户是否有一行更好,查看
listing_id
被序列化? - 我应该使用 cookie(由 Codeigniter 自动保存到数据库中?)吗?
- 当用户查看通过 AJAX 查看的新列表时,插入它。但是,如果包含所有查看列表ID的cookie不存在,则仅检索一次已查看列表的ID,否则在将新查看的列表发送到服务器进行插入后,列表ID也会插入到cookie中。这样,在执行新搜索后,无需连续查询数据库以获取已查看列表 ID 的整个列表。
注意:对于以前查看的列表listing_id的AJAX请求数量的估计,普通用户将每20秒进行一次新的搜索。
对于这种功能,我不会自发地涉及数据库并查看客户端解决方案,例如使用 localStorage 存储 Json 和数据,或者如果您想要更广泛的浏览器支持(或者需要从您的 php 代码存储它并且无法从 javascript 中存储它)。如果您必须将此信息存储在数据库中,我仍然会寻找尽可能多地在客户端上缓存信息的解决方案,就像您在第 3 点中描述的那样。