• Вопрос по подключению системы кэширования?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Почитайте, optimization.guide и вот вам немного теории:

    Кешировать можно:
    • целиком всю страницу (для каждой страницы своя запись в кеше)
    • отдельные части сайта


    Кешировать можно в файлах:
    • генераруя готового html
    • генерируя html+php, так работают smarty и прочие шаблонизаторы собирая множество шаблонов в один
    • в виде бинарного содержимого, сюда и готовый html и готовые значения вычислений и прочее
    • в виде сериализованного массива с чем угодно, от предыдущего пункта отличается только форматом хранения


    Кешировать можно в базе:
    • в mysql/postgresql и прочих SQL - будет храниться на диске и горячие данные в памяти
    • в mysql/postgresql и прочих SQL в in-memory таблицах - будет храниться в оперативке, но без дополнительных усилий кеш пропадёт при рестарте сервера
    • в in-memory базах данных, часто это memcache, redis и прочее - опять таки выключили сервер - данные пропали
    • в in-memory базах данных с сохранением на диск, это Tarantool, memcachedb и прочие если там заявлена такая функциональность


    Так же можно:
    • кешировать всё кроме вставок динамики
    • кешировать куски вставляя их в динамику

    Это два противоположных подхода которые при особом желании можно смешивать в рамках одного проекта.

    Обновлять кеш можно:
    • при каждом запросе проверяя что старый кеш устарел
    • предкеширование - отдельным кроном/демоном/сервисом генерировать кеш раз в N минут
    • по мере изменения данных сбрасывать кеш и следующий запрос сгенерирует новый
    • по мере изменения данных сбрасывать кеш путём генерации сразу нового и замены старого на новый


    Кеш можно хранить:
    • на том же сервере что и сайт - нет задержек в сети, но зато ресурсы теже, CPU, диск, оперативная память
    • на внешнем сервере - задержки в сети, зато ресурсы отдельно


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

    Если используете CMS/CMF - посмотрите готовые плагины для кеширования. Если у вас не sharing-хостинг с мини-сайтом - озаботтесь профилированием (xhproof) и мониторингом, это поможет понять где и что кешировать.

    Так же стоит рассмотреть кэширование байт-кода:
    • OpCache
    • APC
    • XCache

    Стоит прочитать вот эту статью:
    Сравнение скорости исполнения кода Drupal для PHP 5.3-5.6 и 7.0. «Битва оптимизаторов кода» apc vs xcache vs opcache https://habrahabr.ru/post/264775/

    Так же стоит:
    • увеличить буферы в MySQL (если памяти много)
    • потюнить другие системы, например поставить nginx вместо apache, раздавать статику с другого хоста
    • и конечно же - посмотреть как долго работают SQL запросы и по возможности их облегчить


    Кеширование в MySQL с использованием HandlerSocket:
    • данные хранятся в MySQL innodb базе, а значит чтение и запись можно делать как по старинке через SQL так и через HandlerSocket
    • можно сделать любое количество колонок, лишь бы это позволял MySQL
    • быстрая вставка
    • быстрая выборка
    • бинарный протокол передачи данных
    • есть несколько библиотек для PHP, как относительно новых так и старых
    • в Percona Server (форк MySQL) HandlerSocket.so есть в поставке по умолчанию, разве что нужно включить
    • в MySQL необходимо собрать HandlerSocket самостоятельно и включить в MySQL


    Можно почитать вот тут:
    Ответ написан
    3 комментария
  • Как правильно построить индекс для mongodb?

    onqu
    @onqu
    weasy
    При использовании в выборке sparse index на "неоднородных" документах нужно использовать hint, плюс не нужно добавлять $exists. И конечно же, не нужно забывать, что индекс с 2мя значениями (1:0 / true:false и тд) всегда малоэффективен.

    Документы неоднородны, когда отсутствуют какие-то свойства, которые есть у других документов, и по этим свойствам строится индекс.

    db.documents.createIndex( { is_processed: 1 } , { sparse: true } )


    db.documents.find({is_processed: 1}).hint({is_processed: 1}).limit(200)

    или
    db.documents.find().sort({is_processed: 1}).hint({is_processed: 1}).limit(200)
    Ответ написан
    2 комментария
  • Как добавить hdd в selectel vps?

    @Wexter
    fdisk -l
    Ответ написан
    Комментировать
  • Как послать CORS POST их Angular2 с mime-типом application/json?

    planc
    @planc
    фронтенд у тебя все правильно делает
    options сам браузер отправляет
    убей свой сервер и посмотри nc -lp 3500

    бэкенд должен заголовками ответить что все норм
    https://developer.mozilla.org/en-US/docs/Web/HTTP/...

    чтобы на бек-энд приходил application/json ?


    последний параметр не правильный у тебя

    post("http://localhost:3500/login", JSON.stringify({ email: email, password: password }), {headers: this.headers})
    Ответ написан
    1 комментарий
  • Как правильно использовать JWT?

    @reifter
    Примерная схема работы:
    1. Клиент вводи логин и пароль
    2. Сервер генерирует jwt токен
    3. Сервер сохраняет в куках или отправляет токен клиенту (зависит от вашего проекта)
    4. Если токен был отправлен клиенту, он его сохраняет в sessionStorage или localStorage или еще куда
    5. Клиент обращается к серверу:
      — если токен в куке, сервер вытаскивает из куки и проверяет валидность.
      — если токен храниться у клиента, он должен отправлять этот токен с каждым запросом на сервер

    Ведь получается некрасиво будет, если пользователь ходит по сайту и ему в какой то момент при запросе ресурса приходит отлуп, с требованием авторизации

    Можно пересоздавать токен, для этого клиенту не обязательно вводить логин и пароль заново.
    Ответ написан
    3 комментария
  • Чем может помочь xsd?

    Да, с помощью xsd можно автоматически сделать java-классы.
    Либо средствами среды, либо через онлайн сервисы (первый попавшийся: pojo.sodhanalibrary.com/pojoFromXSD.html)
    Ответ написан
    Комментировать
  • Чем может помочь xsd?

    XSD — это схема xml-документа, как схема базы данных, только для xml. Можно сказать, что это валидатор, с помощью которого можно проверять, удовлетворяет ли xml-документ требованиям.
    Ответ написан
    Комментировать
  • Как правильно отрисовать форму?

    LightAlloy
    @LightAlloy
    Ruby developer
    Лучше в routes.rb :
    resources :requests
    И контроллер RequestsController
    Ответ написан
    1 комментарий
  • Как хранить картинки на стороннем сервисе, но чтобы посмотреть можно было только с моего сайта?

    alsopub
    @alsopub
    То что вы хотите называется "защита от hotlinking".
    В поисковиках масса информации на эту тему.
    Можно добавить к поисковой фразе название используемого веб-сервера.
    Ответ написан
    1 комментарий
  • Почему при использовании Angular ссылки работают не так как я ожидал?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    при нажатии на ссыку меняется только url в браузере


    возможно потому что вы используете какой-нибудь ngRoute или uiRouter?
    Ответ написан
    5 комментариев
  • Почему при использовании Angular ссылки работают не так как я ожидал?

    inik23
    @inik23
    типа разработчик
    Данный фремвор разработан для создания SPA приложений, по умолчанию он сбрасывает поведения для ссылок по умолчанию, я к сожалению не сильно знаком с данным фремворком.
    Как вариант можно сделать так:
    <a ng-href="[[msg.User.Url]]" ng-bind="msg.User.Name" ng-click="myCustomRedirect([[msg.User.Url]])"></a>

    а в контролере
    $scope.myCustomRedirect = function(url){
        location.href = url;
    }
    Ответ написан
    2 комментария
  • Как коннектиться к websocket с другого сервера?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Попробуйте что нибудь вроде
    m := melody.New()
    m.Upgrader.CheckOrigin = func(r *http.Request) bool { return true }

    Катастрофических последствий не влечет. CheckOrigin добавляет мало безопаcности на стороне сервера потому что заголовок Origin легко подделывается. Браузер из коробки должен держать 30 ws connection с одним хостом и 200 всего.
    Ответ написан
    1 комментарий
  • Как реализовать нормальные отношения между доками в mgo golang??

    mirrr
    @mirrr
    Программист и просто хороший человек
    В агрегациях монги, начиная с 3.2 есть аналог LEFT JOIN - $lookup. В mgo агрегации реализуются через Pipe. Маленький пример на коленке, в поле news при выборке попадают все новости автора:

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"gopkg.in/mgo.v2"
    )
    
    type (
    	obj map[string]interface{}
    	arr []interface{}
    )
    
    func main() {
    	mongo, err := mgo.Dial("localhost")
    	if err != nil {
    		panic(err)
    	}
    
    	info := []obj{}
    
    	if err := mongo.DB("myDB").C("authors").Pipe(arr{
    		obj{"$match": obj{"banned": false}},
    		obj{"$lookup": obj{"from": "news", "localField": "_id", "foreignField": "authorID", "as": "news"}},
    	}).All(&info); err != nil {
    		fmt.Println("Error:", err)
    	}
    
    	printJSON(info)
    }
    
    func printJSON(t interface{}) {
    	j, _ := json.MarshalIndent(t, "", "\t")
    	fmt.Println(string(j))
    }
    Ответ написан
    Комментировать
  • Как заполнить select значениями и указать выбранное?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Можно грузить один раз.

    В контроллере
    cities: function() {
        //Получаем список городов которые есть в памяти
        var cities = this.store.all('city');
    
        //Если города еще не загружались, берем их с сервера.
        if (!cities.length) {
            cities = this.store.find('city');
        }
    
        return cities;
    }.property()

    В шаблоне
    {{view "select"
           content=cities
           optionValuePath="content.id"
           optionLabelPath="content.name"
           value=session.user.cityId}}


    Соответственно у вас должна быть модель City.
    Ответ написан
    4 комментария
  • Верстка в Linux?

    Увидел вопрос в рассылке среди интересных, и хоть и с запозданием - отвечу.
    Верстаю не много. Больше занимаюсь бэкендом, но верстаю и делаю это под Linux. Не понимаю зачем нужен PS. Макеты должны быть в png. Элементы верстки, которые вам необходимы должны быть в png. Фото для оформления в jpg.
    Единственная серьёзная проблема это IE и проверка верстки в нем. Но я просто игнорирую его и говорю, что если верстку делаю я, то она только для web-браузеров.
    Ответ написан
    6 комментариев
  • Как задать последовательность загрузки скриптов?

    @M-ka
    frontend присматривающийся к ror
    Написать собственный модуль для подтягивания скриптов, который после успешного подтягивания выполнит колбек функцию... хотя должно выйти, у меня так подключался где то в средине при определенных условиях жквери и еще несколько дополнений к нему и запускал уже нужные изменения.
    Не выйдет, курить читая про АМД, в частности про реквайр и тп... Реквайр отлично управляется подключением модулей, сжимает за надобности и тп... Так же судя с гугла, есть связки sails с реквайром...
    Ответ написан
    3 комментария
  • Как задать последовательность загрузки скриптов?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Sails использует Grunt для сборки приложения. Насколько я понял из описания sailsjs.org/#!/documentation/concepts/Assets/TaskA...
    он не собирает все файлы в кучку. По идее должен быть какой-нибудь плагин к Grunt, который будет собирать все файлики в кучку (concat), а потом делать минификацию. Если объединить это с системой слежения за измениями файлов (file watchers), то получится полноценный конвейер (tasks/pipeline.js) для сборки клиентской части веб приложения.
    В итоге, вам потребуется просто определить порядок файлов в jsFilesToInject.
    Ответ написан
    Комментировать
  • Как передать на клиент статические ресурсы?

    Staltec
    @Staltec
    Node.js разработчик
    1. Ваше решение по отдаче статического контента - потенциальная дырка в безопасности. Такой подход позволяет читать файлы за пределами document root если указать путь с переходом к вышестоящему каталогу ('../').

    2. Используйте serve-static (https://github.com/expressjs/serve-static) как вариант или Express 4.

    3. А вообще, статику надо отдавать тем, что с этим наиболее хорошо справляется. Используйте для этого Nginx.
    Ответ написан
    3 комментария
  • Как передать на клиент массив строк?

    Staltec
    @Staltec
    Node.js разработчик
    ...
          response.json(cities);
    ...


    Метод json() автоматически установит Сontent-type в 'application/json'. А HTTP статус по умолчанию всегда 200. Его можно явно не указывать.
    Ответ написан
    4 комментария