然后,主页面只需简单地调用一下html()即可构造出Web页面。这种页面只有在用户启用了浏览器的JavaScript支持之后才会显示。如果用户查看这种页面的源代码,他看到的只有一个函数调用,而不会看到函数调用所返回的源代码。
这种表现出两种(或更多)不同类型文件特征的ASP可以称为“混合ASP”。下面是JavaScript/ASP混合文件的一些特点:
JavaScript源文件直接发向浏览器,未经缓存。
文件经过必要的验证,防止了用户下载源代码。
最终用户不能直接访问源代码。
会话变量:
在的例子中,我们使用会话变量验证JavaScript源文件调用的起源。如果网站的访问量非常高,这可能不是进行验证的最好方法。
每次用户访问Web页面或Web应用时都要创建一个会话变量。服务器保持会话唯一标识符的默认时间是20分钟。如果服务器同时要为大量访问者维持状态信息,你可以想象出服务器的负载会有多高。
解决这个问题主要有两种方法:
在服务器上把会话超时时间设置得尽量小。此外,当代码已经发送给浏览器之后,调用Session.Abandon会话状态信息。这种方法适用于中小流量的网站。
对于高流量的网站,通过GUID/数据库结合维持会话状态的方法进行验证。
内存分配:
大多数基于Mozilla的浏览器都用Spidermonkey JavaScript引擎解释执行JavaScript。这个引擎的优点包括:以解释方式执行代码(与编译方式相对应),动态垃圾收集机制(换句话说,自动内存空间避免内存漏洞计算机资源)。
试试下面这个操作:运行的例子。函数执行之后,进入URL地址栏,选中URL并敲Enter,你可以看到此时函数并不执行,浏览器显示了一个JavaScript错误。然而,如果你点击浏览器的刷新按钮,函数将正常执行。
下面是产生这种情况的原因:JavaScript函数执行之后,由于浏览器假定需要时这些代码仍旧可以从缓存获得,于是它就了为JavaScript保留的内存。然而,ASP代码了浏览器缓存JavaScript代码。由于浏览器不能再引用内存中的函数,也不能再从缓存中获取函数代码,所以你就在按Enter键时看到了一个错误。
点击浏览器的刷新按钮时,浏览器将重新从服务器下载函数代码并执行。如果代码不再引用函数,则JavaScript引擎将函数。但有一种方法可以强制浏览器在内存中保留函数,即在程序执行期间始终激活对函数的引用。
早期的/不兼容的浏览器:
毫无疑问,本文所介绍的方法不适合JavaScript版本早于1.2的浏览器。解决办法是编写一个预先进行检查的程序,由该程序检查用户浏览器是否和你的Web应用兼容。
包截取:
理论上,只要窃取代码的人具有足够的决心,他可以在代码向浏览器发送时通过窃取数据包窃取代码。然而,这项工作所要耗费的时间和精力使得它几乎成为不可能的事情。而且,如果你想要获得百分之百安全的传输,还可以使用SSL。使用SSL唯一的缺点在于应用只能在支持SSL的浏览器上运行。
小结:
“混合ASP”技术的应用当然不会局限于ASP和JavaScript源文件。在理论上,它可以在许多服务器端脚本语言中应用,比如CGI或者PHP。此外,这种技术理论上还可以用于其他文件,如图形、声音和文档。例如,“混合ASP”文件完全可以起到图形文件的作用,具体方法是先验证请求的起源,向浏览器发送正确的内容类型标识,然后从SQL数据库提取并发送BLOB字段的图形文件。它在这方面的应用可以说是没有止境的。
在未来的许多年里,JavaScript和DHTML仍将继续发展,并继续作为一种重要的Web开发工具而存在。W3C有望认可客户端编程工具的价值和重要性,并为了它而制定一个标准。
延伸内容:
网友评论 ()条 查看