Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

DZ X3需要考虑的技术问题

[复制链接]
mark35 发表于 2012-8-20 19:16:47 | 显示全部楼层 |阅读模式
本帖最后由 mark35 于 2012-12-3 20:10 编辑

大家对未来的X3提的建议都是功能、应用上的,我这儿提两个技术上的吧

1、默认使用jQuery作为基础框架,并重写js中ajax相关代码。

2、ajax交换格式由XML换成JSON。

前者可以提升模板开发效率。后者可以减小带宽损耗以及简洁PHP中代码。



评分

3

查看全部评分

回复

使用道具 举报

 楼主| mark35 发表于 2012-8-21 09:39:05 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 20:10 编辑

加一条:
3. 重写DB类,用PHP::PDO代替数据库函数。
PHP5开始PDO成熟,并将会是PHP6的默认数据库抽象层(虽然看起来v6遥遥无期)。就功能上PDO属于轻量级抽象层,某些特定数据库函数(如mysql_unbuffered_query)无对应PDO方法。不过胜在标准和简单。 DZ X3可以考虑使用它。
回复

使用道具 举报

 楼主| mark35 发表于 2012-8-22 14:22:25 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 20:20 编辑

4. 随着新版开发,可以看出dz开发人员在努力。
比如数据库表名开始规范,以前是 cdb_members ,现在是 pre_common_member 重点差别在于复数s上。这个名称直接变化说明了进步。

不过在PHP代码上还有改进的地方,对字符串变量取单个字符应该使用[]中括号,而放弃使用{}花括号
  1. function getattachtableid($tid) {
  2.         $tid = (string)$tid;
  3.         return intval($tid{strlen($tid)-1});
  4. }
复制代码
在以前中括号、大括号都可以对字符串操作。但后者现在已经不被推荐使用。希望在X3时能改进。

ps,上面这个代码改成如下似乎效率更高:

  1. function getattachtableid($tid) {
  2.         $tid = (string) $tid;
  3.         return substr($tid, -1);
  4. }
复制代码
因为返回值是被当成字符来拼接 pre_forum_attachment_[0-9] 这个字符串的,所以可以省去最后一步的intval()操作。

回复

使用道具 举报

 楼主| mark35 发表于 2012-9-12 17:55:45 | 显示全部楼层
5、使用效率更高的数据结构 (int) $var 替代函数调用的 intval($val)
回复

使用道具 举报

 楼主| mark35 发表于 2012-9-24 13:54:43 | 显示全部楼层
6、X3可以考虑对 IPv6的支持。 ipv6是大势所趋,中国电信联通等运营商计划在2013年末开始大规模的ipv6部署,如果不作应对到时候dz登录将会是大问题
因为dz的session表是用了4个字段分别保存IPv4的4个区段,每个区段8位。而IPv6每个区段是16位共128位。因为IPv6的格式所以是不能简单扩展表字段到8个来解决的(存在::这种情况),并且这种表字段设计也比较笨。
在这点上postgresql简直太贴心了,它不仅支持ip类型字段而且是INET,CIDR两类类型还要加上MAC类型
PostgreSQL提供用于存储 IPv4 、IPv6 、MAC 地址的数据类型,在表8-17里显示。用这些数据类型存储网络地址比用纯文本类型好,因为这些类型提供输入错误检查和好些种特殊的操作和功能(见节9.11)。

表8-17. 网络地址类型

名字 存储空间 描述
cidr 12 或 24 字节 IPv4 或 IPv6 网络
inet 12 或 24 字节 IPv4 或 IPv6 网络和主机
macaddr 6 字节 MAC 地址

在对 inet 或 cidr 数据类型进行排序的时候,IPv4 地址总是排在 IPv6 地址前面,包括那些封装或者是映射在 IPv6 地址里的 IPv4 地址,比如 ::10.2.3.4 或 ::ffff::10.4.3.2

8.8.1. inet
inet 在一个数据域里保存主机的 IPv4 或 IPv6 地址,以及一个可选的等效子网。子网的等效是通过计算主机地址中有多少位表示网络地址的方法来表示的("子网掩码")。如果子网掩码是 32 并且地址是 IPv4 ,那么不表示任何子网,只是一台主机。在 IPv6 里,地址长度是 128 位,因此 128 位表明一个唯一的主机地址。请注意如果你想只接受网络地址,你应该使用 cidr 类型而不是 inet 类型。

该类型的输入格式是 address/y ,这里的 address 是 IPv4 或者 IPv6 地址,y 是子网掩码的二进制位数。如果 /y 部分未填,则子网掩码对 IPv4 而言是 32 ,对 IPv6 而言是 128 ,所以该值表示只有一台主机。显示时,如果该值表示只有一台主机,/y 将不会显示

8.8.2. cidr
cidr 保存一个 IPv4 或 IPv6 网络地址。其输入和输出遵循无类别的互联网域路由习惯。声明一个网络的格式是 address/y ,这里的 address 是 IPv4 或者 IPv6 地址,y 是子网掩码的二进制位数。如果省略 y ,那么掩码部分用旧的有类别的网络编号系统进行计算,但要求输入的数据已经包括了确定掩码所需的所有字节。声明一个指定掩码的网络地址是错误的。



回复

使用道具 举报

小森我爱你 发表于 2012-8-20 19:36:35 | 显示全部楼层
你考虑的,腾讯也会考虑的,但以利益为重,你懂的。
回复

使用道具 举报

孝感 发表于 2012-8-20 19:54:25 | 显示全部楼层
加入jquery 还是可以的 。但我还是习惯 json ,希望能用json
回复

使用道具 举报

 楼主| mark35 发表于 2012-8-20 21:03:10 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 20:10 编辑
孝感 发表于 2012-8-20 19:54
加入jquery 还是可以的 。但我还是习惯 json ,希望能用json

XML麻烦多多: 组装返回值麻烦;浪费带宽(开了gzip/deflate要好些);js解析开销大;遇上传输错误或者解析错误会导致js执行错误。
回复

使用道具 举报

hjyy 发表于 2012-8-20 22:42:05 | 显示全部楼层
如果代码效率问题,那我们怎么办呢。
回复

使用道具 举报

kumotobi 发表于 2012-8-21 07:08:12 | 显示全部楼层
mark35  的建议很有道理
回复

使用道具 举报

 楼主| mark35 发表于 2012-8-21 09:31:17 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 20:10 编辑
hjyy 发表于 2012-8-20 22:42
如果代码效率问题,那我们怎么办呢。

DZ对于XML主要是使用在ajax上, 小部分在插件配置文档。就使用度来说对系统性能影响不大,主要是代码简洁易读可维护性方面差点,这点来说用户感受不到,是开发人员的事情。
回复

使用道具 举报

kumotobi 发表于 2012-8-21 10:34:26 | 显示全部楼层
mark35 发表于 2012-8-21 09:39
加一条:
3. 重写DB类,用PHP:DO代替数据库函数。
PHP5开始PDO成熟,并将会是PHP6的默认数据库抽象层( ...

虽不明,但觉厉
回复

使用道具 举报

wangxiaoyu1995 发表于 2012-8-21 11:26:30 | 显示全部楼层
学习了、、、
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-11 09:44 , Processed in 0.124293 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表