Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограничение на размер массива JavaScript, Проблема с большими массивами 
:(
    Опции темы
Sn9p
Дата 12.1.2006, 14:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите, кто может smile

Суть:
есть Mozilla Firefox 1.5
в скрипте создается 2 массива размером по 1800 - 2000 записей. После этого скрипт просто наглым образом не выполняется. В JavaScript консоль не генерится никакой ошибки или (непонятно, когода как) Error: unimplemented JavaScript bytecode 199.

Если ограничить массивы до 1000 записей - все нормально работает.
Пробывал разбивать на несколько массивов по 100 записей - нифига!

В IE все отлично пашет.

Зарание спасибо.
  Вверх
Cheba
Дата 12.1.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



А где вопрос? Где код?
PM MAIL ICQ   Вверх
sn9p
Дата 12.1.2006, 15:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Cheba @ 12.1.2006, 15:06)
А где вопрос? Где код?

грубо на форме есть поле ввода (id=el_subscr) и кнопка "Отправить".
Вот функция, которая срабатывает при нажатии на кнопу "Отправить". Она должна определить по маскам из массива к какому оператору относится номер в поле ввода, и только если к ккакому-нить относится - передать номер и id оператора...
  Вверх
sn9p
Дата 12.1.2006, 15:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











(само отправиось smile)


кароче вот:
Код

function SendMedia(){

var mask_operators = new Array();
var name_operators = new Array();

name_operators['0'] = '1'; mask_operators['0'] = '790221([0-9]){5}'; name_operators['1'] = '1'; mask_operators['1'] = '790223([0-9]){5}'; name_operators['2'] = '1'; mask_operators['2'] = '790524([0-9]){5}'; name_operators['3'] = '1'; mask_operators['3'] = '7909775([0-9]){4}'; name_operators['4'] = '1'; mask_operators['4'] = '79097[89]([0-9]){5}';

...................... и так много-много (гинерится php из бд)........................

name_operators['1738'] = '10'; mask_operators['1738'] = '790223([0-9]){5}'; name_operators['1739'] = '10'; mask_operators['1739'] = '790524([0-9]){5}'; name_operators['1740'] = '10'; mask_operators['1740'] = '7909775([0-9]){4}'; name_operators['1741'] = '10'; mask_operators['1741'] = '79097[89]([0-9]){5}';


                              subscriber_number = el_subscr.value.replace(/\D/gi, '');
                               if(subscriber_number.search(/7\d{10}/i)==-1)
                               {
                                   alert('Ошибка: не правильный формат номера абонента.');
                                   return;
                               }

                               var right_operator = false;
                               for(key in mask_operators)
                               {
                                   if(subscriber_number.search(mask_operators[key])!=-1)
                                   {
                                        el_operator.value = name_operators[key];
                                        right_operator = true;
                                        break;
                                   }
                               }

                               if(!right_operator)
                               {
                                   alert('Ошибка: номер абонента не соответствует ни одному оператору.');
                                   return;
                               }


............еще пару проверок............


document.edit_message.submit();


вот!
  Вверх
Cheba
Дата 12.1.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



Ты что, так валидуешь форму? Я бы посоветовал тебе использовать AJAX. И меньше трафика расходовать будешь, и меньше броузер грузить, и базу меньше дергать.
PM MAIL ICQ   Вверх
sn9p
Дата 12.1.2006, 18:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Cheba @ 12.1.2006, 17:47)
Ты что, так валидуешь форму? Я бы посоветовал тебе использовать AJAX. И меньше трафика расходовать будешь, и меньше броузер грузить, и базу меньше дергать.

Согласин, громозко получается... но по другому не могу придумать.
можно поподробнее, что такое AJAX (или ссылочку).
Спасибо.
  Вверх
Cheba
Дата 12.1.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



Сначала по теме. небольшой тестик на размер массивов. Здесь составляются два массиво по 100000 (сто тысяч) элементов. Все это работает очень быстренько в Лисе 1.5 (по крайней мере на Линуксе). Больше массивы создавать не рекомендую во избежание непредвиденного.

Код
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">
 <head>
  <title>JS Aray test</title>
<script language="JavaScript" type="text/javascript">
<!--
var a = new Array();
var aSize = 100000;

for (var i = 0; i < aSize; i++)
    a[i] = Math.random();
    
var b = new Array();
var bSize = 100000;

for (var i = 0; i < bSize; i++)
    b[i] = Math.random();
    
function getNum()
{
    document.body.innerHTML = 
        'Lengths: <br />' +
        ' a: ' + a.length +
        '<br /> b: ' + b.length + '<br />' +
        a[Math.round(Math.random() * aSize)] + ' - ' +
        b[Math.round(Math.random() * bSize)];
}
//->
</script>
  
 </head>
 <body onclick="getNum()">
 sadfkljhasfkj 
 </body>
</html>


А теперь ссылки про AJAX: ссылка №1 (поиск по форуму), ссылка № 2 (поиск по Гуглю), ссылка № 3 (AJAX на DevMO).
Учимся, товарищи, самостоятельно находить информацию.
PM MAIL ICQ   Вверх
sn9p
Дата 12.1.2006, 19:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Действительно тест работает.... мда.
Буду разбираться.

Cheba, спасибо за помощь и сыылки.
  Вверх
sn9p
Дата 13.1.2006, 12:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Если кому интересно:
объявление и заполнение массивов вынес за пределы функции (т.е. объявил глобально, что конечно и надо было сразу сделать) и всё заработало.

Тем не менее инцендент остался для меня загадкой smile т.к. тестик by Cheba работает если даже перенести создание массивов в функцию.
  Вверх
Sardar
Дата 14.1.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(sn9p @ 13.1.2006, 11:11 Найти цитируемый пост)
объявление и заполнение массивов вынес за пределы функции (т.е. объявил глобально, что конечно и надо было сразу сделать) и всё заработало.

Возможно действительно есть ограничение на локальный размер массива в функции... И оно правильно, зачем при каждом вызове функции создавать такую большую кучу мусора в памяти... smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.