• Возможно ли закешировать около 1 гб в браузере?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Возможно конечно. Для хранения больших объемов данных в браузерах существует встроенная БД IndexedDB.

    Для работы с ней сначала подключаем специальную библиотеку, которая упрощает ввод и вывод:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.js"></script>

    Далее, чтобы сохранить какие-то данные выполняем в консоли браузера:
    result = await localforage.setItem('key', save_data);
    console.log('Данные успешно сохранены:');
    console.dir(result);

    Где в save_data лежат сохраняемые данные, а key это ключ по которому можно было бы получить к ним доступ.

    Из особенностей, в save_data мы можем положить любой тип данных - хоть строку, хоть массив, хоть объект. Да даже файл при желании можно сохранить! При этом нет ограничений по объему хранимых данных, можете хоть сто мегабайт, хоть триста запихнуть - встроенное хранилище все сожрет.

    Чтобы потом извлечь сохраненные данные достаточно выполнить:
    result = await localforage.getItem('key');
    console.log('Данные успешно извлечены:');
    console.dir(result);

    Срок хранения данных - неограниченно. Или пока пользователь вручную не обнулит кеш браузера.

    P. S. Обратите внимание, что если вы где-то в своем коде внутри функции используете слово await, то такая функция обязательно должна иметь приставку async! Иначе получите ошибку. В консоли можно использовать await в лоб, но для использования await в коде нужно, чтобы функция внутри которой она вызывается была асинхронной!!!
    Ответ написан
    4 комментария
  • Расходуются ли ресурсы на try catch?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Закономерный вопрос.
    Не научившись толком отличать 0 от false, и не научившись правильно писать elseif, каждый нуб в обязательном порядке озабочивается Вселенской Проблемой Производительности.
    "Как же так" - проснувшись одним прекрасным утром думает он - "Как только мой сайт достигнет пиковой нагрузки два посетителя в час, то начнутся стрррашные проблемы с производительностью! И надо срочно, забыв все на свете и теряя на ходу тапки, кидаться их решать!!!1111"
    Дальше выбирается любой рандомный оператор и появляется ВОПРОС: "А не слишком ли медленно ли он выполняется?!"

    И что характерно, чаще всего, как и сейчас, сам по себе оператор является бессмысленным, и вопрос должен быть не "не слишком ли он медленный?", а "на кой он вообще здесь сдался?"

    Наличие операторов в коде должно быть продиктовано не пубертатными фантазиями про "потребление ресурсов", а алгоритмом. Где оператор на своем месте - там он и должен стоять.
    В данном случае никакой трай с кетчем тут сто лет в обед не сдался, поэтому просто убрать его совсем. И всё сразу начнет летать, конечно же.

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

    Идет мент. Смотрит - фонарь стоит, под фонарем лужа, в луже мужик сидит.
    - Чё здесь делаешь?
    - Да вот, часы потерял. теперь ищу.
    Ну, мент думает - дай помогу. Искал-искал, весь перемазался - нету часов.
    - Слушай, мужик. Нету тут никаких часов!
    - Да я знаю. Я их вон там, возле забора потерял.
    - А ЧЕ ТЫ ИХ ЗДЕСЬ ИЩЕШЬ???
    - А тут светлее!


    То есть вопрос тут такой же - ставить трай кетч не там где нужно по логике, а тем где "быстрее"!
    Ответ написан
  • Как генерировать PDF в JS?

    catdesign
    @catdesign
    Веб-разработчик
    Тебе генерация массовая нужна?
    То есть сгенерировать зачем-то, я даже не могу представить зачем, сотню pdf. Или элементарно, что бы какой-нибудь менеджер нажал кнопочку скачать и ему прилетел PDF файл, например со статистикой?
    Ответ написан
    3 комментария
  • ВЕБ студия с сотрудниками фрилансерами?

    catdesign
    @catdesign
    Веб-разработчик
    1. Фрилансер - это черная дыра. Нет никаких гарантий, что вы с первого раза найдете хорошего специалиста. Вы потратите массу времени походив по рукам как портовая путана, потеряете массу времени и сил. В итоге скорее всего специалиста вы найдете, но какой ценой?

    2. Нет слово бесплатно. Бесплатно будут работать только молодые специалисты, которых вы воспитаете. И то не долго, постепенно их интерес и отеческие симпатии пропадают, люди имеют свойство развиваться.

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

    Вывод: Строить свою веб-студию можно только из своих коллег по цеху с которыми вы уже работали. Для этого желательно самому побыть фрилансером или же поработать в студии. Однако помимо кадровой работы у вас должна быть тонна знаний из разряда всего понемногу. Иначе вы останетесь без денег с лапшой на ушах
    Ответ написан
    1 комментарий
  • ВЕБ студия с сотрудниками фрилансерами?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Сферического фрилансера в вакууме намного тяжелее контролировать и практически невозможно привлечь к ответственности. Особенно тех, которые работают "фактически за бесплатно". При этом ваша web-студия, как юрлицо, имеет с заказчиком договор и несёт все риски. Проще говоря, пока вас будут банкротить, ваши фрилансеры будут почти бесплатно вести к тому же ещё пару-тройку таких же ловкачей.
    Ответ написан
    1 комментарий
  • Как правильно составить сложный запрос к db?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    GROUP BY, COUNT(), ORDER BY, LIMIT
    Ответ написан
    4 комментария
  • Как исправить (не выводит и не передаёт по сокету данные)?

    @Vitsliputsli
    Если вы ожидаете увидеть "OK" в переменной $read, то его там уже нет, он будет перезаписан пустой строкой (если больше нет данных, то возвращается пустая строка). Тем не менее, данные вы сохраняете в $fde, и соответственно там и надо искать "ОК".
    Ответ написан
    1 комментарий
  • Что означает ошибка Largest Contentful Paint?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    У Google есть инициатива под названием Web Vitals. Они там решили унифицировать разные метрики для сайтов, выделить что-то основное и человеко-понятное (названия, конечно, не очень интуитивные выбрали). Там сейчас есть три основных метрики:

    • LCP - Largest contentful paint. Грубо говоря это время загрузки первого экрана контента (не начала, а именно полной загрузки первого экрана, с картинками).
    • FID - First input delay. Время полной загрузки страницы, по идее со всеми скриптами, после чего можно полноценно взаимодействовать с ней.
    • CLS - Cumulative layout shift. Общая производительность, насколько быстро перерисовывается страница при изменении layout. Это не 1/FPS, но один из факторов, определяющих отзывчивость страницы, насколько она фризит или не фризит.

    Если кликнуть на синюю ленточку рядом с соответствующим пунктом, то откроется страница с более подробной информацией о том, что это такое и на что там стоит обращать внимание.
    Ответ написан
    Комментировать
  • Личный кабинет для пользователей, админка?

    Sanes
    @Sanes
    Что первое, что второе придется учить. Laravel проще и актуальней.
    Ответ написан
    Комментировать
  • Почему не работает взятие атрибута в JQuery?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    <div  modalid="1">
        <img src="https://habrastorage.org/webt/py/5i/3b/py5i3bttspsri_tolayrfgqdd_4.jpeg">
    </div>

    $('div').on('click', function openModal(){
        console.log($(this).attr('modalid'));
    })
    Ответ написан
    3 комментария
  • Как сделать подчеркивание ссылки на полную длину?

    Aetae
    @Aetae
    Тлен
    Элемент сделать блочным, отступ padding'ом, подчёркивание border'ом.
    Ответ написан
    3 комментария
  • Класс для работы с PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну конкретно этот кривоват, и не реализует все возможности PDO.
    Навскидку:
    - exit('Error connecting to database: ' . $e->getMessage()); - это позор
    - self::$sth - бессмыслица
    - function getAll - делает обрезание оригинальному методу ПДО, который умеет возвращать данные в десятках различных форматов
    - function getValue - стыд, автор не знает что в ПДО есть готовая функция для этого.

    Если говорить о таких вот одностраничниках, то я бы рекомендовал попытаться напистаь своё.
    Но судя по всему, это для тебя задача неподъемная.
    В таком случае, на твоем месте я сначала поучился работать с ванильным PDO. Это реально важно. Это надо обязательно сделать перед тем как начинать использовать всякие обертки. чтобы понимать хотя бы примерно что они там внутри себя делают. А после этого все-таки писал бы свой класс.

    В крайнем случае, ограничился бы функцией-хелпером:

    function pdo($pdo, $sql, $args = NULL)
    {
        $stmt = $pdo->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }


    Ключевое слово здесь - return $stmt;. Оно позволяет работать с результатом запроса.

    // узнать количество строк
    $count = pdo($pdo, "SELECT count(*) FROM users WHERE role=?",[$role])->fetchColumn();
    
    // получить юзера по адресу
    $user = pdo($pdo, "SELECT * FROM users WHERE email=?", [$email])->fetch();
    
    // тупо запросить массив строк
    $data = pdo($pdo, "SELECT * FROM users WHERE salary > ?", [$salary])->fetchAll();
    
    // получить количество удаленных строк 
    $deleted = pdo($pdo, "DELETE FROM users WHERE id=?", [$id])->rowCount();
    
    // вставка
    pdo($pdo, "INSERT INTO users VALUES (null, ?,?,?)", [$name, $email, $password]);
    
    // получить массив строк в виде ключ-значение
    $indexed = pdo($pdo, "SELECT id, name FROM users")->fetchAll(PDO::FETCH_KEY_PAIR);


    Если же хочется чтобы прям как у больших пацанов, но не такое зубодробительно сложное, то https://github.com/auraphp/Aura.Sql
    Ответ написан
    Комментировать
  • Как спарсить из файла конкретную строку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    "Конструкция if является одной из наиболее важных во многих языках программирования, в том числе и PHP."
    Ответ написан
    2 комментария
  • При переносе скрипта из .html файла в .js он перестает работать. Почему?

    @alexalexes
    DOM еще не доступен, когда скрипт пытается работать с его элементами.
    Два пути решения:
    а) Перенести подключение js файла после тега body.
    б) Изменить работу скрипта так, чтобы работа с DOM началась после загрузки DOM-дерева.
    Ответ написан
    1 комментарий
  • Зависает код на PHP, цикл перестаёт отрабатывать?

    Adamos
    @Adamos
    SimpleXML не годится для больших файлов. Для них лучше использовать XMLReader, который не строит в памяти все дерево, а читает узлы по одному. Вычитываете из файла категории и продукты, потом уже сопоставляете одно другому на чистом Пыхе.
    Ответ написан
    Комментировать
  • Какой подход программирования на PHP выбрать в 2020 году?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Простейшее веб приложение уже не отразит суть всех тенденций. Или его сложно будет назвать простейшим) Правильно советуют phptherightway, из этого обязательно стоит отметить:
    - стандарты psr
    - сборка проекта через composer, знание самых популярных пакетов и где их искать
    - знакомство с IoC (Di) контейнером
    - знание хотя бы одной популярной ORM
    - уверенная работа в IDE (погуглить основные лайфхаки пхпшторма)

    Обычно пара официальных вводных курсов по фреймворкам знакомит со всеми этими вещами. Yii2 давно отстает от тенденций
    Ответ написан
    Комментировать
  • Как принять данные на PHP при отправке формы с помощью fetch?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Как минимум, вы не отправляете значение обязательного поля page, потому что у него type=hidden, а у вас в селекторе type=text.
    Ну и заголовок Content-Type уберите.
    Ответ написан
    2 комментария
  • Можно ли средствами css воздействовать на элементы без тегов?

    @Steppp
    Ответ написан
    Комментировать
  • Что делать если PHP скрипт не запускается из HTML файла?

    Kiriniy
    @Kiriniy
    Графический и веб-дизайнер
    Лучше использовать php в файлах с расширением php, но если, зачем-то, он нужен в файлах html, то надо удостовериться в верных настройках сервера и морально подготовить Apache к возможности встретить php там, где он его не ждёт. Откройте или создайте конфиг .htaccess в корне своего проекта и добавьте туда инструкцию:

    AddType application/x-httpd-php .html
    Ответ написан
    Комментировать
  • Как лучше осуществлять хранение даты последней активности пользователя?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На наш взгляд, оптимальнее всего не забивать себе голову детскими фантазиями и высосанными из пальца проблемами.
    У тебя нет сайта, нет пользователей, нет одновременной активности, нет проблем с производительностью.
    Но зато уже есть ПРОБЛЕМА. Которую надо срочно решать.

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

    Не говоря уже о том что в реальности у тебя на сайте будет полтора инвалида, и единственной проблемой будет куда бы спихнуть это никому не нужное творение.
    Ответ написан
    3 комментария