Я использовал пакет Text_LanguageDetect pear с некоторыми разумными результатами. Он очень прост в использовании и имеет скромную 52-языковую базу данных. Недостатком является отсутствие определения восточноазиатских языков.
require_once 'Text/LanguageDetect.php';
$l = new Text_LanguageDetect();
$result = $l->detect($text, 4);
if (PEAR::isError($result)) {
echo $result->getMessage();
} else {
print_r($result);
}
приводит к:
Array
(
[german] => 0.407037037037
[dutch] => 0.288065843621
[english] => 0.283333333333
[danish] => 0.234526748971
)
Если вы хотите больше, чем просто скопировать упоминание оптимизатора отражения в одном абзаце из руководства, есть хорошее обсуждение здесь улучшений производительности с помощью оптимизатора отражения. , а также краткое обсуждение методов.
Из моего ограниченного понимания (все это исходит из чтения, без экспериментов с моей стороны, поэтому исправления приветствуются) суть в том, что на самом деле существует два оптимизатора отражения:
codedom , который в основном генерируется, а затем компилируется (т.е. nhibernate генерирует код Getter / Setter оболочки для ваших сущностей, а затем компилирует его). Судя по всему, это работает только с публичными участниками, и, вероятно, является дополнительным дорогостоящим в использовании, потому что он наивно генерирует классы-оболочки (независимо от того, является ли конкретное поле общедоступным), пытается его скомпилировать и выдает исключение в случае неудачи.
облегченная генерация кода , который использует оккультную практику размышления. Emit для получения / установки значений. Для меня это все еще очень новая область, но личные эксперименты с этим показывают, что вы можете использовать SRE для очень быстрого управления частными переменными, а источник по крайней мере, кажется, обеспечивает излучение для основные поля / свойства независимо от модификатора доступа. Это значение по умолчанию.
Что касается эффекта удара - ну, судя по блестящим графикам в 1 , похоже, что если вы сохраняете / увлажняете много тяжелых объектов во время разработки, это может быть довольно существенный.
Из https://www.hibernate.org/hib_docs/nhibernate/html/session-configuration.html
Позволяет использовать Класс, созданный во время выполнения, для установки или получения свойств объекта или компонента вместо использования отражения во время выполнения (свойство системного уровня). Использование оптимизатора отражения приводит к определенным затратам на запуск приложения, но в конечном итоге должно привести к повышению производительности. Вы не можете установить это свойство в hibernate.cfg.xml или в разделе файла конфигурации приложения.
Позволяет использовать сгенерированные во время выполнения класс для установки или получения свойств объект или компонент вместо использования отражение времени выполнения (системный уровень свойство). Использование отражения оптимизатор вызывает определенный запуск стоимость в приложении, но должна привести к повышению производительности в долгосрочной запустить. Вы не можете установить это свойство в hibernate.cfg.xml или раздел файл конфигурации приложения.