Холивара тред ( переименовано с "Срочно нужна помощь " )
Нужно срочно плизз, сори что не в той теме, но реально срочно.
Народ можно ли в js на клиенте, узнать сколько байт весит строка ? |
cyber,
Ты знаешь какая кодировка? Если юникод то 2 байта * кол во символов Ну а так js не предоставляет апишку для управления памятью |
Цитата:
|
Цитата:
Я уже нагуглил ответ на твой вопрос. У тебя гугл сломался? http://stackoverflow.com/questions/2...ascript-string https://gist.github.com/mathiasbynens/1010324 Диапазоны Unicode |
Цитата:
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.
Ну вообще ответ на вопрос: да, конечно можно, т.к. строка - это простой числовой массив, т.е. занимаемая память = кол-во элементов * память одного элемента PS: ща залез в стандарт и понял, что наврал :) UTF-16, а не UTF-8 :) |
Цитата:
Цитата:
|
народ всем ОГРОМНОЕ спасибо.
Цитата:
|
есть у 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 с ним понятно, но он менее поддерживаемый.. |
Цитата:
Цитата:
alert(new Blob(['привет']).size); http://www.javascripture.com/Blob |
dmitry111, мне кажется ты просто не понимаешь, что ты хочешь.
Почитай книжечку по простому С и сразу разберёшься :) А вообще есть в JS тип Array Buffer, который представляет из себя контейнер для произвольного бинарного буфера фиксированной длины, но работать с этим нельзя, т.к. нужно иметь представление о том, что же лежит в этой области памяти. Для этого есть специальные представления, вроде: Uint8Array (массив положительных 8-ми битных целых чисел), StringBuffer (массив символов), Blob (API для представления производного бинарного файла) и т.д. т.е. некоторое "нечто" которое лежит в памяти мы представляем как уже более абстрактное представление, с которым можно работать. Зачем это всё нужно? Для написания эффективных и быстрых приложений, там где это критично, например при работе с графикой. Или же нужно открыть в браузере какой то файл, который не поддерживается из коробки браузером, например, файл Word или проиграть аудио в формате Flac - т.е. работаем напрямую с бинарным файлом и пишем "драйвер" для работы с АПИ браузера, например в FF просмоторщик PDF работает именно так. Цитата:
Пример использования 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); |
Цитата:
да не, на самом деле я знаю чего я хочу)) Мне нужно передавать данные с сервера на клиент и обратно, при этом данные должны иметь как можно меньший вес (реалтайм игра) Поэтому нужно их максимально сжать перед отправкой и разжать по прибытию) Вот думал использовать 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 ] ] ] они ужаснулись)) |
Цитата:
Цитата:
Намного же приятней и понятней писать uint вместо Uint8Array |
dmitry111, у веб сокетов, три вида отправляемых данных: string, blob, array buffer.
Т.е. ставишь binaryType = 'arraybuffer'; и работаешь :) Цитата:
Т.е. будет набор элементарных типов и можно будет создавать "свои" типы с помощью структур. |
Цитата:
|
Цитата:
Что-то я не помню такого треда в рассылке |
Цитата:
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 Цитата:
Т.е. 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 ... эх :) |
я эпический нуб, запорол задание из за того что вместо того что бы изучить либу без док. я начал пилить велосепед. Как от учится от велосепедо стоения?
|
Цитата:
|
Цитата:
я таким образом начал учить ангуляр :) тоже олимпиаду запорол |
Цитата:
|
Цитата:
Хотел сделать что то крутое в итоге "прострелил ногу с дробовика" :) |
Цитата:
Фак, все уже пересели на UI ((( |
Цитата:
http://stackoverflow.com/questions/9...g-in-angularjs |
monolithed, а что тогда юзать?
|
Цитата:
|
monolithed,
Ангуляр очень удобен, на нем можно быстренько клепать приложения, чего не скажешь о том же бэкбоне.. на высоконагруженных сервисах грязная проверка не катит, если компы еще как то, то телефоны дохнут (note 3 глючит от 10 элементов в каждом по 2 ng-repeata (примерно 5 итемов)) Вероятно это я косячу с оптимизацией, но возможно нет. Я кстати смотрю в сторону эмбера последнее время, но никак не решаюсь Дайте пинка если стоит |
Цитата:
Ангуляр нельзя вписать в существующую архитектуру, т.к. он сам диктует правила. PS: Если нужен data-binding не привязанный к сторонним решениям и архитектурам советую посмотреть в сторону Ractive |
Цитата:
Цитата:
http://javascript.ru/forum/offtopic/...angulyaru.html http://javascript.ru/forum/offtopic/...ipulation.html |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Откуда такие утверждения? Ты писал на нем? Как долго? На мой взгляд, ангуляр - очередной высокоуровневый инструмент со своими достоинствами и недостатками. Ни больше, ни меньше. Тот факт, что на нем можно "слепить быстро", как мне кажется, его не портит :) А вот чтобы правильно лепить, нужны прямые руки) |
Цитата:
исправит ли ситуацию Object.observe ? хотя опять таки - при изменении значения свойства все выражение пересчитываются. а что, если пересесть на Polymer ? внешне - один фиг, что директива, что кастомный элемент. а вот внутри - Object.observe, HTML импорты и куча интересных вещей из Web Components ... и это практически в любом браузере. А вот архитектуру эта штука не диктует - всё в руках разработчика... но без анимаций и вообще плюшек Angular. что использовать тогда, какой стек? Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Короче я сделал такой вывод:
что знать ангуляр полезно , если нужно что то быстро слепить он в этом поможет, но в сложных проектах его лучше не юзать. |
Цитата:
Используй в сложных приложениях, но если требуется отрисовывать огромные списки по 10 000+, то тут уж возникает вопрос нафига тебе столько всего на одной страничке. На ангуляре впринципе можно выпилить чтобы не лагало. Например кэшируя и убиаря элементы которые не видно и тд. |
Цитата:
|
Часовой пояс GMT +3, время: 13:06. |