![]() |
|
||||||||||
|
|||||
|
Мысля пришла по поводу массива: передавать его одной строкой, разделяя, скажем, запятыми (или любым другим символом). Потом из этой строки 'str' делается массив 'arr' таким образом:
В скобках - символ-разделитель.
__________________
Work not wolf - in forest no run |
|
|||||
|
Регистрация: Sep 2002
Сообщений: 16
|
Собственно, я так и делаю - передаю во флеш строку, в которой эелементы массива разделены, но не запятыми, а парой символов, например ${. Любым печатаемым символом, в т.ч. запятой, нельзя, т.к. этот символ обязательно встретится в тексте, тогда split выдаст не то что нужно... К сожалению, насколько я знаю, во флеше нельзя разделить строку на массив, если разделителем элементов является более одного символа... Но и это не самая главная проблема. Самая большая проблема - объем данных, т.к. когда флеш разбирает большую строку на двумерный массив, в котором элементы столбцов являются строками, то, например, если во флеш передать массив из трех столбцов и 100 строк, то все работает, а 300 строк уже не переваривает - говорит что зациклился...
|
|
|||||
|
Точно нельзя двумя символами? Обидно. А если табом ("\t")?
А как ты двумерный массив распарсиваешь? Может, разбить по кадрам, как я выше предлагал? Или слать по частям по сотне строк каждая? В какой версии флеша работаешь? Судя по Генератору - в пятёрке? Попробуй эмыкс - он, насколько я знаю, не столь критичен к разбору строк, да и возможностей поболе.
__________________
Work not wolf - in forest no run |
|
|||||
|
Регистрация: Sep 2002
Сообщений: 16
|
Если использовать \t, то можно использовать split, но я сейчас проверил - если елементы одномерного массива - строки длиной 15 символов и в массиве 300 строк, то при выполнении split флеш задумывается, а потом предлагает прервать скрипт...
|
|
|||||
|
Н-да. Хорошая вещь - флешь
![]() Ну тогда либо с сервера отдавать по частям, либо - совсем уж тупо - выдавать: N, item1, item2, ..., itemN. Хотя хрен его знает, может он и от этого перенапряжётся... ![]()
__________________
Work not wolf - in forest no run |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
String.prototype.split = function(d) {
if (d != null) {
var r = new Array();
var size = this.length;
var c = 0;
var n = 0;
if (d != "") {
for (var i = 0; i<=size; ++i) {
if (substring(this, i+1, 1) == d) {
r[n] = substring(this, c+1, i-c);
c = i+1;
++n;
}
}
if (c != i) {
r[n] = substring(this, c+1, i-c);
}
} else {
for (var i = 0; i<size; ++i) {
r[i] = substring(this, i+1, 1);
}
}
} else {
r = new Array(this.toString());
}
return (r);
};
может это и не спасет, но мертвым еще никогда не было плохо от припарок зы: взято на одном умном сайте хотя все и так понятно, но до этого еще нужно догадаться ![]() |
|
|||||
|
Регистрация: Sep 2002
Сообщений: 16
|
Nox Noctis - проверил... Результаты очень интересные !
Работоспособность присланного скрипта зависит от нескольких причин... Во-первых, зависит от общей длины разбиваемой на массив строки и от количества элементов массива, на которые делится строка. Например, если строка длиной примерно 18 кВ, то ее можно поделить на массив в 1000 элементов, если длина каждого элемента примерно 10-15 байт, если длина елемента массива около 20 байт, то соответственно элементов массива будет 500... Стандартный же split сваливается, если во флеш передавать строку длиной около 5 кВ и разбивать ее на массив примерно в 275 элементов. Но что интересно. Результат сильно зависит от компьютера, на котором все это проверялось. Приведенные цифры получены на 4-м пне с частотой около 1800 и ОЗУ 256 М. На третьем пне с частотой 500 и ОЗУ 512 результат значительно ниже. И еще одно наблюдение - на 4-ом пне разница в скорости работы стандартного split и указанного алгоритма достигает нескольких раз, а вот на третьем пне эту разницу почувствовать не удалось... |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
хмм... у меня простенький п3-733мхз и разницу видно невооруженным плеером
![]() ну да ладно... главное - стандартный сплит нигде этот вариант не обходит... ...так что в любом случае - зачем платить больше, если результат точно не хуже ? ![]() |
|
|||||
|
Регистрация: Sep 2002
Сообщений: 16
|
На моем третьем пне разница в длине строки, когда после стандартного split сваливается и нестандартный, составила всего лишь около 100 байт, даже чуть меньше. Мне это кажется странным, но чем объяснить - не знаю... Тем более, что на четвертом пне - разница очень значительная, по времени работы - в разы... Но к сожалению, и нестандартный split недостаточно много может обработать... Я работаю с базами данных и специфика такая, что часто запросы возвращают много строк - иногда доходит до одной-двух-трех тысяч... Конечно, если я все-таки буду делать интерфейс на флеше, придется в серверном приложении учитывать эти особенности флеша... Как я уже писал - пытался попробовать Macromedia Generator - там свои заморочки... Вообще непонятно, на какой сервер его ставить, в off-line есть свои проблемы, а в on-line попробовать не могу...
|
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ну так нужно доработать эту штуковину :)
там два цикла фор - вот они убивают плеер... значит нужно сделать так, чтобы по истечении определенного времени работы в одном кадре цикл прерывался, пропускал кадр, а потом продолжал работу с того же места... в пятерке это можно сделать повесив онКлипЕвент(ентерфрейм) со следилкой на клип какой-нить... просто гетТаймером замеряем сколько прошло милисекунд, добавляем в цикл проверку времени (про фреймрейту посчитать максимально допустимое время), сохранием параметры при выходе (если нужно), и в следующем кадре вызываем сплит снова с сохраненными параметрами... в МХ проще - можно назначать функцию онЕнтерфрейм - но в остальном то же самое... ...это не так и сложно реализовать... если нужно :) |
![]() |
Часовой пояс GMT +4, время: 10:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|