2010-10-15 2 views
0

Я использую этот бит кода, чтобы переформатировать некоторый большой ответ ajax responseText в хорошие двоичные данные. Он работает, хотя и медленный.Может ли разворачивать петлю или помогать вам в этой ситуации?

Данные, с которыми я работаю, могут достигать 8-10 мегабайт.

Мне нужно, чтобы этот код был абсолютно эффективным. Каким образом будет выполняться циклическое разворачивание или устройство Даффа к этому коду, сохраняя при этом мои двоичные данные, или кто-нибудь видит что-либо, что может быть изменено, что поможет увеличить его скорость?

var ff = []; 
var mx = text.length; 
var scc= String.fromCharCode; 
for (var z = 0; z < mx; z++) { 
    ff[z] = scc(text.charCodeAt(z) & 255); 
} 
var b = ff.join(""); 
this.fp=b; 
return b; 

Благодаря Pat

+0

Вы удивлены, что обработка 8-10 Мбайт, байт по байтам, медленная в JavaScript? Как медленно мы говорим здесь? И посмотрите также: [Почему array.push иногда быстрее, чем массив \ [n \] = значение?] (Http://stackoverflow.com/questions/614126/why-is-array-push-sometimes-faster-than- arrayn-value) – Shog9

ответ

1

Ваше время - это не петля. Это все: ff[z] = scc(text.charCodeAt(z) & 255); Вы постепенно увеличиваетесь ff? Это будет свинья, гарантированная.

Если вы просто запустили его под отладчиком и приостановите его, я уверен, вы увидите его в процессе роста ff. Предварительно выделить.

+0

Не сказал, что это не могло изменить ситуацию, но я скорее сомневаюсь, что это будет большая разница ... или улучшение *. Если у вас есть тесты, которые указывают иначе, вы должны опубликовать их. – Shog9

+0

@ Shog9: Возможно, 'push' - лучший способ добавить элементы. В любом случае, я подозреваю, что цикл 'for' не там, где время идет. –

+0

@Mike: Я согласен с тобой, что бит цикла не является большим фактором. Производительность массива сильно варьируется в разных браузерах (даже между версиями браузера), равно как и относительная производительность конкатенации строк по сравнению с array.join(). Я хотел бы получить дополнительную информацию от OP о том, где он работает, и о том, как он работает на самом деле, - я скорее подозреваю, что он может значительно улучшить ситуацию *, перейдя на регулярное выражение (собственный код полностью). – Shog9

0

Преобразование данных в массив JSON на сервере. 8/10 мегабайт займет много времени даже с родным движком JSON. Я не уверен, почему приложение JS нуждается в 8/10 мегабайтах данных. Если вы загружаете на устройство клиента, конвертируйте его в формат, который они ожидают, и просто ссылаются на него. Затем они могут загрузить и обработать их сами.

Смежные вопросы