Хорошо здесь я сравниваю Две функции, один сделанный один (regExp) и другой сделанный (annakata).
массив Разделения:
function insertParam(key, value)
{
key = escape(key); value = escape(value);
var kvp = document.location.search.substr(1).split('&');
var i=kvp.length; var x; while(i--)
{
x = kvp[i].split('=');
if (x[0]==key)
{
x[1] = value;
kvp[i] = x.join('=');
break;
}
}
if(i<0) {kvp[kvp.length] = [key,value].join('=');}
//this will reload the page, it's likely better to store this until finished
return "&"+kvp.join('&');
}
метод Regexp:
function addParameter(param, value)
{
var regexp = new RegExp("(\\?|\\&)" + param + "\\=([^\\&]*)(\\&|$)");
if (regexp.test(document.location.search))
return (document.location.search.toString().replace(regexp, function(a, b, c, d)
{
return (b + param + "=" + value + d);
}));
else
return document.location.search+ param + "=" + value;
}
случай Тестирования:
time1=(new Date).getTime();
for (var i=0;i<10000;i++)
{
addParameter("test","test");
}
time2=(new Date).getTime();
for (var i=0;i<10000;i++)
{
insertParam("test","test");
}
time3=(new Date).getTime();
console.log((time2-time1)+" "+(time3-time2));
кажется, что даже с простым решением (когда regexp используют только тест и не вводят функцию .replace), это еще медленнее, чем разделение... Хорошо. Regexp является довольно медленным, но... uhh...
нулевой объект
может означать, что saveOrUpdate ()
на самом деле получает null
в качестве аргумента, то есть:
session.saveOrUpdate(null);
Если вы используя сериализацию для перехода к объекту в удаленное место (вы упомянули RPC), возможно, вам следует проверить, правильно ли работает сериализация. Что-то мне подсказывает, что в результате неудачной сериализации может быть передана пустая ссылка.