当前位置: 首页 > news >正文

WebService,jQuery,原生对象几种前端加载数据的性能比较(1)

详细分析

1. 首先,创建一系列的实体类:

代码

/// <summary>
/// 用户信息
/// </summary>
public class UserInfo
{
public int UserId { get; set; }

public string UserName { get; set; }

public string Email { get; set; }

public Class Class { get; set; }

public List<UserRight> UserRightList { get; set; }
}

/// <summary>
/// 班级信息
/// </summary>
public class Class
{
public int ClassId { get; set; }

public string ClassName { get; set; }
}

/// <summary>
/// 用户权限信息
/// </summary>
public class UserRight
{
public int RightId { get; set; }

public string RightName { get; set; }
}

其中包括用户信息类、班级信息类、用户权限类。

2. 在Web.config配置一个appsettings节点

<appSettings>
<add key="DataCount" value="3000"/>
</appSettings>

表示一次加载的数据量(用户信息数)为3000。

并且将compilation节点的dubug属性设置为false。

3. JSON加载数据测试

1)首先先测试 WebService客户端调用并且最后返回JSON加载数据:

代码

function bindDataWebServiceJson() {
var watch = new Stopwatch();
watch.start();

JsonService.GetUserList(
function(data) {

var builder = new Sys.StringBuilder();
for (var i = 0, length = data.length; i < length; i++) {
builder.append(String.format("<div>UserId:{0}, UserName:{1}, Email:{2}</div>", data[i].UserId, data[i].UserName, data[i].Email));
}

$("#msg2").html(builder.toString());
watch.stop();
$("#time2").html("用时:" + watch.ms + "毫秒.");

});
}

(注:这里引入了一个Stopwatch计时器,很简单,具体可以参考:JS版Stopwatch计时器 - Leepy - 博客园)

通过代码,我们可以看到它调用了JsonService.asmx中Web服务的GetUserList方法:

代码

[WebMethod]
public List<UserInfo> GetUserList()
{
int count = Convert.ToInt32(ConfigurationManager.AppSettings["DataCount"]);
List<UserInfo> list = new List<UserInfo>();
for (int i = 0; i < count; i++)
{
list.Add(new UserInfo { UserId = i, UserName = "leepy" + i, Email = "sunleepy" + i + "@gmail.com" });
}
return list;
}

返回了一个3000条记录的UserInfo实体列表,而前端页面通过对列表返回客户端时的Json对象,进行Html字符串拼接,最后通过jQuery的Dom元素html(‘…’)方法赋值。运行加载结果为:

目前我的项目大多数就是采用这样的模式。

2)接着,如果使用jQuery的$.ajax调用并且最后JSON加载数据:

代码

function bindDatajQueryAjaxJson() {
var watch = new Stopwatch();
watch.start();
$.ajax({
url: "JsonHandler.ashx",
dataType: 'json',
cache: false,
success: function(data) {
var builder = new Sys.StringBuilder();
for (var i = 0, length = data.length; i < length; i++) {
builder.append(String.format("<div>UserId:{0}, UserName:{1}, Email:{2}</div>", data[i].UserId, data[i].UserName, data[i].Email));
}
$("#msg4").html(builder.toString());

watch.stop();
$("#time4").html("用时:" + watch.ms + "毫秒.");
}
});
}

通过JsonHandler.ashx的页面处理程序执行返回数据:

代码

public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/x-javascript";
int count = Convert.ToInt32(ConfigurationManager.AppSettings["DataCount"]);

List<UserInfo> list = new List<UserInfo>();
for (int i = 0; i < count; i++)
{
list.Add(new UserInfo { UserId = i, UserName = "leepy" + i, Email = "sunleepy" + i + "@gmail.com" });
}
StringBuilder builder = new StringBuilder();
string data = "[";
for (int i = 0, length = list.Count; i < length; i++)
{
data += "{" + string.Format("'UserId':'{0}','UserName':'{1}', 'Email':'{2}'", list[i].UserId, list[i].UserName, list[i].Email) + "},";
}
data = data.TrimEnd(',') + "]";
context.Response.Write(data);
}

也是3000条用户数据,运行加载结果为:

比WebService快了一些。

3)接着,使用$.getJSON来调用并且JSON加载数据:

http://www.jsqmd.com/news/1132501/

相关文章:

  • 多重共线性实战指南:检测、诊断与业务可解释的解决方案
  • 解锁免费高品质音乐:洛雪音乐音源完全指南
  • 3步解决Deforum扩展安装与使用难题:从零到动画生成的完整指南
  • 爆款复刻ai工具,2026年爆款视频复刻工作流,5款横评实测
  • 指数分布实战指南:从泊松过程到失效率建模
  • 如何快速上手 openeuler/cloudphone_kernel?从环境搭建到首次运行的完整指南
  • 音视频合成免费,2026音视频合成工作流,5款选型指南
  • 三步搞定!国家中小学智慧教育平台电子课本下载全攻略
  • 3步掌握洛雪音乐音源配置:彻底解决多平台音乐资源整合难题
  • GoFrame + Vue3 后台管理系统实战:CRUD、权限和菜单如何少写重复代码
  • 个人数据主权革命:WeChatMsg如何重新定义数字记忆资产管理
  • 终极Marp VS Code扩展指南:5分钟掌握Markdown幻灯片制作
  • 青少年 Python 入门 | 每天打开看一看——「暑假倒计时日历」+ 每日一句
  • 如何在浏览器中实现实时人体姿态搜索:完整指南与实战应用
  • Floyd算法的一点讨论
  • 基于multisim的音响放大系统设计20Hz-20KHz
  • 上千本绝版中医医学类书籍大合集高清pdf
  • 【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案
  • Android存储清理终极指南:如何用SD Maid 2/SE让手机重获新生
  • 如何快速搭建免费高品质音乐库:洛雪音乐音源完全配置指南
  • 【git教程】科研技能必备——git的使用
  • 2026实战|RPA工程师真相 + 0基础入行 + 攻略(含超级自动化 + AI+RPA),看完直接落地
  • NHibernate实现延迟加载的主要结构:
  • 湿地生态好不好,不能只看绿不绿
  • 依赖注入与对象间关系
  • MLS点云道路标线自动化提取:基于PCL与OpenCV实现95%+准确率(附代码)
  • 【学习记录】Week14(二):沙箱机制深度剖析与进阶 ORW 绕过体系
  • 从零学习Kafka:调优
  • # TDengine TMQ 最佳实践 — 可靠消费、容错与监控
  • Node.js-Phase 1 学习总结:CLI 文件管理系统