学习资料_文档下载_软件应用_程序模板

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 5931|回复: 0

关于DZ 6.1以后版本(包括7.X、DZX)头像调用方式的疑问

[复制链接]

295

主题

297

帖子

787

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
787
发表于 2020-11-15 02:02:04 | 显示全部楼层 |阅读模式
论坛升级之后,有很多小毛病,近期一直在逐步修改。
这几天观察bbs的IIS日志,发现里面有很多404错误,进一步检查,发现都是图像调用造成的。
仔细探究,发现启用UC以后的DZ改变了传统的头像调用方式,现在的头像调用有两种,
一种是静态调用,一种是动态调用,这两种都会出现问题

先说静态调用,
比如下面的这两个, 一个是dz官方的, 一个是落伍的,都是采用了静态调用,
  1. <img src="http://uc.discuz.net/data/avatar/001/67/77/17_avatar_middle.jpg" onerror="this.onerror=null;this.src='http://uc.discuz.net/images/noavatar_middle.gif'" />
复制代码
  1. <img src="http://www.im286.com/server/data/avatar/000/84/85/18_avatar_middle.jpg" onerror="this.onerror=null;this.src='http://www.im286.com/server/images/noavatar_middle.gif'" />
复制代码
静态调用是有一定好处的,避免了程序的判断,理论上应该更快一些,但是,dz在这个问题的处理上值得商榷
因为,DZ不管用户没有上传头像,都自动调用相应文件夹下面的图片文件,
比如遇到UID为1677717 的用户,就自动调用avatar/001/67/77/17_avatar_middle.jpg这个文件,
这个调用是每个用户都这样进行,而不管用户有没有上传头像,不管cdb_memberfields表里面的avatar 字段是不是空的,
这样就造成了如果用户没有上传头像,那么avatar/001/67/77/17_avatar_middle.jpg文件就不存在,服务器就会报404错误,
然后再通过onerror="this.onerror=null;this.src='http://uc.discuz.net/images/noavatar_middle.gif'" 语句调用系统默认的空头像进行补充。
这样也许省去了数据库查询的时间,但需要浏览器端对头像文件进行状态判断后才能显示头像,
这也就是为什么有时候可以看到头像闪一下XXX然后再显示默认头像的原因

再说动态调用,
动态调用和静态调用差不多,只不过把判断头像是否存在的任务由客户端换成了dz的php程序,
如果图片文件不存在,则直接301转向到系统默认的头像,
这样,服务器IIS日志中就会出现大量的301错误。

搜了一下,目前还没有看到这样的解决办法,
这样的问题也许不影响使用,但是感觉应该还有进一步优化的余地,
一是要减少客户端的判断,这样可以减少运算和等待时间
二是对头像调用方式进行改进,比如6.0以前的版本,头像路径存储在数据库中,
可以上传到服务器,也可以直接调用站外图片,给用户更多的选择。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

HI223.COM 举报邮箱:345306361@qq.com

GMT+8, 2025-7-5 19:12 , Processed in 0.073455 second(s), 18 queries .

Powered by HI223分享社区 2.3

© 2019-2020 Hi223 All Right Reserved

渝公网安备 50022502000358号

渝ICP备14008270号-3