国庆几天因计划变故未出游, 在家对javascript作了一些研究,产生了一个有趣的想法。我写了一个迷你的 javascript 库(基于prototpye)实现了它。我称这个库为Jscp - javascript client page。使用 Jscp, 可以把 render 页面模版与数据以生成最终页面的工作移到客户端进行,也就是说,在浏览器中进行这项工作。

传统的服务模型:
1. client   --- 发送请求 --->  server
2. client(等待)                            server (服务请求,产生结果数据)
3. client(等待)                            server (将数据与页面模版进行rendering)
4. client   <---  接收结果页面 --- server

使用 Jscp,服务模型变成:
1. client   --- 发送请求  ---> server
2. client   <---  接收页面模版 --- server (页面模版可以被缓存以多次使用)
3. client   --- 发送请求--->  server
4. client(等待)                            server (服务请求,产生结果数据)
5. client   <---  接收结果数据--- server  (数据使用 JSON 格式)
6. client (将数据与页面模版进行rendering)                 server

我想这个模型在服务端与客户端之间提供了更清晰的接口。运行在服务端的代码集中于完成请求,产生正确的结果数据,用标准的JSON格式返回。与页面模版融合并显示的代码则运行在客户端(虽然代码的部署仍然是在服务器上)。我不清楚是否已经有某个javascript库实现了该特性,我找了但没有发现。(Prototype 虽然对JSON有简单支持,但其并没有用来实现Jscp中的特性)
 
下面是一个简单的例子对比两种模型下的代码:
使用 PHP, .php中代码类似如下:
... <? for i=0; i<3; ++i { ?>
... <? echo res[i].'/r/n' ?>
... <? } ?>
 
使用 Ruby on Rails, .rhtml中代码类似如下:
... <% 1.to(3) do { |i| %>
... <%= @res[i] %>
... <% } %>
 
使用 Jscp, 模板页面(.jscp.html)中的代码类似如下: (使用javascript)
... <%INC ../layout_header.htm %>
... <% var r=_RENDER_DATA; %>
... <% for i=0; i<3; ++i { %>
... <%= r.res[i] %>
... <% } %>
... <%INC ../layout_foot.htm %>

通过把rendering的工作移到浏览器端,许多效果可以很容易的实现,比如浏览器端分页,列表排序等。Jscp并不与其它的Ajax技术冲突,因为它是位于它们的底层的。

我在sourceforge.net上为JSCP注册了项目,源码、文档、及例子可以访问以下网页获得。

http://jscpage.sourceforge.net

Jscp (Javascript client page) javascript 库相关推荐

  1. JavaScript的RSA加密库(cryptico、Node-rsa、Crypto、jsrsasign、JSEncrypt)

    JavaScript的RSA加密库 一.Rsa利用openssl生成公钥私钥 1.安装openssl: 2.生成公钥: 3.生成私钥: 二.Cryptico 1.优点: 2.缺点: 3.安装: 4.D ...

  2. 15个非常实用的JavaScript表单验证库

    来源:web前端开发 https://mp.weixin.qq.com/s/p9s9cmAt2MZeCgmD2LC5Sg 客户端验证在任何项目都是不可缺少的,很多时候我们需要在用户提交到服务器之前给予 ...

  3. 后端返回number类型数据_【JavaScript 教程】标准库—Number 对象

    作者 | 阮一峰 1.概述 Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用. 作为构造函数时,它用于生成值为数值的对象. var n = new Number(1) ...

  4. 对象数组参数_【JavaScript 教程】标准库—Array 对象

    作者 | 阮一峰 1.构造函数 Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组. var arr = new Array(2);arr.length // ...

  5. 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  6. 字符串处理_5个JavaScript的字符串处理库,不再996

    处理大小写转换,删除字母符号,Unicode处理,URL处理等 使用字符串可能是一项繁琐的任务,因为有许多不同的用例.例如,将字符串转换为驼峰大小写这样的简单任务可能需要几行代码才能达到最终目标. f ...

  7. JavaScript之第三方开源库(underscore)学习篇

    JavaScript之第三方开源库(underscore)学习篇 第三方开源库underscore 分类功能 数组操作 高阶函数 面向对象函数 链式调用 第三方开源库underscore JavaSc ...

  8. Day.js轻量级 JavaScript 时间日期处理库可替代Moment.js

    Day.js 是一个仅 2kb 大小的轻量级 JavaScript 时间日期处理库,和 Moment.js 的 API 设计保持完全一样.如果你曾经用过 Moment.js ,那么你已经知道如何使用 ...

  9. linq结果转换object_【JavaScript 教程】标准库—Object 对象

    作者 | 阮一峰 1.概述 JavaScript 原生提供Object对象(注意起首的O是大写),本章介绍该对象原生的各种方法. JavaScript 的所有其他对象都继承自Object对象,即那些对 ...

最新文章

  1. MySQL外键与外键关系说明(简单易懂)
  2. 一次检验自己技术和耐力的碎片提取经历
  3. ASP程序中调用函数Now()显示上午下午的问题
  4. Redis集群技术及Codis实践
  5. CentOS单机安装k8s并部署.NET 6程序
  6. 复函数图像怎么画_如何画出复平面上的网格在复函数映射下的图像?
  7. java jobdetail_Spring创建JobDetail的两种方式
  8. git 应用 远程仓库分歧
  9. yum install nload失败,提示No package nload available.Error: Nothing to do
  10. linux 挖矿效率_linux 服务器发现了挖矿病毒
  11. 关于在linux系统下卸载软件的问题
  12. kotlin-stdlib 与 kotlin-stdlib-jdk7
  13. opencv 物体尺寸测量
  14. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)
  15. android摇一摇功能实现
  16. 音频特效生成与算法 3
  17. 常见WebShell客户端的流量特征及检测思路
  18. 虚拟机由于硬盘存储空间过满导致启动异常+虚拟机扩容
  19. APP又被下架?手把手教你整改合规
  20. 结对第二次—文献摘要热词统计及进阶需求

热门文章

  1. 1一10到时的英文单词_1到100的英语单词
  2. 重生玄幻练制超级计算机小说,四本好看过瘾的转世重生类玄幻小说,熬夜也要看,根本停不下来...
  3. 怎么找回电脑误删的文件方法汇总
  4. 对玩家爱好的深渊领主们--魔兽争霸里的深渊魔王评论
  5. 程序员在线练习打字的网页
  6. 拿科比死和疫情伤亡人数对比,不是蠢就是坏!
  7. 啊哈瞬间之tableSizeFor函数
  8. OutOfMemoryError系列(3): Permgen space
  9. JS 基础篇(七) 函数柯理化
  10. 学习记录:Ubuntu系统安装远程控制软件teamviewer