Оптимизация js-кода

П1
На сайте с 12.10.2009
Offline
10
538

Прошу помощи в оптимизации следующего кода. Если логика его вообще неверная, прошу также подсказать, а не кидаться помидорами =)

Данный код обрабатывает результат выполнения php-кода, который в свою очередь возвращается двумя json_encode'ами.

Грубо говоря

	$arr['skid'] = 'zxc';

$arr['koefparam'] = 'qwe';

$arr = json_encode($arr);

(таких участков много)

И затем они все в другой массив(который уже возвращается JS-скрпипту)

	$arr2[] = $arr;

$arr2[] = $arr;
$arr2[] = $arr;

echo json_encode($arr2);

skid - куда необходимо вставит полученное значение

koefparam - само значение

показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки

	var bt = eval("(" + data + ")");

var bt_i = [];
var bt_z = [];
var i;
var btlength = bt.length;


for(i=0;i<btlength; i++)
{
bt_i = eval("(" + bt + ")");
}


var btilength = bt_i.length;

for(i=0;i<btilength; i++)
{
var btiskidlength = bt_i.skid.length;

for(z=0;z<btiskidlength; z++)
{
$('#'+bt_i.skid[z]).text(''+bt_i.koefparam[z]);
}
}
ДП
На сайте с 23.11.2009
Offline
203
#1

Во-первых, зачем вы первый раз кодируете массив в json?

Во-вторых, судя по $('#' вы юзаете jquery? Если да, то там у аяксовых функций есть 4 параметр - тип данных, там можно поставить значение "json" - тогда можно будет к data обращаться сразу как к объекту - как минимум один eval уберете.

Дикий пионер добавил 22.02.2011 в 22:54

И что-то забыл спросить - цель-то у кода какая? В определенные элементы текст записать?

П1
На сайте с 12.10.2009
Offline
10
#2

Большое спасибо!

Убрал первое кодирование в json и добавил параметр к $.post, следственно минус два eval и один цикл. Изменения заметны, но борюсь дальше =) Хотя мне кажется что уже все.

Цель кода вписать в ячейки таблицы различные значения. При этом id таблицы определяется php-кодом. Сейчас я думаю наибольшая нагрузка из-за цикла в цикле, так как значений довольно много.

Сейчас код выглядит так:


$.post("calcsystem.php", send_param, function(data){
var i;
var btilength = data.length;

for(i=0;i<btilength; i++)
{
var btiskidlength = data.skid.length;

for(z=0;z<btiskidlength; z++)
{
$('#'+data.skid[z]).text(''+data.koefparam[z]);
}
}
}, 'json');
ДП
На сайте с 23.11.2009
Offline
203
#3

Отлично. Следующее мое предложение. Я всех условий вашей задачи не знаю, но если на сервере есть возможность сгенерировать масив вот таким образом:


$arr['zxc1'] = 'qwe1';
$arr['zxc2'] = 'qwe2';
$arr['zxc3'] = 'qwe3';
$arr['zxc4'] = 'qwe4';

echo json_encode($arr);

то обрабатывать его можно будет так:


function(data){
for(key in data)
{
$("#"+key).text(data[key]);
}

Дикий пионер добавил 22.02.2011 в 23:50

Если таблица реально большая и тормоза заметны, то может ее лучше на сервере генерировать и уже готовым куском html передавать?

П1
На сайте с 12.10.2009
Offline
10
#4

Поменял сборку итогового массива, который уже все передает, с массива на соединение мелких массивов через array_merge и такая возможность появилась =).

Еще раз огромное спасибо!

Сейчас еще поиграюсь с текущей структурой и если тормоза останутся, то буду генерировать на сервере. Но пока что полет очень хороший! =)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий