• На сколько хорошо использовать NodeBB?

    HoHsi
    @HoHsi
    NodeBB работает на Javascript, что соответственно не делает не какой нагрузки на сервер.

    Делает. Все что работает на сервере, даже grep, делает на него нагрузку. Тут вопрос в том какую нагрузку он делает. Та же нода будет независимо от кол-во пользователей есть 50mb RAM. Но в свою очередь за счет этого будет быстрее отвечать. Это позволит обслужить большее кол-во пользователей, но за счет постоянного проживания в RAM.

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

    Аммм, ну да. Так работают все Web приложения. Они хранят почти все динамические данные в базах. И не важно, SQL это, или NoSQL.

    Если вы подразумеваете, что есть какие-то MongoDB сервера, как сервисы, то нет. Это просто база данных, как Postresql или MySQL. Вам прийдется ее так же поднимать на одной из своих машин, что автоматически значит, что вы храните все "у себя".

    Если же вы подразумеваете, что данные хранятся непосредственно в процессе NodeJS, это от части правильно, но все равно 90% данных будут лежать в базе, те же пользователи, вопросы и т.д.

    И по этому может хоть до миллионов запросов быть? Или как это работает?

    Нет. Вы все так же ограничены RAM, CPU, пропускной способностью, лимитом трафика. Все тоже самое, что и в других Web приложениях, на любых языках и платформах. Никакой магии.
    Ответ написан
    4 комментария
  • Extjs. За что платить 9000$?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    За поддержку и за кучу готовых контролов. Стоят ли эти контролы девять килобаксов? Стоит ли эта поддержка этих денег? Возможно, для кого-то стоит.
    Ответ написан
    Комментировать
  • Extjs. За что платить 9000$?

    @fman2
    Плотно работал с ExtJS и я вам скажу, что у него просто нет аналогов. Он монополист. VueJS и React не предоставляет той мощности, что ExtJS, потому что Ext используется для интерфейсов и он может ВСЕ.

    Его используют в основном Enterprise, в том числе такие монстры как Сбербанк. Ну и админка у сотмаркета была написана на нем.

    Это очень крутое решение для бизнеса. Если вам хаха хихи, под кофе быстро запилить модный интерфейс, то это к react или vue.

    Ext для других целей и для других людей, а у этих людей деньги есть.
    Ответ написан
    18 комментариев
  • Странный javascript в коде? что это?

    @zRrr
    Если загуглить javascript tidy выведется несколько сайтов, на которых ты сможешь привести этот код в стандартный вид.
    Вот твой код
    <script type="text/javascript">
        window.NREUM || (NREUM = {}), __nr_require = function(e, t, n) {
            function r(n) {
                if (!t[n]) {
                    var o = t[n] = {
                        exports: {}
                    };
                    e[n][0].call(o.exports, function(t) {
                        var o = e[n][1][t];
                        return r(o || t)
                    }, o, o.exports)
                }
                return t[n].exports
            }
            if ("function" == typeof __nr_require) return __nr_require;
            for (var o = 0; o < n.length; o++) r(n[o]);
            return r
        }({
            1: [function(e, t, n) {
                function r() {}
    
                function o(e, t, n) {
                    return function() {
                        return i(e, [(new Date).getTime()].concat(u(arguments)), t ? null : this, n), t ? void 0 : this
                    }
                }
                var i = e("handle"),
                    a = e(2),
                    u = e(3),
                    c = e("ee").get("tracer"),
                    f = NREUM;
                "undefined" == typeof window.newrelic && (newrelic = f);
                var s = ["setPageViewName", "setCustomAttribute", "setErrorHandler", "finished", "addToTrace", "inlineHit"],
                    l = "api-",
                    p = l + "ixn-";
                a(s, function(e, t) {
                    f[t] = o(l + t, !0, "api")
                }), f.addPageAction = o(l + "addPageAction", !0), f.setCurrentRouteName = o(l + "routeName", !0), t.exports = newrelic, f.interaction = function() {
                    return (new r).get()
                };
                var d = r.prototype = {
                    createTracer: function(e, t) {
                        var n = {},
                            r = this,
                            o = "function" == typeof t;
                        return i(p + "tracer", [Date.now(), e, n], r),
                            function() {
                                if (c.emit((o ? "" : "no-") + "fn-start", [Date.now(), r, o], n), o) try {
                                    return t.apply(this, arguments)
                                } finally {
                                    c.emit("fn-end", [Date.now()], n)
                                }
                            }
                    }
                };
                a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","), function(e, t) {
                    d[t] = o(p + t)
                }), newrelic.noticeError = function(e) {
                    "string" == typeof e && (e = new Error(e)), i("err", [e, (new Date).getTime()])
                }
            }, {}],
            2: [function(e, t, n) {
                function r(e, t) {
                    var n = [],
                        r = "",
                        i = 0;
                    for (r in e) o.call(e, r) && (n[i] = t(r, e[r]), i += 1);
                    return n
                }
                var o = Object.prototype.hasOwnProperty;
                t.exports = r
            }, {}],
            3: [function(e, t, n) {
                function r(e, t, n) {
                    t || (t = 0), "undefined" == typeof n && (n = e ? e.length : 0);
                    for (var r = -1, o = n - t || 0, i = Array(o < 0 ? 0 : o); ++r < o;) i[r] = e[t + r];
                    return i
                }
                t.exports = r
            }, {}],
            ee: [function(e, t, n) {
                function r() {}
    
                function o(e) {
                    function t(e) {
                        return e && e instanceof r ? e : e ? c(e, u, i) : i()
                    }
    
                    function n(n, r, o) {
                        if (!p.aborted) {
                            e && e(n, r, o);
                            for (var i = t(o), a = v(n), u = a.length, c = 0; c < u; c++) a[c].apply(i, r);
                            var f = s[w[n]];
                            return f && f.push([y, n, r, i]), i
                        }
                    }
    
                    function d(e, t) {
                        b[e] = v(e).concat(t)
                    }
    
                    function v(e) {
                        return b[e] || []
                    }
    
                    function g(e) {
                        return l[e] = l[e] || o(n)
                    }
    
                    function m(e, t) {
                        f(e, function(e, n) {
                            t = t || "feature", w[n] = t, t in s || (s[t] = [])
                        })
                    }
                    var b = {},
                        w = {},
                        y = {
                            on: d,
                            emit: n,
                            get: g,
                            listeners: v,
                            context: t,
                            buffer: m,
                            abort: a,
                            aborted: !1
                        };
                    return y
                }
    
                function i() {
                    return new r
                }
    
                function a() {
                    (s.api || s.feature) && (p.aborted = !0, s = p.backlog = {})
                }
                var u = "nr@context",
                    c = e("gos"),
                    f = e(2),
                    s = {},
                    l = {},
                    p = t.exports = o();
                p.backlog = s
            }, {}],
            gos: [function(e, t, n) {
                function r(e, t, n) {
                    if (o.call(e, t)) return e[t];
                    var r = n();
                    if (Object.defineProperty && Object.keys) try {
                        return Object.defineProperty(e, t, {
                            value: r,
                            writable: !0,
                            enumerable: !1
                        }), r
                    } catch (i) {}
                    return e[t] = r, r
                }
                var o = Object.prototype.hasOwnProperty;
                t.exports = r
            }, {}],
            handle: [function(e, t, n) {
                function r(e, t, n, r) {
                    o.buffer([e], r), o.emit(e, t, n)
                }
                var o = e("ee").get("handle");
                t.exports = r, r.ee = o
            }, {}],
            id: [function(e, t, n) {
                function r(e) {
                    var t = typeof e;
                    return !e || "object" !== t && "function" !== t ? -1 : e === window ? 0 : a(e, i, function() {
                        return o++
                    })
                }
                var o = 1,
                    i = "nr@id",
                    a = e("gos");
                t.exports = r
            }, {}],
            loader: [function(e, t, n) {
                function r() {
                    if (!h++) {
                        var e = y.info = NREUM.info,
                            t = l.getElementsByTagName("script")[0];
                        if (setTimeout(f.abort, 3e4), !(e && e.licenseKey && e.applicationID && t)) return f.abort();
                        c(b, function(t, n) {
                            e[t] || (e[t] = n)
                        }), u("mark", ["onload", a()], null, "api");
                        var n = l.createElement("script");
                        n.src = "https://" + e.agent, t.parentNode.insertBefore(n, t)
                    }
                }
    
                function o() {
                    "complete" === l.readyState && i()
                }
    
                function i() {
                    u("mark", ["domContent", a()], null, "api")
                }
    
                function a() {
                    return (new Date).getTime()
                }
                var u = e("handle"),
                    c = e(2),
                    f = e("ee"),
                    s = window,
                    l = s.document,
                    p = "addEventListener",
                    d = "attachEvent",
                    v = s.XMLHttpRequest,
                    g = v && v.prototype;
                NREUM.o = {
                    ST: setTimeout,
                    CT: clearTimeout,
                    XHR: v,
                    REQ: s.Request,
                    EV: s.Event,
                    PR: s.Promise,
                    MO: s.MutationObserver
                }, e(1);
                var m = "" + location,
                    b = {
                        beacon: "bam.nr-data.net",
                        errorBeacon: "bam.nr-data.net",
                        agent: "js-agent.newrelic.com/nr-998.min.js"
                    },
                    w = v && g && g[p] && !/CriOS/.test(navigator.userAgent),
                    y = t.exports = {
                        offset: a(),
                        origin: m,
                        features: {},
                        xhrWrappable: w
                    };
                l[p] ? (l[p]("DOMContentLoaded", i, !1), s[p]("load", r, !1)) : (l[d]("onreadystatechange", o), s[d]("onload", r)), u("mark", ["firstbyte", a()], null, "api");
                var h = 0
            }, {}]
        }, {}, ["loader"]);
    </script>
    Ответ написан
    5 комментариев
  • Почему php отображает исходный код?

    iNickolay
    @iNickolay
    Всё дело в том, что файл, где вы указываете пхп код был подключен с помощью функции file_get_contents();
    Ответ написан
    Комментировать
  • Как закрыть доступ по IP в NGINX + PHP-Fpm?

    tonymadbrain
    @tonymadbrain
    doam.ru
    Правильно вот так:
    satisfy any;
    allow 127.0.0.1; #здесь вместо 127.0.0.1 ваш IP адрес или подсеть
    deny all;


    И не в локейшене а выше, на уровне с root там и server_name.
    Ответ написан
    1 комментарий
  • Как правильно установить Phalcon?

    @ZaxapKramer
    Больной верстальщик
    Не устанавливается phalcon. В чем проблема?
    Кто устанавливал Phalcon, как запустить installer из cygwin(выводит ошибки)?

    docs.phalconphp.ru/ru/latest/reference/install.htm...
    Все работает, я проверил. Именно на CentOS 7, специально даже виртуальную машину запустил:)
    curl -s https://packagecloud.io/install/repositories/phalcon/stable/script.rpm.sh | sudo bash
    sudo yum install php70u-phalcon #у меня PHP7

    P.S. У Вас стоит Yum?
    Ответ написан
    3 комментария
  • Как сделать редирект на https и www в htaccess?

    orlov0562
    @orlov0562
    I'm cool!
    RewriteCond %{HTTPS} =off
    RewriteCond %{HTTP_HOST} ^www [NC]
    RewriteRule ^(.*)$ https://www.domain.com/$1 [R=301,L]

    будет редиректить http :// www . site . com на https :// www . site . com
    но не http :// site . com
    Ответ написан
    Комментировать
  • Как сделать редирект на мобильную версию?

    AndrewHaze
    @AndrewHaze
    Умею гуглить яндексом
    Вот так
    detect_device();
    window.onresize = function() {
    			var w = window,
    				d = document,
    				e = d.documentElement,
    				g = d.getElementsByTagName('body')[0],
    				x = w.innerWidth || e.clientWidth || g.clientWidth,
    				y = w.innerHeight|| e.clientHeight|| g.clientHeight;	
    				
    			if(x <= 800 && mobile == false){
    				window.location='mobile.php?page=index';	
    			}
    			if(x > 801 && mobile == true){
    				window.location='index.php?page=index';	
    			}		
    		};


    detect_device(); функция отсюда
    Ответ написан
    Комментировать
  • Как сделать редирект на мобильную версию?

    ewgenio
    @ewgenio
    Всё по чуть чуть
    PHP тут не причем.
    Реализуется на JS
    На вашем же примере в исходном коде страницы всё есть:

    function detect_device() {
    			var w = window,
    				d = document,
    				e = d.documentElement,
    				g = d.getElementsByTagName('body')[0],
    				x = w.innerWidth || e.clientWidth || g.clientWidth,
    				y = w.innerHeight|| e.clientHeight|| g.clientHeight;
    			var isiPhone = 		navigator.userAgent.toLowerCase().indexOf("iphone");
    			var isiPad = 		navigator.userAgent.toLowerCase().indexOf("ipad");
    			var isiPod = 		navigator.userAgent.toLowerCase().indexOf("ipod");
    			var isiAndroid = 	navigator.userAgent.toLowerCase().indexOf("android");
    			if(isiPhone > -1 || isiPad > -1 || isiPod > -1 || isiAndroid > -1 && mobile == false){
    				window.location='mobile.php?page=login';
    			}
    			if(x <= 800 && mobile == false){
    				window.location='mobile.php?page=index';	
    			}			
    
    		}
    		detect_device();
    		window.onresize = function() {
    			var w = window,
    				d = document,
    				e = d.documentElement,
    				g = d.getElementsByTagName('body')[0],
    				x = w.innerWidth || e.clientWidth || g.clientWidth,
    				y = w.innerHeight|| e.clientHeight|| g.clientHeight;	
    				
    			if(x <= 800 && mobile == false){
    				window.location='mobile.php?page=index';	
    			}
    			if(x > 801 && mobile == true){
    				window.location='index.php?page=index';	
    			}		
    		};
    Ответ написан
    Комментировать
  • Как обновить nginx в debian 8?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Как правильно обновить nginx 1.10.1-1~jessie до последней версии?

    Собрать из исходников deb-пакет. Но оно Вам точно надо?

    Также интересует как обновить php 5.6.29+dfsg-0+deb8u1 до 7.1?

    Аналогично. Можно просто собрать из исходников, можно собрать из исходников deb-пакет и установить его.

    Как альтернативный вариант - использовать сторонние репозитории, где уже всё собрано и готово. Например, DotDeb...
    Ответ написан
    Комментировать
  • Как обновить nginx в debian 8?

    @Fixid
    Если в общем случае: apt update && apt upgrade

    Если хочется прям последнюю, то подключаете репу
    Ответ написан
    Комментировать
  • Как пронумеровать id в mysql?

    ewgenio
    @ewgenio
    Всё по чуть чуть
    Если city_id точно начинается с 5051 - надо сделать апдейт всех city_id на - 5050 - (минимальный city_id -1)

    Бэкап не забудьте сделать сначала.

    пример запроса:
    UPDATE `gorod` SET city_id=city_id-5050
    Ответ написан
    Комментировать
  • Как сделать слайдер на картинке управление мышью?

    Pshkll
    @Pshkll
    Ответ написан
    Комментировать
  • Как связать таблицы?

    zualex
    @zualex
    Senior Software Engineer
    Почитайте про то, как связывать таблиц https://habrahabr.ru/post/193380/

    В данном случае связь много к одному - многие пользователи имеют одну группу.
    Пример запроса для получения пользователей и название группы.
    SELECT u.id, u.name, g.name AS group_name FROM user AS u LEFT JOIN user_group AS g ON g.id = u.id
    Ответ написан
    Комментировать
  • Как сделать страницу приватной?

    kirill_782
    @kirill_782
    Днем я Маринетт
    Создайте в БД какой нибудь столбец (например hidden) и если профиль скрыт, то пусть стоит значение 1, а если нет, то 0. При обращении к профилю проверять скрыт ли профиль или нет и выводить информацию
    Ответ написан
    Комментировать
  • Вывести пользователей из базы?

    kavi4
    @kavi4
    Web developer
    можно через подзапрос
    SELECT (select count(id) from таблица_с_сообщениями WHERE таблица_с_сообщениями.после_с_id_пользователя = users .id) as count_messages , users.id FROM users INNER JOIN таблица_с_сообщениями ON users.id = таблица_с_сообщениями.после_с_id_пользователя ORDER BY `count_messages `  DESC
    Ответ написан
    Комментировать
  • Вывести пользователей из базы?

    @Lulzsec
    SELECT * FROM users WHERE uid='$uid' AND status='1' order by КОЛОНКА_С_КОЛ-ОМ_СООБЩЕНИЙ desc;
    Ответ написан
    Комментировать
  • Как правильно вывести в php?

    uaf0x
    @uaf0x
    Всего понемногу
    Попробуй написать:
    <?php echo $copyright; ?>

    или в наглую допиши
    © <?php echo date("Y")." ".$_SERVER['HTTP_HOST'];  ?>
    Ответ написан
    Комментировать
  • Как вывести текст из админки на сайт?

    @Camaro67
    Помог? - жми "Отметить решением"
    Сохраняете текст в базе -> выводите текст из базы на страницу
    Ответ написан
    Комментировать