我可以在ASP中延迟执行吗?或者:请提供有关提高旧ASP站点性能的任何帮助

我正在努力提高用经典ASP编写的网站的性能.

它支持多种语言,问题在于如何实现.它有以下方法:

GetTranslation(id,language)

这就是遍布全店的商店:

<%= GetTranslation([someid],[thelanguage]) %>

该方法只查找SQL中的ID和语言并返回转换.简单.

但是非常低效.在每个页面加载时,大约有300个独立的SQL调用来获得单独的翻译.

我已经在许多场景中显着提高了性能:

>一个C#工具,用于扫描.asp文件并获取对GetTranslation的引用
>然后,该工具构建一个“批量缓存”方法(取决于页面)获取它找到的所有ID,并一举将结果缓存到字典中.
>然后更新GetTranslation方法以检查字典中是否有任何请求,并且只有在它已经存在的情况下才会转到SQL(并在必要时缓存它自己的结果)

这只是到目前为止.

当翻译的ID存储在数据库中时,我无法选择它们(特别容易).

理想情况下,GetTranslation方法会在每次调用时构建一个只在页面请求结束时执行的大型SQL字符串.

这可能在ASP?我可以得到<%= …%>的结果吗?是对后来解决的东西的引用?

我也真诚地感谢任何其他创造性的方法,我可以改善这个古老,丑陋的野兽的表现.

最佳答案 我们在电子商务系统中使用具有命名空间和语言属性的i18n类.该类有一个名为’translate’的默认函数,它基本上预先形成字典查找.使用包含命名空间和语言的所有翻译的文本文件中的memento模式加载此字典.

这些翻译文件的骨架由自定义工具(实际上用vbscript编写)生成,该工具解析ASP的i18n($somestring)调用.文件名基于命名空间和语言,例如“shoppingcart_step_1_FR.txt”.当我们向ASP代码添加新的可翻译字符串时,该工具实际上可以更新/扩展现有的翻译文件,这对于维护非常重要.

使用此方法的性能开销很小.由于分割,我们最大的翻译文件包含大约200个可翻译字符串(包括静态图像网址).根据请求加载它对性能的影响很小.我想可以使用一些第三方的tessafe字典来缓存应用程序对象中的翻译字典,但恕我直言这不值得.

额外提示,在字符串中使用变量替换以提高可翻译性.
例如使用:

  <%=replace(i18n("Buy $productname"), "$productname", product.name)%> 

代替

  <%=i18n("Buy")%> <%=product.name%> 

对于翻译人员来说,第一种方法更灵活.很多语言都有不同的句子结构.

点赞