Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Срочно нужна помощь (https://javascript.ru/forum/offtopic/47618-srochno-nuzhna-pomoshh.html)

cyber 31.05.2014 15:43

Холивара тред ( переименовано с "Срочно нужна помощь " )
 
Нужно срочно плизз, сори что не в той теме, но реально срочно.
Народ можно ли в js на клиенте, узнать сколько байт весит строка ?

l-liava-l 31.05.2014 15:49

cyber,
Ты знаешь какая кодировка?
Если юникод то 2 байта * кол во символов

Ну а так js не предоставляет апишку для управления памятью

cyber 31.05.2014 15:51

Цитата:

Сообщение от l-liava-l
Ты знаешь какая кодировка?

нет

nerv_ 31.05.2014 15:58

Цитата:

Сообщение от cyber
Срочно

Рассмешил :)

Я уже нагуглил ответ на твой вопрос. У тебя гугл сломался?

http://stackoverflow.com/questions/2...ascript-string
https://gist.github.com/mathiasbynens/1010324

Диапазоны Unicode

monolithed 31.05.2014 15:58

Цитата:

Сообщение от cyber
Народ можно ли в js на клиенте, узнать сколько байт весит строка ?

function string_size(text) {
  var size = text.length,
      byte = text.match(/[^\x00-\xff]/g)
  ;

  if (byte)
     size += byte.length;
  
  return size; 
}

alert(string_size('привет'));

kobezzza 31.05.2014 15:59

Примитивы строк в JS всегда используют UTF-8.

Ну вообще ответ на вопрос: да, конечно можно, т.к. строка - это простой числовой массив, т.е. занимаемая память = кол-во элементов * память одного элемента

PS: ща залез в стандарт и понял, что наврал :) UTF-16, а не UTF-8 :)

l-liava-l 31.05.2014 16:00

Цитата:

Сообщение от monolithed (Сообщение 314153)
function string_size(text) {
  var size = text.length,
      byte = text.match(/[^\x00-\xff]/g)
  ;

  if (byte)
     size += byte.length;
  
  return size; 
}

alert(string_size('привет'));

Нефигасе я тупой... если спросят где нахожусь, то я обижаюсь

Цитата:

Примитивы строк в JS всегда используют UTF-8
Прикольно

cyber 31.05.2014 16:06

народ всем ОГРОМНОЕ спасибо.
Цитата:

Сообщение от nerv_
Рассмешил

У меня тут типа чемпионата по прогаммирваоние, и у меня не получилось на гуглить))

dmitry111 31.05.2014 16:44

есть у js API Typed Arrays

если не ошибаюсь, с помощью него можно взвесить любые данные предварительно перегнав в бинарные данные

Кто-нибудь работал с этим API?


Объясните, как это все работает? А именно, зачем столько видов буфера:

Int8Array 	1 	8-bit twos complement signed integer 	signed char
Uint8Array 	1 	8-bit unsigned integer 	unsigned char
Uint8ClampedArray 	1 	8-bit unsigned integer 	unsigned char
Int16Array 	2 	16-bit twos complement signed integer 	short
Uint16Array 	2 	16-bit unsigned integer 	unsigned short
Int32Array 	4 	32-bit twos complement signed integer 	int
Uint32Array 	4 	32-bit unsigned integer 	unsigned int
Float32Array 	4 	32-bit IEEE floating point number 	float
Float64Array 	8 	64-bit IEEE floating point number 	double


и какой из них выбрать?


Есть еще BLOB с ним понятно, но он менее поддерживаемый..

nerv_ 31.05.2014 17:10

Цитата:

Сообщение от dmitry111
А именно, зачем столько видов буфера

Чтобы хранить данные различных типов.

Цитата:

Сообщение от dmitry111
Есть еще BLOB

кстати, да
alert(new Blob(['привет']).size);


http://www.javascripture.com/Blob

kobezzza 31.05.2014 17:15

dmitry111, мне кажется ты просто не понимаешь, что ты хочешь.
Почитай книжечку по простому С и сразу разберёшься :)

А вообще есть в JS тип Array Buffer, который представляет из себя контейнер для произвольного бинарного буфера фиксированной длины, но работать с этим нельзя, т.к. нужно иметь представление о том, что же лежит в этой области памяти.

Для этого есть специальные представления, вроде: Uint8Array (массив положительных 8-ми битных целых чисел), StringBuffer (массив символов), Blob (API для представления производного бинарного файла) и т.д. т.е. некоторое "нечто" которое лежит в памяти мы представляем как уже более абстрактное представление, с которым можно работать.

Зачем это всё нужно? Для написания эффективных и быстрых приложений, там где это критично, например при работе с графикой. Или же нужно открыть в браузере какой то файл, который не поддерживается из коробки браузером, например, файл Word или проиграть аудио в формате Flac - т.е. работаем напрямую с бинарным файлом и пишем "драйвер" для работы с АПИ браузера, например в FF просмоторщик PDF работает именно так.

Цитата:

Есть еще BLOB
Там ещё много чего есть, правд не всё реализовано. Например на подходе "структуры", знакомые тем кто пишет на С/С++ и разумеется можно будет создавать массив структур.

Пример использования Blob:

var code = new Blob(["alert('hello world');"], {
    type: 'application/javascript'
});

var script = document.createElement('script');
script.src = URL.createObjectURL(code);

document.head.appendChild(script);

dmitry111 31.05.2014 17:49

Цитата:

Сообщение от kobezzza
dmitry111, мне кажется ты просто не понимаешь, что ты хочешь.
Почитай книжечку по простому С и сразу разберёшься


да не, на самом деле я знаю чего я хочу))
Мне нужно передавать данные с сервера на клиент и обратно, при этом данные должны иметь как можно меньший вес (реалтайм игра)

Поэтому нужно их максимально сжать перед отправкой и разжать по прибытию)

Вот думал использовать Typed Array с вебсокетами.

Ну а книжку по Си изучать это конечно нужно, но ради двух функций неохота)


Я когда на gamedev.ru показал приблизительный объем данных приходящий на клиент на один тик:

[
  // game
  [
    [
      [1, 2],
      {
        '1': [64, 320, 0, 0, 1, 'bob'],
        '3': [736, 320, 180, 0, 2, 'jek'],
        '5': null
      },
      true
    ],
    [
      [3],
      {
        '1': [
          [190, 72],
          [10, 4],
          [100, 24]
          [332, 94],
          [390, 72],
          [159, 334]
        ],
        '3': [
          [100, 320],
          [120, 320],
          [130, 320],
          [140, 320],
          [339, 44],
          [300, 994]
        ]
      },
      false
    ]
  ],

  // coords [x, y]
  [400, 320],

  // panel
  [97, 777, 3],

  // stat [tBodies, tHead]
  [
    [
      [6, 0, ['bot 6', '', 5, 1], 0],
      [1, 0, ['bot 1', 'dead', 2, 3], 0],
      [4, 0, ['bot 4', '', 0, 4], 0],
      [3, 1, ['bot 3', 'dead', 2, 0], 0],
      [8, 1, ['bot 8', '', 1, 10], 0],
      [23, 1, ['bot 23', '', 1, 8], 0],
      [12, 1, ['bot 12', 'dead', 1, 7], 0],
      [33, 1, null, 0],
      [17, 2, ['bot 17'], 0],
      [64, 2, ['bot 64'], 0],
      [19, 2, null, 0]
    ],
    [
      [0, [3, '', 20, '']],
      [1, [4, '', 30, '']]
    ]
  ],

  // chat [name, text]
  ['User', 'Hello World!'],

  // vote [vote, data]
  [
    'ban',
    [
      'Забанить пользователя User?',  // 0: title
      ['Да', 'Нет'],                  // 1: values
      null                            // 2: next
    ]
  ]
]


они ужаснулись))

monolithed 31.05.2014 17:53

Цитата:

Сообщение от kobezzza
Например на подходе "структуры", знакомые тем кто пишет на С/С++

Если ты о struct, то в С++ это тот же class, с минимальными отличиями :)

Цитата:

Сообщение от kobezzza
Почитай книжечку по простому С и сразу разберёшься

Разобраться можно, вот только вместо того того чтобы ввести полноценные типы, придумали Java-подобный костыль.

Намного же приятней и понятней писать uint вместо Uint8Array

kobezzza 31.05.2014 17:55

dmitry111, у веб сокетов, три вида отправляемых данных: string, blob, array buffer.

Т.е. ставишь binaryType = 'arraybuffer'; и работаешь :)

Цитата:

Разобраться можно, вот только вместо того того чтобы ввести полноценные типы, придумали Java-подобный костыль.

Намного же приятней и понятней писать
uint вместо Uint8Array
Это обсуждается, хотят дать для asm.js нормальный синтаксис, чтобы можно было на нём писать, а не только использовать для трансляции из LLVM.

Т.е. будет набор элементарных типов и можно будет создавать "свои" типы с помощью структур.

monolithed 31.05.2014 17:58

Цитата:

Сообщение от kobezzza
у веб сокетов, три вида отправляемых данных: string, blob, array buffer

Зоопарк :)

monolithed 31.05.2014 18:02

Цитата:

Сообщение от kobezzza
Т.е. будет набор элементарных типов и можно будет создавать "свои" типы с помощью структур.

Хотят придумать TypeScript?
Что-то я не помню такого треда в рассылке

kobezzza 31.05.2014 18:04

Цитата:

Сообщение от monolithed (Сообщение 314175)
Хотят придумать TypeScript?
Что-то я не помню такого треда в рассылке

http://wiki.ecmascript.org/doku.php?...:typed_objects

const Point2D = new StructType({ x: uint32, y: uint32 });
const Color = new StructType({ r: uint8, g: uint8, b: uint8 });
const Pixel = new StructType({ point: Point2D, color: Color });
 
const Triangle = Pixel.Array(3);
 
let t = Triangle([{ point: { x:  0, y: 0 }, color: { r: 255, g: 255, b: 255 } },
                  { point: { x:  5, y: 5 }, color: { r: 128, g: 0,   b: 0   } },
                  { point: { x: 10, y: 0 }, color: { r: 0,   g: 0,   b: 128 } }]);


Built-in Value Types
uint8, uint8Clamped : 8-bit unsigned integers
uint16 : 16-bit unsigned integers
uint32 : 32-bit unsigned integers
int8 : 8-bit signed integers
int16 : 16-bit signed integers
int32 : 32-bit signed integers
float32 : 32-bit IEEE754 floating-point numbers
float64 : 64-bit IEEE754 floating-point numbers

Цитата:

Сообщение от monolithed (Сообщение 314175)
Хотят придумать TypeScript?

Я бы был рад, если бы добавили опциональную явную декларацию типа, для замены JSDoc.

Т.е.

http://wiki.ecmascript.org/doku.php?id=strawman:guards

let x :: Number = 37;
function f(p :: String, q :: MyType) :: Boolean { ... }
let o = {a :: Number : 42, b: "b"};


И было бы здорово иметь какой нить аналог указателей, чтобы можно было делать так:

function foo(*a) {
  &a = 2;
}

var a = 3;
foo(*a);

a // 2


А ещё реализацию легковесных потоков как в Rust ... эх :)

cyber 31.05.2014 19:39

я эпический нуб, запорол задание из за того что вместо того что бы изучить либу без док. я начал пилить велосепед. Как от учится от велосепедо стоения?

l-liava-l 31.05.2014 20:47

Цитата:

я эпический нуб, запорол задание из за того что вместо того что бы изучить либу без док. я начал пилить велосепед. Как от учится от велосепедо стоения?
Писать коммерческий продукт в команде

melky 31.05.2014 21:16

Цитата:

Сообщение от cyber
я эпический нуб, запорол задание из за того что вместо того что бы изучить либу без док. я начал пилить велосепед. Как от учится от велосепедо стоения?

поздравляю

я таким образом начал учить ангуляр :) тоже олимпиаду запорол

monolithed 31.05.2014 21:52

Цитата:

Сообщение от melky
я таким образом начал учить ангуляр

Потом поймешь что зря :)

cyber 31.05.2014 21:56

Цитата:

Сообщение от melky
я таким образом начал учить ангуляр тоже олимпиаду запорол

Да пофиг за то весело было по кататься)
Хотел сделать что то крутое в итоге "прострелил ногу с дробовика" :)

l-liava-l 31.05.2014 22:11

Цитата:

Потом поймешь что зря
Что ты имел ввиду? Использовать ангуляр в проектах не кошерно?
Фак, все уже пересели на UI (((

monolithed 31.05.2014 22:22

Цитата:

Сообщение от l-liava-l
Что ты имел ввиду? Использовать ангуляр в проектах не кошерно?

http://tech.small-improvements.com/2...h-large-lists/
http://stackoverflow.com/questions/9...g-in-angularjs

cyber 31.05.2014 22:26

monolithed, а что тогда юзать?

monolithed 31.05.2014 22:48

Цитата:

Сообщение от cyber
monolithed, а что тогда юзать?

мозг

l-liava-l 31.05.2014 22:54

monolithed,
Ангуляр очень удобен, на нем можно быстренько клепать приложения, чего не скажешь о том же бэкбоне.. на высоконагруженных сервисах грязная проверка не катит, если компы еще как то, то телефоны дохнут (note 3 глючит от 10 элементов в каждом по 2 ng-repeata (примерно 5 итемов)) Вероятно это я косячу с оптимизацией, но возможно нет.

Я кстати смотрю в сторону эмбера последнее время, но никак не решаюсь
Дайте пинка если стоит

monolithed 31.05.2014 23:12

Цитата:

Сообщение от l-liava-l
Вероятно это я косячу с оптимизацией, но возможно нет.

Чтобы писать на ангуляре нужно понимать как он работает изнутри, а когда придет понимание — ограничить себя в использовании той или иной функциональности.
Ангуляр нельзя вписать в существующую архитектуру, т.к. он сам диктует правила.

PS: Если нужен data-binding не привязанный к сторонним решениям и архитектурам советую посмотреть в сторону Ractive

nerv_ 31.05.2014 23:24

Цитата:

Сообщение от monolithed
мозг

самый сложный инструмент)

Цитата:

Сообщение от monolithed
Чтобы писать на ангуляре нужно понимать как он работает изнутри, а когда придет понимание — ограничить себя в использовании той или иной функциональности.
Ангуляр нельзя вписать в существующую архитектуру, т.к. он сам диктует правила.

PS: Если нужен data-binding не привязанный к сторонним решениям и архитектурам советую посмотреть в сторону Ractive

об этом, кстати, уже говорили
http://javascript.ru/forum/offtopic/...angulyaru.html
http://javascript.ru/forum/offtopic/...ipulation.html

Aetae 01.06.2014 00:11

Цитата:

Сообщение от l-liava-l (Сообщение 314202)
monolithed,
Ангуляр очень удобен, на нем можно быстренько клепать приложения

Собсно только для того он и годиться. Методология "хуяк-хуяк и в продакшн" - это именно про него. Если же делать что-то серьёзное, то ничего кроме надуманной сложности, неудобства и тормознутости он дать не сможет.

l-liava-l 01.06.2014 00:48

Цитата:

Собсно только для того он и годиться. Методология "хуяк-хуяк и в продакшн" - это именно про него. Если же делать что-то серьёзное, то ничего кроме надуманной сложности, неудобства и тормознутости он дать не сможет.
Что ты предлагаешь использовать в более серьезных приложениях где нужен 3хуяк, 4хуяк ... Nхуяк?

Aetae 01.06.2014 01:19

Цитата:

Сообщение от l-liava-l (Сообщение 314220)
Что ты предлагаешь использовать в более серьезных приложениях где нужен 3хуяк, 4хуяк ... Nхуяк?

В том то и дело что сложность каждого последующего "хуяка" будет расти экспоненциально.) Потому при большом объеме по старинке: продумывать архитектуру, подбирать инструменты максимально точно под конкретную задачу итд.

nerv_ 01.06.2014 02:25

Цитата:

Сообщение от Aetae
Собсно только для того он и годиться. Методология "хуяк-хуяк и в продакшн" - это именно про него. Если же делать что-то серьёзное, то ничего кроме надуманной сложности, неудобства и тормознутости он дать не сможет.

не согласен

Цитата:

Сообщение от Aetae
В том то и дело что сложность каждого последующего "хуяка" будет расти экспоненциально.)

опять-таки нет

Откуда такие утверждения? Ты писал на нем? Как долго?
На мой взгляд, ангуляр - очередной высокоуровневый инструмент со своими достоинствами и недостатками. Ни больше, ни меньше.
Тот факт, что на нем можно "слепить быстро", как мне кажется, его не портит :)
А вот чтобы правильно лепить, нужны прямые руки)

melky 01.06.2014 08:58

Цитата:

Сообщение от monolithed (Сообщение 314190)
Потом поймешь что зря :)

про тормоза был предупреждён. но ведь его используюет туча людей.. и вроде как не жалуется.

исправит ли ситуацию Object.observe ? хотя опять таки - при изменении значения свойства все выражение пересчитываются.

а что, если пересесть на Polymer ?

внешне - один фиг, что директива, что кастомный элемент.

а вот внутри - Object.observe, HTML импорты и куча интересных вещей из Web Components ... и это практически в любом браузере. А вот архитектуру эта штука не диктует - всё в руках разработчика... но без анимаций и вообще плюшек Angular.

что использовать тогда, какой стек?

Цитата:

Сообщение от Aetae (Сообщение 314211)
Методология "хуяк-хуяк и в продакшн" - это именно про него.

отлично таким образом делаются сайты на jquery и плагинах к ней)

Цитата:

Сообщение от monolithed (Сообщение 314201)
мозг

... и ещё LiveSciript, вместе с prelude. спасибо, воистину классная вещь :victory:

monolithed 02.06.2014 12:15

Цитата:

Сообщение от melky
про тормоза был предупреждён. но ведь его используюет туча людей.. и вроде как не жалуется.

Пока не встречал ни один высоконагруженный проект.

Цитата:

Сообщение от melky
исправит ли ситуацию Object.observe ? хотя опять таки - при изменении значения свойства все выражение пересчитываются.

Будем надеяться :)

l-liava-l 02.06.2014 12:28

Цитата:

Пока не встречал ни один высоконагруженный проект.
Думал гугл картинки на нем, а сейчас смотрю, не похоже)

monolithed 02.06.2014 16:38

Цитата:

Сообщение от l-liava-l
Думал гугл картинки на нем, а сейчас смотрю, не похоже)

Фантазер

cyber 02.06.2014 18:01

Короче я сделал такой вывод:
что знать ангуляр полезно , если нужно что то быстро слепить он в этом поможет, но в сложных проектах его лучше не юзать.

l-liava-l 02.06.2014 19:19

Цитата:

Короче я сделал такой вывод:
что знать ангуляр полезно , если нужно что то быстро слепить он в этом поможет, но в сложных проектах его лучше не юзать.
Ангуляр позволяет делать очень отзывчивые интерфейсы при минимуме усилий.
Используй в сложных приложениях, но если требуется отрисовывать огромные списки по 10 000+, то тут уж возникает вопрос нафига тебе столько всего на одной страничке. На ангуляре впринципе можно выпилить чтобы не лагало. Например кэшируя и убиаря элементы которые не видно и тд.

cyber 02.06.2014 19:22

Цитата:

Сообщение от l-liava-l
Используй в сложных приложениях, но если требуется отрисовывать огромные списки по 10 000+,

Какой идиот будет отрисовывать список на 10к элементов целеком?


Часовой пояс GMT +3, время: 13:06.